我已经设置了一个 Nginx 服务器作为后端的代理。如果后端宕机,Nginx 将从后端的备份提供服务。当 URL 以尾部斜杠结尾时,代理即可工作。如果我省略尾部斜杠,则显示的 URL 将成为上游块的名称加上备份后端的端口。
- 有效的方法:
www.chingu.asia
、www.chingu.asia/
和www.chingu.asia/wiki/
。 - 不起作用的是:(
www.chingu.asia/wiki
没有尾随斜杠),我的浏览器被重定向到http://chingu.servers:8111/wiki/
,但无法找到(当然)。
这是我的配置:
upstream chingu.servers {
server 192.168.0.12 fail_timeout=300s max_fails=1;
server 192.168.0.10:8111 backup;
}
server {
listen 80;
server_name www.chingu.asia;
location / {
proxy_pass http://chingu.servers/;
}
}
server {
listen 192.168.0.10:8111;
server_name _;
root /...some path.../Chingu;
index index.html index.php;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/run/php/php7.3-fpm.sock;
fastcgi_param FQDN true;
}
}
我尝试使用正则表达式将任何 URI 与位置块进行匹配。我也尝试过port_in_redirect off;
和absolute_redirect off;
。
我可以为其他人添加位置块wiki
,但如果我必须手动添加每个可能的子目录,这似乎违背了代理的目的。
我遗漏了什么?
答案1
您的配置意味着 nginxchingu.servers
在向上游发送请求时将用作 HTTP Host 标头。
你需要使用
location / {
proxy_set_header Host $host;
proxy_pass http://chingu.servers/;
}
在您的配置中。
另外,您需要确保您的 Chingu 根 URL 设置为www.chingu.asia
。