我在nginx的反向代理背后为wordpress服务。我希望能够在不同的根目录中提供静态页面。
我试过这个:
server {
listen 80;
listen [::]:80;
server_name ${NGINX_HOST};
root /static-pages;
sendfile on;
tcp_nodelay on;
location / {
try_files $uri $uri/ /static-pages/ =404;
#try_files $uri $uri/ =404;
#try_files /static-pages $uri/ =404;
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_pass http://wordpress;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}wordpress工作得很好,但是当我尝试访问其中一个静态页面时,我仍然得到404。当然,我可以向我拥有的每个静态页面添加一个location指令,但这似乎是一种开销。我能让它起作用吗?
下面是调试日志的一部分,我认为这是相关的:
[debug] 7#7: *2 generic phase: 12
[debug] 7#7: *2 try files handler
[debug] 7#7: *2 http script var: "/marketing-analyst"
[debug] 7#7: *2 trying to use file: "/marketing-analyst" "/static-pages/marketing-analyst"
[debug] 7#7: *2 http script var: "/marketing-analyst"
[debug] 7#7: *2 trying to use dir: "/marketing-analyst" "/static-pages/marketing-analyst"
[debug] 7#7: *2 try file uri: "/marketing-analyst"当然,目录/static-pages/marketing-analyst存在。
发布于 2019-04-16 13:58:01
工作解决方案:
server {
error_log /var/log/nginx/error.log debug;
listen 80;
server_name ${NGINX_HOST};
sendfile on;
tcp_nodelay on;
root /static-pages;
index index.html index.php;
try_files $uri $uri/ @proxy;
location @proxy {
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_pass http://wordpress$uri;
proxy_set_header X-NginX-Proxy true;
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_set_header Accept-Encoding "";
proxy_set_header Proxy "";
}
location = / {
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_pass http://wordpress;
proxy_set_header X-NginX-Proxy true;
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_set_header Accept-Encoding "";
proxy_set_header Proxy "";
}
}如果我能挤压两个类似的代理,但没有什么大不了的,我会很高兴的。
发布于 2019-04-16 09:05:40
就快到了。解决方案首先尝试静态文件,然后转到反向代理(wordpress)作为后盾:
server {
error_log /var/log/nginx/error.log debug;
listen 80;
listen [::]:80;
server_name ${NGINX_HOST};
sendfile on;
tcp_nodelay on;
root /static-pages;
location / {
try_files $uri $uri/ /static-pages/ @proxy;
}
location @proxy {
proxy_read_timeout 90;
proxy_connect_timeout 90;
proxy_redirect off;
proxy_pass http://wordpress;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $scheme;
}
}参考资料:
https://www.nginx.com/resources/wiki/start/topics/tutorials/config_陷阱/#代理-一切
但!当我尝试访问/时,/static-pages/index.html (不存在)被拒绝了403个访问。如果没有与请求匹配的目录,我如何告诉它不要检查/index.html,而只返回到代理?
https://unix.stackexchange.com/questions/512718
复制相似问题