如何解决使用子页面作为参数的nginx反向代理
我将尝试处理nginx中服务器URL处对服务器上其他服务的所有请求。该服务不应从外部可见,因此我将使用Nginx的反向代理功能。 因此,对nginx的请求应为:
- https://foo.url => http:// localhost:2424
- https://foo.url/page1 => http:// localhost:2424?_ = / page1
- https://foo.url/sub1/page2 => http:// localhost:2424?_ = / sub1 / page2
当前我不需要获取参数,但是如果它们也可以工作,那当然会很好,即:
- https://foo.url/page1?xxx=abc => http:// localhost:2424?_ = / page1&xxx = abc
当前我的配置如下:
...
location / {
gzip off;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
proxy_pass http://localhost:1234/;
proxy_set_header Proxy "";
...
当然,不重定向子页面。但是以下操作也不起作用:
...
location /(.*) {
# location ~ /(.*) { # I tried this too
...
proxy_pass http://localhost:1234/?_=$1;
...
有人可以帮助我吗?
解决方法
您可以通过在proxy_pass
块内添加rewrite...break;
语句来更改URI,然后再由location /
语句处理。有关详细信息,请参见this document。
例如:
location / {
...
rewrite ^(/.*)$ /?_=$1 break;
proxy_pass http://localhost:1234;
}
,
好的,谢谢。它正在工作,但是不如我所愿。还有另外两个问题(其中一个我没有遇到过):
- 在浏览器的url中,我也看到了新的URL(foo.url /?_ = page1)。
- 我没想到我需要以正常方式转发一些URL,即http://foo.url/scripts => http:// localhost:1234 / scripts
我通过添加修复的最后一个
rewrite ^/script(/.*)$ /script/$1 break;
rewrite ^/(/.*) /?_=$1 break;
但是我不确定这是否是正确的方法,或者是否存在类似“全部,但不是这个”之类的东西
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。