Nginx proxy_pass 重定向到错误的 URL

Nginx proxy_pass 重定向到错误的 URL

我已经设置 Nginx/Apache2/Wordpress 使用代理缓存,以防止服务器负载过大(糟糕的主题和插件)。

一切正常,但是一旦你点击 Wp-Admin,它会http://backend:82重定向到http://example.com/wp-admin

我的配置来自:Nginx/Apache Proxy_pass 教程

我怀疑是 wp-admin/login 规则,但它看起来就像其他 Proxy-pass 规则一样,所以我很困惑。我的配置如下:

proxy_cache_path /var/run/nginx-cache levels=1:2 keys_zone=main:15m inactive=60m;
#proxy_temp_path /var/run/nginx_cache;

server {
        listen 80 default_server;
        listen [::]:80 default_server ipv6only=on;


        server_name ########;

        # Set proxy headers for the passthrough
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

        # Let the Set-Cookie header through.
        proxy_pass_header Set-Cookie;

        ## domain.org -> www.domin.org (301 - Permanent)
        if ($host ~* ^([a-z0-9]+\.org)$) {
            set $host_with_www www.$1;
            rewrite ^(.*)$
            http://$host_with_www$1 permanent;
        }

    # Max upload size: make sure this matches the php.ini in .htaccess
        client_max_body_size 8m;

        # Catch the wordpress cookies.
        # Must be set to blank first for when they don't exist.
        set $wordpress_auth "";
        if ($http_cookie ~* "wordpress_logged_in_[^=]*=([^%]+)%7C") {
            set $wordpress_auth wordpress_logged_in_$1;
        }

    # Set the proxy cache key
        set $cache_key $scheme$host$uri$is_args$args;

        # All media (including uploaded) is under wp-content/ so
        # instead of caching the response from apache, we're just
        # going to use nginx to serve directly from there.
        location ~* ^/(wp-content|wp-includes)/(.*)\.(gif|jpg|jpeg|png|ico|bmp|js|css|pdf|doc)$ {
            root /var/www/html/nen;
        }

    # Don't cache these pages.
        location ~* ^/(wp-admin|wp-login.php)
        {
            proxy_pass http://backend;
        }

    location / {
            proxy_pass http://backend;
            proxy_cache main;
            proxy_cache_key $cache_key;
            proxy_cache_valid 30m; # 200, 301 and 302 will be cached.
            # Fallback to stale cache on certain errors.
            # 503 is deliberately missing, if we're down for maintenance
# we want the page to display.
            proxy_cache_use_stale error
                                  timeout
                                  invalid_header
                                  http_500
                                  http_502
                                  http_504
                                  http_404;
            # 2 rules to dedicate the no caching rule for logged in users.
            proxy_cache_bypass $wordpress_auth; # Do not cache the response.
            proxy_no_cache $wordpress_auth; # Do not serve response from cache.
        }

    # Cache purge URL - works in tandem with WP plugin.
        location ~ /purge(/.*) {
            proxy_cache_purge main "$scheme://$host$1";
        }
    } # End server


upstream backend {
        # Defines backends.
        server localhost:82; 
}

答案1

您必须在服务器顶部定义上游标记。因为您不能在服务器范围内使用未定义的变量。

这是来自您的源代码的示例代码

upstream backend {
    # Defines backends.
    # Extracting here makes it easier to load balance
    # in the future. Needs to be specific IP as Plesk
    # doesn't have Apache listening on localhost.
    ip_hash;
    server xxx.xxx.xxx.xxx:81; # IP goes here.
}

server {
listen xxx.xxx.xxx.xxx:80; # IP goes here.
    server_name fauna-flora.org www.fauna-flora.org xxx.xxx.xxx.xxx; # IP could go here.

    # Set proxy headers for the passthrough
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

相关内容