Voglio installare usando un proxy inverso per Apache

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:

  1. 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.
  1. 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.

6 Mi Piace