Nginx 将 proxy_pass 服务器重定向到 http://server/index.html

Nginx 将 proxy_pass 服务器重定向到 http://server/index.html

我有以下配置:

server {
    listen 80 default_server;
    listen [::]:80 default_server;

    root /var/www/html;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name _;
    location / {
    index index.html;
    }


    server_name command_asdf
    location  /asdf/ {
    proxy_pass http://127.0.0.1:3001/;
    }

当我去http://服务器/asdf/index.html一切正常。

但是,如果我访问 http ://server/asdf/ 或 http ://server/asdf,它们都会将我重定向到 http ://server/index.html,而不是 http ://server/asdf/index.html

我花了几个小时试图弄清楚如何让它重定向到子目录上的索引页,但遗憾的是没有成功。

我有许多需要使用 proxy_pass 的服务器,但是上面是我能展示的最简单的配置。

谢谢!

答案1

几周后,我终于解决了这个问题。解决方案是:

   proxy_redirect    / $request_uri;

因此,当用户访问 foo.com/bar/ 时,它将重定向到 foo.com/index.html

这发生在 proxy_pass 服务器发出的 302 重定向中。

上面添加到我的配置中的行将正确地将 foo.com/bar/ 重定向到http://foo.com/bar/然后加载index.html页面。

完整配置:

    server_name bar;
    location  /bar/ {
    proxy_pass http://127.0.0.1:3001/;
    proxy_redirect    / $request_uri;
    }

作为参考,$request_uri 等于位置和子目录,即 foo.com/bar/

相关内容