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。
您可以仅使用 location
和 proxy_pass
指令实现类似的功能。
例如:
location /list/ {
proxy_pass http://list.example.com:89/;
}
注意 location
和 proxy_pass
值的尾随 /
。有关详细信息,请参阅 this document。
我在 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。
您可以仅使用 location
和 proxy_pass
指令实现类似的功能。
例如:
location /list/ {
proxy_pass http://list.example.com:89/;
}
注意 location
和 proxy_pass
值的尾随 /
。有关详细信息,请参阅 this document。