Nginx Ngnix proxy_pass dosen';url包含路径时无法工作
我试图从我自己的FS模拟网站。我想截获任何http请求并将其重定向到我的服务器,该服务器将返回所需的文件。 我编写了一个简单的默认服务器:Nginx Ngnix proxy_pass dosen';url包含路径时无法工作,nginx,reverse-proxy,proxypass,Nginx,Reverse Proxy,Proxypass,我试图从我自己的FS模拟网站。我想截获任何http请求并将其重定向到我的服务器,该服务器将返回所需的文件。 我编写了一个简单的默认服务器: server { listen <<SERVICE_PORT>> default_server; server_name _; location / { proxy_set_header X-ORIGINAL-URI $request_uri; proxy_set_head
server {
listen <<SERVICE_PORT>> default_server;
server_name _;
location / {
proxy_set_header X-ORIGINAL-URI $request_uri;
proxy_set_header X-ORIGINAL-REFERRER $http_referer;
proxy_set_header X-ORIGINAL-HOST $http_host;
proxy_pass <<BROWSE_RESOURCE_URL>>/browsing/resource/;
proxy_redirect off;
}
}
服务器{
监听默认的\u服务器;
服务器名称;
地点/{
代理集头X-ORIGINAL-URI$request\u URI;
代理集标题X-ORIGINAL-referer$http\u referer;
代理设置头X-ORIGINAL-HOST$http\U主机;
代理通行证/浏览/资源/;
代理_重定向关闭;
}
}
当url被设置为“时”http://exapmle.com“它工作得很好。但当任何路径被添加为“http://exapmle.com/bar“它不会传递到/browsing/resource/。目前我接收404,但不是从我的服务器
实际上,我根本不需要将原始uri与我的代理传递相关联
为什么它对我有用?来自:
请求URI按如下方式传递到服务器:
location / {
proxy_set_header X-ORIGINAL-URI $request_uri;
proxy_set_header X-ORIGINAL-REFERRER $http_referer;
proxy_set_header X-ORIGINAL-HOST $http_host;
rewrite ^ /browsing/resource/ break;
proxy_pass <<BROWSE_RESOURCE_URL>>;
proxy_redirect off;
}
如果proxy_pass指令是用URI指定的,那么当请求被传递到服务器时,与位置匹配的规范化请求URI部分将被该指令中指定的URI替换
因此,对于给定的配置,当您请求http://example.com/bar
:
- 规范化的请求URI将是
/bar
- proxy\u pass指令中指定的URI将是
/browsing/resource/
- 将传递到后端服务器的最终URI是
/browsing/resource/bar
/browsing/resource/bar
。所以它只理解/browsing/resource/
。这就是为什么您的后端服务器返回404未找到
由于您不希望Nginx将请求URI与proxy_-pass指令中指定的URI组合在一起,因此可以使用proxy_-pass指令的另一个功能,如中所述:
使用rewrite指令在代理位置内更改URI时,此配置将用于处理请求(中断):
在这种情况下,将忽略指令中指定的URI,并将完整的更改的请求URI传递给服务器
因此,您将指示Nginx将所有请求URI重写为相同的URI/browsing/resource/
,如下所示:
location / {
proxy_set_header X-ORIGINAL-URI $request_uri;
proxy_set_header X-ORIGINAL-REFERRER $http_referer;
proxy_set_header X-ORIGINAL-HOST $http_host;
rewrite ^ /browsing/resource/ break;
proxy_pass <<BROWSE_RESOURCE_URL>>;
proxy_redirect off;
}
位置/{
代理集头X-ORIGINAL-URI$request\u URI;
代理集标题X-ORIGINAL-referer$http\u referer;
代理设置头X-ORIGINAL-HOST$http\U主机;
重写^/浏览/资源/中断;
代用通行证;
代理_重定向关闭;
}