我在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;
}
}
答案 0 :(得分:1)
如果您尝试将/list/findcontent.action?id=6
重写为/findcontent.action?id=6
,则您的rewrite
语句不完整。您错过了捕获。
例如:
rewrite ^/list(.*)$ $1 break;
有关详细信息,请参见this document。
仅使用location
和proxy_pass
指令就可以实现类似的功能。
例如:
location /list/ {
proxy_pass http://list.example.com:89/;
}
请注意/
和location
值上的尾随proxy_pass
。有关详细信息,请参见this document。