Как заставить работать WordPress за nginx

Первым делом нужно привести настройки nginx, файл  /etc/nginx/sites-available/default   примерно вот к такому виду (по образцу моих настроек) :

server {
    server_name legan.by;
    listen 80 default_server;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;

    ssl_session_cache shared:SSL:20m;
    ssl_session_timeout 60m;
    ssl_prefer_server_ciphers on;
    ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5;
    ssl_dhparam /etc/nginx/cert/dhparam.pem;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    add_header Strict-Transport-Security "max-age=31536000" always;

#    root /var/www/html/wp/;

    ssl_certificate /etc/letsencrypt/live/legan.by/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/legan.by/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/legan.by/chain.pem;

    ssl_stapling on;
    ssl_stapling_verify on;
    resolver 8.8.8.8;

    access_log /var/log/nginx/host.com-access.log;
    error_log /var/log/nginx/host.com-error.log;

    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Server $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    location / { #Тут унас живёт Tomcat ROOT
        proxy_pass http://127.0.0.1:8080/; 
    }

    location /scm/ { #Отдельно настройку для SCM, что бы не было всяких 127.0.0.1 внутри приложения
        proxy_set_header X-Real-IP         $remote_addr;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_pass  http://127.0.0.1:8080/scm/;
    }

    location /blog/ { # Это Apache, а именно мой блог на базе Worldpress
        proxy_pass http://127.0.0.1:8081/blog/;
    }

    location /phpmyadmin/ { # Ну Это Apache phpmyadmin
        proxy_pass http://127.0.0.1:8081/phpmyadmin/;
    }
}

но обычного редиректа для нормальной работы Worldpress недостаточно, необходимо отредактировать файл настроек (в моём случае его путь будет таким) /var/www/html/blog/wp-config.php, и добавить туда вот такие строки :

// If WordPress is behind reverse proxy.
// which proxies https to http
if ( (!empty( $_SERVER['HTTP_X_FORWARDED_HOST'])) ||
     (!empty( $_SERVER['HTTP_X_FORWARDED_FOR'])) ) {.

    // http://wordpress.org/support/topic/wordpress-behind-reverse-proxy-1
    $_SERVER['HTTP_HOST'] = $_SERVER['HTTP_X_FORWARDED_HOST'];

    define('WP_HOME', 'https://legan.by/blog/');
    define('WP_SITEURL', 'https://legan.by/blog/');

    // http://wordpress.org/support/topic/compatibility-with-wordpress-behind-a-reverse-proxy
    $_SERVER['HTTPS'] = 'on';
}

После такого рода манипуляций, в адресной строке должен правильно ресолвится ваше доменное имя, а не 127.0.0.1:8081 на котором висит Apache.

 

Добавить комментарий