NGINX配置WordPress wp-admin白名单失效,添加规则后出现404
NGINX /wp-admin IP白名单配置导致404的解决方法
你的问题出在/wp-admin这个location块只配置了访问控制规则,没有将请求转发到WordPress后端服务。
当你只保留deny all时,NGINX直接触发访问控制的403响应,不会去处理请求的后续转发;但添加allow规则后,被允许的IP会进入这个location,此时NGINX尝试在本地服务器上查找/wp-admin对应的静态资源,而你的WordPress是部署在后端http://wordpress服务上的,本地没有这些资源,所以返回404错误。
修正方法很简单,给/wp-admin的location块加上和根location一样的代理配置,让允许的IP请求能转发到WordPress后端:
location / { proxy_pass http://wordpress; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; } location /wp-admin { allow 123.0.0.0/4; deny all; # 新增代理配置,将请求转发到WordPress后端 proxy_pass http://wordpress; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host; }
如果不想重复写这些代理header,可以把公共配置抽成单独的文件,比如创建proxy-params.conf:
proxy_pass http://wordpress; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header Host $host;
然后在两个location里引用:
location / { include proxy-params.conf; } location /wp-admin { allow 123.0.0.0/4; deny all; include proxy-params.conf; }
这样修改后,被允许的IP访问/wp-admin时,请求会正常转发到WordPress后端,不会再出现404错误。
内容的提问来源于stack exchange,提问作者Jason Quinlan
相关产品推荐
相关产品推荐

