nginx
最后发布时间:2024-01-02 23:30:29
浏览量:
proxy_pass配置规则
(1)配置 proxy_pass 时,当在后面的 url 加上了 /,相当于是绝对路径,则 Nginx 不会把 location 中匹配的路径部分加入代理 uri。
(2)如果配置 proxy_pass 时,后面没有 /,Nginx 则会把匹配的路径部分加入代理 uri。
server {
listen 8081;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
#情景1:proxy_pass后有/ ,表绝对路径,不把匹配部分加入最终代理路径(location 和proxy_pass结尾一致)
#访问地址:http://localhost:8081/WCP.Service/wcp/modeladapter/download/asc.shtml
#最终代理:http://10.194.171.7:13082/modeladapter/download/asc.shtml
location /WCP.Service/wcp/modeladapter/download/ {
proxy_pass http://10.194.171.7:13082/modeladapter/download/;
}
#访问地址:http://localhost:8081/model/asc.shtml
#最终代理:http://127.0.0.1:8082/model/asc.shtml
location /model/ {
proxy_pass http://127.0.0.1:8082/model/;
}
#情景2:proxy_pass后有/ ,表绝对路径,不把匹配部分加入最终代理路径(location 和proxy_pass结尾不一致)
#访问地址:http://localhost:8081/model/asc.shtml
#最终代理:http://127.0.0.1:8082/asc.shtml
location /model/ {
proxy_pass http://127.0.0.1:8082/;
}
#情景3:proxy_pass后没有 / ,Nginx会把匹配部分带到代理的url
#访问地址:http://localhost:8081/model/asc.shtml
#最终代理:http://127.0.0.1:8082/model/asc.shtml
location /model/ {
proxy_pass http://127.0.0.1:8082;
}
#情景4
#访问地址:http://localhost:8081/model/asc.shtml
#最终代理:http://127.0.0.1:8082/AAAmodel/asc.shtml
location /model/ {
proxy_pass http://127.0.0.1:8082/AAA;
}
#情景5
#访问地址:http://localhost:8081/model/asc.shtml
#最终代理:http://127.0.0.1:8082/asc.shtml
location /model {
proxy_pass http://127.0.0.1:8082/;
}
#情景6
#访问地址:http://localhost:8081/modelBBB/asc.shtml
#最终代理:http://127.0.0.1:8082/asc.shtml
location /model {
proxy_pass http://127.0.0.1:8082/;
}
location /opus-front-sso {
proxy_pass http://10.194.170.94/opus-front-sso;
}
location /awater {
proxy_pass http://10.194.170.94/awater;
}
}
... #全局块
events { #events块
...
}
http #http块
{
... #http全局块
server #server块
{
... #server全局块
location [PATTERN] #location块
{
...
}
location [PATTERN]
{
...
}
}
server
{
...
}
... #http全局块
}
server {
listen 8111;
server_name localhost;
location / {
root /root/jarServer;
try_files $uri $uri/ /index.html;
index index.html;
autoindex on; # 开启目录文件列表
autoindex_exact_size on; # 显示出文件的确切大小,单位是bytes
autoindex_localtime on; # 显示的文件时间为文件的服务器时间
charset utf-8,gbk; # 避免中文乱码
}
nginx 设置 proxy_pass nginx本身就监听端口
如果您想在 Nginx 中设置 proxy_pass,但目标地址又是 Nginx 本身正在监听的端口,需要注意避免出现循环代理(proxy loop)的情况。以下是一种解决方法:
- 假设您的 Nginx 配置文件中有类似以下的配置:
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://localhost:8080;
}
}
上述配置中,Nginx 监听在端口 80,并将请求代理到本地的端口 8080。
- 为了避免循环代理,您可以在 location 块中添加 proxy_set_header 指令,将一个自定义的 HTTP 头添加到代理请求中,然后在代理请求时检查该头。
nginx
Copy
server {
listen 80;
server_name example.com;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Nginx-Proxy true;
proxy_pass http://localhost:8080;
proxy_redirect off;
}
}
上述配置中,我们添加了 proxy_set_header 指令,将一些常用的请求头传递给代理服务器。这样,后续在代理请求时,您可以检查 X-Nginx-Proxy 头的值,以确定是否已经被代理过。
在代理服务器(本地的端口 8080)上,您可以根据需要检查 X-Nginx-Proxy 头,如果已经被代理过,则可以选择不进行进一步的代理。
通过这种方式,您可以避免 Nginx 自身监听的端口发起循环代理的情况。
请注意,这只是一种示例解决方案,具体的配置取决于您的实际需求和环境。确保根据您的情况进行适当的配置和安全性考虑。