Gentile @Teraterayuki,
Ecco un esempio di configurazione funzionante per i virtual host di Apache2 che agiscono come reverse proxy verso una socket Unix in un container Discourse:
Porta 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/
# Livelli di log disponibili: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# È anche possibile configurare il livello di log per moduli specifici, ad esempio:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors.log
CustomLog ${APACHE_LOG_DIR}/community.log combined
# Per la maggior parte dei file di configurazione in conf-available/, abilitati o disabilitati a livello globale,
# è possibile includere una riga valida solo per un particolare virtual host. Ad esempio,
# la riga seguente abilita la configurazione CGI solo per questo host,
# dopo che è stata disabilitata globalmente con "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>
Porta 443
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
#SSLProxyEngine on #abilarla dopo aver configurato Let's Encrypt sul reverse proxy
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/
# Livelli di log disponibili: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# È anche possibile configurare il livello di log per moduli specifici, ad esempio:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
#CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined
# Per la maggior parte dei file di configurazione in conf-available/, abilitati o disabilitati a livello globale,
# è possibile includere una riga valida solo per un particolare virtual host. Ad esempio,
# la riga seguente abilita la configurazione CGI solo per questo host,
# dopo che è stata disabilitata globalmente con "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
Si prega di notare che in questa configurazione il proxy utilizza una socket unix e non una web socket (ws)
Si noti inoltre che in questa configurazione non è necessario aggiungere manualmente le informazioni di Let’s Encrypt. Puoi iniziare con questo:
Porta 80 prima di eseguire 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/
# Livelli di log disponibili: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# È anche possibile configurare il livello di log per moduli specifici, ad esempio:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors.log
CustomLog ${APACHE_LOG_DIR}/community.log combined
# Per la maggior parte dei file di configurazione in conf-available/, abilitati o disabilitati a livello globale,
# è possibile includere una riga valida solo per un particolare virtual host. Ad esempio,
# la riga seguente abilita la configurazione CGI solo per questo host,
# dopo che è stata disabilitata globalmente con "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
</VirtualHost>
Porta 443 prima di eseguire Certbot
<IfModule mod_ssl.c>
<VirtualHost *:443>
ServerName mysite.mydomain.com
ServerAdmin webmaster@localhost
#SSLProxyEngine on #abilarla dopo aver configurato Let's Encrypt sul reverse proxy
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/
# Livelli di log disponibili: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# È anche possibile configurare il livello di log per moduli specifici, ad esempio:
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/community_errors_ssl.log
#CustomLog ${APACHE_LOG_DIR}/community_ssl.log combined
# Per la maggior parte dei file di configurazione in conf-available/, abilitati o disabilitati a livello globale,
# è possibile includere una riga valida solo per un particolare virtual host. Ad esempio,
# la riga seguente abilita la configurazione CGI solo per questo host,
# dopo che è stata disabilitata globalmente con "a2disconf".
#Include conf-available/serve-cgi-bin.conf
ModPagespeed Off
</VirtualHost>
</IfModule>
Quindi, se esegui:
certbot -d mysite.mydomain.com
Il gentile certbot si occuperà di aggiungere automaticamente il codice SSL necessario per te.
Dopo che il nostro amico certbot ha aggiunto il suo codice di configurazione e tutto funziona come previsto, puoi decommentare questa riga:
#SSLProxyEngine on #abilarla dopo aver configurato Let's Encrypt sul reverse proxy
e riavviare apache2.
Spero che questo ti sia d’aiuto, @Teraterayuki
Stai attento.
Note conclusive:
- Si prega di notare che non utilizziamo
haproxy nelle nostre configurazioni di reverse proxy Apache2. haproxy aggiunge un livello di complessità non necessario con quasi nessun beneficio tangibile (per noi), quindi eseguiamo Apache2 come reverse proxy “nel modo semplice”. Potrebbe essere diverso per te se desideri utilizzare haproxy, ma onestamente, non utilizziamo haproxy (in diversi setup di reverse proxy Apache2 in produzione) e non abbiamo mai avuto problemi con Apache2 come reverse proxy.
- Se non stai utilizzando
mod_pagespeed``, commenta quelle righe. Tuttavia, se stai eseguendo mod_pagespeed``, disattiva mod_pagespeed per ogni virtual host quando si effettua il reverse proxy verso Discourse.
Tanti auguri… e speriamo che questo ti sia di qualche piccolo aiuto.