Nginx在ngix.conf中重写的错误结果

时间:2019-01-19 13:36:26

标签: nginx nginx-location nginx-config

我在nginx中编写了一个重写段,以在访问http://list.example.com:89/findcontent.action?id=6时获取http://www.example.com/list/findcontent.action?id=6的内容,并在访问http://www.example.com:81时获取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;
        }
    }

1 个答案:

答案 0 :(得分:1)

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

例如:

rewrite ^/list(.*)$ $1 break;

有关详细信息,请参见this document


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

例如:

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

请注意/location值上的尾随proxy_pass。有关详细信息,请参见this document