Wordpress za proxym na Apaczu

Posted on Thu 20 May 2021 in Linux

Zapisuję, żeby nie wymyślać drugi raz.

Są dwa serwery:
1. wordpress o adresie: 192.168.1.82 gdzie Apache serwuje pliki na porcie: 98
2. proxy: 192.168.1.80
Adres publiczny to np.: wp.aqq.pl

Na serwerze wordpress należy włączy moduł nagłówków:

sudo a2enmod headers

Pomijam proces wygenerowania certyfikatu, np. za pomocą certbota.

Konfiguracja serwera proxy:

<VirtualHost *:80>
        ServerName wp.aqq.pl
        Redirect / https://wp.aqq.pl/
</VirtualHost>

<VirtualHost *:443>
        ServerName wp.aqq.pl
        SSLEngine on
        ProxyPreserveHost On
        ProxyRequests off
        SSLProxyEngine  On
        Loglevel debug
        ProxyPass / http://192.168.1.82:98/
        ProxyPassReverse / http://192.168.1.82:98/
        SSLCertificateFile /etc/letsencrypt/live/wp.aqq.pl/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/wp.aqq.pl/privkey.pem
        Include /etc/letsencrypt/options-ssl-apache.conf

        <Location />
# mega ważne nagłówki
                RequestHeader set X-Forwarded-Proto “https”
                RequestHeader set X-Forwarded-Port “443”
        </Location>
</VirtualHost>

Na serwerze wordpress trzeba zmienić konfigurację portw w Apache'u:

sudo vim /etc/apache2/ports.conf

i dodać linię z odpowiednim portem, tu: 98

Listen 98

Konfiguracja wordpresa:

<VirtualHost *:98>
        ServerName 192.168.0.82
        php_flag default_charset utf8
        ServerAdmin admin@wp.aqq.pl
        ServerPath /var/www/html/wp.aqq.pl
        DocumentRoot /var/www/html/wp.aqq.pl/
        ErrorLog ${APACHE_LOG_DIR}/wp.aqq.pl-error.log
        TransferLog ${APACHE_LOG_DIR}/wp.aqq.pl-transfer.log

        <Directory /var/www/html/wp.aqq.pl>
                AllowOverride All
                Options +FollowSymlinks
        </Directory>
</VirtualHost>

To nie koniec zabawy.

W konfiguracji Wordpressa też trzeba coś zmienić, a konkretnie w pliku:

sudo vim /var/www/html/wp.aqq.pl/wp-config.php

dodać poniższe linie:

define('FORCE_SSL_ADMIN', true);
if (strpos($_SERVER['HTTP_X_FORWARDED_PROTO'], 'https') !== false)
        $_SERVER['HTTPS']='on';