Nginx 显示上游服务器名称和后端端口,URL 不带尾部斜杠

Nginx 显示上游服务器名称和后端端口,URL 不带尾部斜杠

我已经设置了一个 Nginx 服务器作为后端的代理。如果后端宕机,Nginx 将从后端的备份提供服务。当 URL 以尾部斜杠结尾时,代理即可工作。如果我省略尾部斜杠,则显示的 URL 将成为上游块的名称加上备份后端的端口。

  • 有效的方法:www.chingu.asiawww.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

相关内容