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?

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?

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

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?
Сейчас есть простой способ настроить исходящий прокси?

Важно скрыть исходный IP-адрес от злоумышленников, если защита Cloudflare должна работать корректно.

Связанные темы:

Я могу внести вклад в код, если это необходимо. Мне нужны лишь подсказки, какой код нужно рефакторить для использования настроек прокси.

На данный момент мы не поддерживаем этот сценарий.

Мне кажется, что это лучше всего решить на уровне системы, перехватывая исходящие соединения (или: весь трафик, не идущий к IP-адресам Cloudflare) и перенаправляя их на локальный прокси какого-либо типа.

Это досадно. Настройки прокси есть у всех видов приложений. Особенно это распространено в корпоративных закрытых средах.

Конечно, есть ли какие-то советы, с чего начать? iptables?
Буду очень признателен за какой-нибудь пример :slight_smile:

В данном случае я рекомендую начать отсюда: Install discourse with internet access only via proxy

В большинстве закрытых сред, с которыми мне приходилось работать, трафик обычно перенаправляется прозрачно через перехватывающий прокси.

У меня нет проблем с установкой, только с отсутствием настраиваемого прокси для исходящих соединений, например, при обходе других веб-сайтов.

Поправьте меня, если я ошибаюсь: процесс установки и работа Rails в настройках прокси разделены.

Ты это решил?