Configuration outbound proxy

Our discourse runs behind a proxy for outbound traffic.
We see that with “external system avatars enabled” selected the avatars are not loaded. Also the check for updates does not work.
We have set http_proxy and https_proxy. In the logging the message “Job exception: invalid address” is repeated.
How can we have outgoing requests working?

「いいね!」 1

Is this the letter avatars that is an issue or the uploaded avatars? Can you describe in detail how stuff is configured?

What’s the format of your http_ proxy variables? It has user and password inside?

We have no user and password, output from set | grep -i proxy

HTTPS_PROXY=http://<server>:<port>/
HTTP_PROXY=http://<server>:<port>/
NO_PROXY='127.0.0.1, localhost, <internal-network>'
http_proxy=http://<server>:<port>/
https_proxy=http://<server>:<port>/
no_proxy='127.0.0.1, localhost, <internal-network>'

A curl from within the container, which uses the proxy-settings:
curl -o /dev/null -v https://avatars.discourse.org/v2/letter/s/5f9b8f/45.png
results in: 200 OK

This is the letter avatars, but also the check for updates doesn’t work. It looks like all outgoing requests are failing.

We have a docker-host based on the standalone.yml. In the env: section we added the proxy-settings. Attaching to the running container shows that the proxy-settings are correct.

Last time I had to work in an environment like this I found that Ruby is the worst language in this aspect, where most http methods don’t respect the proxy variables unless explicitly set, where java, python, node, php all work fine. /rant

You can try to emulate the version check with:

ssh root@your.server.here
cd /var/discourse
./launcher enter app
cd /var/www/discourse
rails c
puts Excon.send( :get, 'https://meta.discourse.org/latest.json', omit_default_port: true).body
## also
puts ENV ## does this prints your proxy info?

It works or fail? What’s the error message?

「いいね!」 1

No errors, all output looks fine.

root@93ca6a8ec7a6-discourse:/var/www/discourse# rails c
[1] pry(main)> puts Excon.send( :get, 'https://meta.discourse.org/latest.json', omit_default_port: true).body
{"users":[{"id":1,"username":"sam","avatar_template":"/user_avatar/meta.discourse.org/sam/{size}/5243_1.png"},

... much more ...

Frequent Poster","user_id":1,"primary_group_id":47}]}]}}
=> nil

[2] pry(main)> ENV
...
 "HTTPS_PROXY"=>"http://<server>:8082/",
 "HTTP_PROXY"=>"http://<server>:8082/",
...
 "NO_PROXY"=>
  "127.0.0.1, localhost, <internal>",
...
 "http_proxy"=>"http://<server>:8082/",
 "https_proxy"=>"http://<server>:8082/",
 "no_proxy"=>
  "127.0.0.1, localhost, <internal>"}

Hello @Falco,
Any ideas on my output?
Peter

「いいね!」 1

We can emulate the version check and we can disable remote avatars, but are there any more outbound connections known? If not, these workarounds could work for us, but we’re not sure if we introduce some other problems then…

You can simply disable version check in site settings at least.

We are not sure if there are other problems when we disable the version check and remote avatars. Are there any other outbound connections needed? As Dimitri also asked.

@pvdr - did you get this fully resolved? We too are running a discourse behind a firewall which means youtube/github oneboxes don’t work as expected. I’m told by our IS that we may be able to allow outbound access to youtube via our internal corp proxy, and searching for help turned up this thread.

We have problems also with the mail, so we haven’t migrated yet. The problems we had are not solved either.

Discourseの新しいバージョンで変更点はありましたか?
アウトバウンドプロキシの設定を簡単に行う方法は現在ありますか?

Cloudflareの保護が正しく機能するためには、攻撃者からオリジンIPを隠すことが重要です。

関連トピック:

必要であればコードに貢献することもできます。どのようなコードをリファクタリングして、プロキシ設定を使用する必要があるか、いくつかのヒントが必要です。

「いいね!」 1

現時点では、このユースケースはサポートしておりません。
私の直感では、これはシステムレベルで処理するのが最も適切でしょう。具体的には、発信接続(または Cloudflare の IP 宛てではないすべてのトラフィック)を傍受し、何らかのローカルプロキシに転送する方法です。

残念ですね。あらゆる種類のアプリにプロキシ設定があります。特に企業内のクローズド環境では一般的です。

確かに、そのための着手方法について何かアドバイスはありますか?iptables などでしょうか?
具体的な例があれば非常に助かります :slight_smile:

この場合は、こちらから始めることをお勧めします:Install discourse with internet access only via proxy

私が過去に関わったほとんどのクローズド環境では、トラフィックは通常、インタセプト型プロキシを介して透過的に転送されています。

「いいね!」 1

インストール自体に問題はありませんが、他のウェブサイトへのクローリングなど、発信接続用のカスタマイズ可能なプロキシがない点にのみ問題があります。

もし私の理解が間違っていれば訂正してくださいが、インストールプロセスと、プロキシ設定が機能するRailsは別物です。

これを解決しましたか?

「いいね!」 1