Уважаемый @Teraterayuki,
Вот пример набора работающих виртуальных хостов Apache2 для обратного прокси к сокету Unix в контейнере Discourse:
Порт 80
<VirtualHost *:80>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
ProxyPreserveHost On
#ProxyPass / http://127.0.0.1:8888/
#ProxyPassReverse / http://127.0.0.1:8888/
# Доступные уровни логирования: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# Также можно настроить уровень логирования для отдельных
# модулей, например:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors.log
CustomLog ${APACHE_LOG_DIR}/community.log combined
# Для большинства файлов конфигурации из conf-available/, которые
# включаются или отключаются на глобальном уровне, можно
# добавить строку только для конкретного виртуального хоста. Например,
# следующая строка включает конфигурацию CGI только для этого хоста
# после того, как она была глобально отключена с помощью "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
RewriteEngine on
RewriteCond %{SERVER_NAME} =mysite.mydomain.com
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
Порт 443
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
#SSLProxyEngine on #включите это после настройки Let's Encrypt на обратном прокси
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (Bytespider|Yandex|Wget|seocompany|CCBot|Cincraw) [NC]
RewriteRule . - [R=403,L]
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
#ProxyPass / http://127.0.0.1:8888/
#ProxyPassReverse / http://127.0.0.1:8888/
ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
# Доступные уровни логирования: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# Также можно настроить уровень логирования для отдельных
# модулей, например:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
#CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined
# Для большинства файлов конфигурации из conf-available/, которые
# включаются или отключаются на глобальном уровне, можно
# добавить строку только для конкретного виртуального хоста. Например,
# следующая строка включает конфигурацию CGI только для этого хоста
# после того, как она была глобально отключена с помощью "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
SSLCertificateFile /etc/letsencrypt/live/mysite.mydomain.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/mysite.mydomain.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>
@Teraterayuki
Обратите внимание, что в этой конфигурации прокси использует unix socket, а не web socket (ws).
Также обратите внимание, что в этой конфигурации вам не нужно вручную добавлять информацию о Let’s Encrypt. Вы можете начать с этого:
Порт 80 перед запуском Certbot
<VirtualHost *:80>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
ProxyPreserveHost On
#ProxyPass / http://127.0.0.1:8888/
#ProxyPassReverse / http://127.0.0.1:8888/
# Доступные уровни логирования: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# Также можно настроить уровень логирования для отдельных
# модулей, например:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors.log
CustomLog ${APACHE_LOG_DIR}/community.log combined
# Для большинства файлов конфигурации из conf-available/, которые
# включаются или отключаются на глобальном уровне, можно
# добавить строку только для конкретного виртуального хоста. Например,
# следующая строка включает конфигурацию CGI только для этого хоста
# после того, как она была глобально отключена с помощью "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
</VirtualHost>
Порт 443 перед запуском Certbot
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
#SSLProxyEngine on #включите это после настройки Let's Encrypt на обратном прокси
RewriteEngine On
ProxyPreserveHost On
ProxyRequests Off
RequestHeader set X-Forwarded-Proto expr=%{REQUEST_SCHEME}
RequestHeader set X-Real-IP expr=%{REMOTE_ADDR}
#ProxyPass / http://127.0.0.1:8888/
#ProxyPassReverse / http://127.0.0.1:8888/
ProxyPass / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
ProxyPassReverse / unix:/var/discourse/shared/socket-only/nginx.http.sock|http://localhost/
# Доступные уровни логирования: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# Также можно настроить уровень логирования для отдельных
# модулей, например:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
#CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined
# Для большинства файлов конфигурации из conf-available/, которые
# включаются или отключаются на глобальном уровне, можно
# добавить строку только для конкретного виртуального хоста. Например,
# следующая строка включает конфигурацию CGI только для этого хоста
# после того, как она была глобально отключена с помощью "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
</VirtualHost>
</IfModule>
Затем, если вы выполните:
certbot -d mysite.mydomain.com
Дружелюбный certbot автоматически добавит необходимый SSL-код за вас.
После того как наш друг certbot добавит свой код конфигурации и всё будет работать как ожидается, вы можете раскомментировать эту строку:
#SSLProxyEngine on #включите это после настройки Let's Encrypt на обратном прокси
и снова перезапустить apache2.
Надеюсь, это поможет @Teraterayuki.
Берегите себя.
Заключительные замечания:
- Обратите внимание, что мы не используем
haproxy в наших конфигурациях обратного прокси Apache2. haproxy добавляет ненужный уровень сложности с практически никакой ощутимой пользой (для нас), поэтому мы запускаем Apache2 в качестве обратного прокси «простым способом». Если вы хотите использовать haproxy, результат может быть другим (YMMV); но честно говоря, мы не используем haproxy (в нескольких рабочих настройках обратного прокси Apache2) и никогда не сталкивались с проблемами при использовании Apache2 в качестве обратного прокси.
- Если вы не используете
mod_pagespeed, закомментируйте эти строки. Однако, если вы запускаете mod_pagespeed, отключите mod_pagespeed для каждого виртуального хоста при обратном проксировании к Discourse.
Всего наилучшего… и надеюсь, это хоть немного поможет вам.