Nginx proxy_passredirect到错误的URL

我已经设置Nginx / Apache2 / WordPress使用代理caching,以防止多余的服务器负载(狗屎主题和插件)。

一切正常,但是一旦你点击了Wp-Admin,它就会redirect到http://backend:82反对http://example.com/wp-admin 。

我从Nginx / Apache Proxy_pass教程获取configuration 。

我怀疑这是wp-admin / login规则,但看起来就像其他的代理传递规则,所以我很难过。 我的configuration如下:

 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; } 

您必须定义服务器的上游标签顶部。 因为你不能在服务器范围中使用未定义的variables。

以下是您的来源示例代码

 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;