首页 > 解决方案 > Nginx 保留 $request_uri

问题描述

我不确定我想要的行为是否真的可以在 nginx 本地实现,但这里就可以了。

我有一个在端口 81 上运行的服务器,其 nginx 配置如下:

CONFIGURATION OF SERVER1 NGINX
server {
       listen 81;
       server_name SERVER_DNS_NAME;

       location /server1 {
                proxy_pass http://127.0.0.1:8084/;
                proxy_set_header Host $host;
       }

       location / {
                    proxy_pass http://127.0.0.1:8084;
                    proxy_set_header Host $host:$server_port;
                    }

       }

我在端口 82 上运行了另一台具有类似配置的服务器。现在我想做的是能够从端口 80 访问它们,只是使用不同的 uris。

例如:URL/server1 会将我带到第一个服务器,而 URL/server2 会将我带到第二个服务器。

CONFIGURATION OF NGINX LISTENING ON PORT 80
server {
       listen SERVER_IP:80;
       location /server1{
                    proxy_set_header Host $host;
                    http://SERVER_IP:81;


                    }
        location /server2 {
                 proxy_pass http://SERVER_IP:82;
                 proxy_set_header Host $host;
        }

当我转到 URL/server1 时,这工作正常。我已成功路由到 server1 上的主页。但是,只要我单击 server1 上页面上的任何链接,我就会得到 404。这是因为该站点试图转到 URL/some_subdir_of_server1(没有映射)而不是 URL/server1/some_subdir_of_server1。这种行为可行吗?如果有怎么办?

谢谢!

标签: nginxnginx-locationnginx-config

解决方案


小心尾随斜杠:在您的示例中,您 proxy_pass http://SERVER_IP:81/;将代理 URL 设置为 root/


推荐阅读