当前位置: 代码网 > 服务器>服务器>Nginx > nginx如何通过proxy_pass设置反向代理,隐藏端口号

nginx如何通过proxy_pass设置反向代理,隐藏端口号

2024年05月19日 Nginx 我要评论
通过proxy_pass设置反向代理,隐藏端口号nginx配置修改,通过 proxy_pass 设置反向代理,监听域名(ip)转发到指定端口。server { listen 80;

通过proxy_pass设置反向代理,隐藏端口号

nginx配置修改,通过 proxy_pass 设置反向代理,监听域名(ip)转发到指定端口。

server
    {
        listen 80;
        server_name www.xxx.com;
 
        server_name_in_redirect off;
        proxy_set_header host $host:$server_port;
        proxy_set_header x-real-ip $remote_addr;
        proxy_set_header remote-host $remote_addr;
        proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; 
        
        location / {
            proxy_pass http://www.xxx.com:8978;
        }
    }

nginx proxy_pass的配置

nginx的官网将proxy_pass分为两种类型:

  • 不带uri方式:只包含ip和端口号的,不带uri(单个/也算uri),比如proxy_pass http://localhost:8080
  • 带uri方式:在端口号之后有其他路径的,包含了只有单个/的如proxy_pass http://localhost:8080/,以及其他路径,比如proxy_pass http://localhost:8080/abc

url末尾存在 uri 

处理逻辑:

代理请求时,会先将请求的uri中和location匹配的部分替换成 proxy_pass 指定的uri,再将最终的uri拼接到代理地址,才是最终访问的url

如:

location /proxy {
	proxy_pass http://127.0.0.1:8099/svr1;  # uri为'/svr1'
}

发送如下请求:http://localhost:8088/proxy/index.html

详细解析:

  • 请求的uri:/proxy/index.html
  • location匹配的部分:/proxy
  • proxy_pass 指定的uri:/svr1
  • 最终的uri:/svr1/index.html (将请求的uri中和location匹配的部分替换成 proxy_pass 指定的uri)
  • 代理地址:http://127.0.0.1:8099
  • 最终访问的url:http://127.0.0.1:8099/svr1/index.html
  • 即访问 http://localhost:8088/proxy/index.html,
  • 实际请求路径为 http://127.0.0.1:8099/svr1/index.html 

url末尾不存在 uri

处理逻辑:

代理请求时,直接将请求的uri拼接到代理地址,就是最终访问的url

如:

location /proxy2 {
	proxy_pass http://127.0.0.1:8099;  # 无uri
}

发送如下请求:http://localhost:8088/proxy2/index.html  

详细解析:  

  • 请求的uri:/proxy2/index.html
  • 代理地址:http://127.0.0.1:8099
  • 最终访问的url:http://127.0.0.1:8099/proxy2/index.html
  • 即访问 http://localhost:8088/proxy2/index.html,
  • 实际请求路径为 http://127.0.0.1:8099/proxy2/index.html

下面的几个例子加深理解

server {
   listen       80;
   server_name  localhost;
 
   location /api1/ {
           proxy_pass http://localhost:8080;
        }
   # http://localhost/api1/xxx -> http://localhost:8080/api1/xxx
 
 
   location /api2/ {
           proxy_pass http://localhost:8080/;
        }
   # http://localhost/api2/xxx -> http://localhost:8080/xxx
 
 
   location /api3 {
           proxy_pass http://localhost:8080;
        }
   # http://localhost/api3/xxx -> http://localhost:8080/api3/xxx
 
 
   location /api4 {
           proxy_pass http://localhost:8080/;
        }
   # http://localhost/api4/xxx -> http://localhost:8080//xxx,请注意这里的双斜线,好好分析一下。
 
 
   location /api5/ {
           proxy_pass http://localhost:8080/haha;
        }
   # http://localhost/api5/xxx -> http://localhost:8080/hahaxxx,请注意这里的haha和xxx之间没有斜杠,分析一下原因。
 
   location /api6/ {
           proxy_pass http://localhost:8080/haha/;
        }
   # http://localhost/api6/xxx -> http://localhost:8080/haha/xxx
 
   location /api7 {
           proxy_pass http://localhost:8080/haha;
        }
   # http://localhost/api7/xxx -> http://localhost:8080/haha/xxx
 
   location /api8 {
           proxy_pass http://localhost:8080/haha/;
        }
  # http://localhost/api8/xxx -> http://localhost:8080/haha//xxx,请注意这里的双斜杠。
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com