ngix.conf 中 nginx 重写的错误结果

Wrong result of nginx rewrite in ngix.conf

我在 nginx 中写了一个重写段来获取 http://list.example.com:89/findcontent.action?id=6 while I visit http://www.example.com/list/findcontent.action?id=6 and get the content of http://www.example.com:81 while I visit http://www.example.com 的内容。 下面的 nginx.conf 列表在我访问 www.example.com 时可以正常工作。但是当我访问 www.example.com/list/findcontent.action?id=6 时,我从 http://list.example.com:89/list/findcontent.action?id=6 得到了 404 错误。这意味着重写不起作用。 任何人都可以帮助我获得正确的配置吗?谢谢

server {
            listen  80; 
            listen  443 ssl; 
            server_name  www.example.com;
            keepalive_timeout   70;
            ssl_certificate     cert\www.example.com_public.crt;
            ssl_certificate_key  cert\www.example.com.key;
            ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
            ssl_ciphers         HIGH:!aNULL:!MD5;
            charset utf-8;
            access_log  logs/example_com.host.access.log;
            location  /list {
            rewrite ^/list '' break;
            proxy_pass   http://list.example.com:89/;
            }
            location  / {
            proxy_pass   http://www.example.com:81;
        }
    }

如果您尝试将 /list/findcontent.action?id=6 重写为 /findcontent.action?id=6,则您的 rewrite 语句不完整。您缺少捕获。

例如:

rewrite ^/list(.*)$  break;

详情见this document


您可以仅使用 locationproxy_pass 指令实现类似的功能。

例如:

location /list/ {
    proxy_pass   http://list.example.com:89/;
}

注意 locationproxy_pass 值的尾随 /。有关详细信息,请参阅 this document