WordPress konstante Weiterleitung mit nginx Upstream

Lesezeit: 3 Minuten

Es ist eine Situation aufgetreten, in der Server1, auf dem Nginx ausgeführt wird, alle „https://stackoverflow.com/“-Speicherorte an Server2 weiterleitet, während „/api“ und einige andere auf Server1 verbleiben. Dies versucht auch, SSL am Laufen zu halten. Der Versuch, die WP-URL von zu verschieben http://test.beispiel.com zu https://beispiel.com hat die Startseite richtig geladen, aber lädt wp-admin gibt zu viele Weiterleitungen.

Server1 Nginx:

upstream webapp_url {
    server IP:80;
}

server {
        listen 443 ssl;
        server_name www.example.com example.com;
        access_log /var/log/nginx/example.log;

        ssl_certificate /etc/nginx/ssl/example.crt;
        ssl_certificate_key /etc/nginx/ssl/server.key;
        ssl_ciphers RC4:HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        location /files/ {
                root /home;
                access_log off;
                expires max;
                if ($request_filename !~* ^.*?\.(jpg)|(png)|(gif)|(pdf)){
                        add_header Content-Disposition: "$request_filename";
                }
        }

        location / {
                # proxy_pass http://site_url/;
                proxy_http_version 1.1;
                proxy_set_header Upgrade $http_upgrade;
                proxy_set_header Connection 'upgrade';
                proxy_set_header Host $host;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header X-Forwarded-Proto https;
                proxy_cache_bypass $http_upgrade;
                proxy_set_header X-Example "1";
                proxy_pass http://webapp_url/;
        }

Dies lädt den anderen Server gut, die Homepage und die Links funktionieren alle (obwohl Warnungen zu gemischten Inhalten angezeigt werden, da ich sie im Admin nicht ändern kann). WP siteurl und home sind beide auf die neue Adresse eingestellt.

Server2 Nginx:

server {
    #listen       443 ssl;
    listen 80;
    server_name example.com test.example.com;
    client_max_body_size 30M;
    error_log /var/log/wordpress/error.log info;
    location / {
        root   /home/wordpress;
        try_files $uri $uri/ /index.php?q=$request_uri;
        index index.php  index.html index.htm;
    }

    #ssl_certificate /etc/nginx/ssl/example.crt;
    #ssl_certificate_key /etc/nginx/ssl/example.key;
    #ssl_ciphers RC4:HIGH:!aNULL:!MD5;
    #ssl_prefer_server_ciphers on;

    error_page  404              /404.html;
    location = /404.html {
        root   /usr/share/nginx/html;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    #
    location ~ \.php$ {
        root           /home/wordpress;
        fastcgi_pass   unix:/var/run/php5-fpm.sock;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME   $document_root$fastcgi_script_name;
        include        fastcgi_params;
    }
}

Wird geladen /wp-admin/ startet eine unendliche Weiterleitung (zur selben URL). Ich habe es in definiert wp-config.php zu:

define('WP_HOME','https://example.com');
define('WP_SITEURL','https://example.com');

wp-admin überprüft, ob die Verbindung sicher ist, andernfalls wird auf die umgeleitet https Version derselben URL. In einer Situation wie Ihrer führt dies zu einer Umleitungsschleife.

Sie müssen WordPress mitteilen, dass die Verbindung sicher ist.

Ich stelle fest, dass Sie den entsprechenden Header auf Server 1 festgelegt haben mit:

proxy_set_header X-Forwarded-Proto $scheme;

(In Ihrem Fall der Wert von $scheme fest verdrahtet ist https).

Sie müssen dies jedoch auch an WordPress übergeben, in Form einer HTTPS Parameter mit einem Wert von on.

Dies wird mit einem erreicht map Direktive (auf Server 2):

map $http_x_forwarded_proto $https_flag {
    default off;
    https on;
}
server {
    ...
}

(Das map Direktive wird innerhalb der platziert http Block. Sie können es direkt über dem platzieren server wie oben gezeigt blockieren. Sehen dieses Dokument für Details)

Fügen Sie außerdem eine weitere hinzu fastcgi_param die passieren HTTPS Parameter an WordPress (auf Server 2):

location ~ \.php$ {
    ...
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_param HTTPS $https_flag;
    ...
}

Schritt 1.

  • Aktivieren und installieren Sie Ihre erforderliche PHP-Version auf Ihrem Server.

Schritt 2.

  • sudo yum install php-cli php-pdo php-fpm php-mysqlnd

Schritt 3.

  • sudo systemctl start php-fpm

Schritt 4.

  • sudo systemctl enable php-fpm

Kopieren Sie schließlich die Nginx-Konfiguration

server {
    root /path/to/your/wordpress;
    index index.php index.html index.htm;
    server_name site.com www.site.com;
    add_header X-Frame-Options SAMEORIGIN;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

    location ~ .php$ {
       try_files $uri =404;
       fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock; # path might differ from OS to OS
       fastcgi_index index.php;
       fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
       include fastcgi_params;
    }
}

1333300cookie-checkWordPress konstante Weiterleitung mit nginx Upstream

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy