Есть ли недостатки у прокси через порт вместо Unix-сокета?

Я тестирую развёртывание Discourse на базе AlmaLinux 9 (производной от CentOS) с включённым SELinux и внешним nginx.

Поскольку контейнер на базе Ubuntu не поддерживает SELinux, при каждом запуске контейнера он заменяет unix-сокет на новый файл без меток безопасности. В результате nginx не может обращаться к нему, пока я не выполню restorecon для файла, чтобы назначить ему контекст безопасности, разрешённый для доступа nginx. Очевидно, что это не подходит как решение для продакшена.

Я не хочу использовать semanage permissive -a httpd_t, так как мне бы хотелось реально использовать возможности SELinux для единственного сервиса, который открыт для внешнего мира. :smiling_face:

Всё работает, если проксировать на сетевой порт вместо unix-сокета:

  • setsebool -P httpd_can_network_connect 1
  • не использовать templates/web.socketed.template.yml
  • expose: - "8008:80"
  • во внешнем nginx указать proxy_pass http://127.0.0.1:8008

Есть ли какие-либо недостатки у такого подхода? Стоит ли изменить какие-либо параметры, например, ограничения подключений, в этой конфигурации?

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

Пока вы блокируете прямое подключение к порту 8008 любым удобным вам способом, проблем не будет.

Спасибо!

public (active)
  target: default
...
  services: dhcpv6-client http https ssh
  ports: 
  protocols: 
  forward: yes
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

Существует разница в задержке: сокет примерно в 3 раза быстрее локального порта обратной связи.

Тем не менее, в лучшем случае мы говорим о разнице в 4–5 мкс.

После более детального изучения я однозначно хочу добавить proxy_set_header "Connection" "";, чтобы отключить заголовок по умолчанию Connection: close.