Nginx - 代理后端通过域名访问
目录
- 前言
- Nginx 根据域名反向代理
- Nginx proxy_pass 关于 '/' 的作用
1. 前言
接到一个需求,通过nginx 代理互联网上某一个页面,刚开始的时候觉得很简单的,直接 proxy_pass 过去就完事了,测试了下还是想太多。具体记录如下。
2. Nginx 根据域名反向代理
web服务器通常有三种访问方式:
- 基于ip
- 基于域名
- 基于端口
而互联网上暴露的网站多数都是通过 基于域名 的方式,如果直接通过解析后的IP访问,可能就无法访问到网站信息。我这里模拟了下这种方式,如下:
对应关系:
浏览器访问域名:
浏览器访问ip地址:
现在问题来了,当你的 nginx 配置 proxy_pass 的时候,得到的是 域名返回的结果 还是 ip地址返回的结果呢?这两种返回的结果完全不同。
在另一台主机 [ 192.168.118.14 ] 上安装 nginx 并配置好
配置nginx 方向代理
通过浏览器访问 192.168.118.14
查看日志信息:
1 | 192.168.118.41 - - [23 /Jul/2019 :20:09:12 +0800] "GET / HTTP/1.1" 200 15 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36" "-" "upstream_addr" : "112.2.3.66:80" |
结合上面的反馈, 可以得到,当 nginx 反向代理域名,会根据启动时候解析出来的ip,加载到内存中,后面不会改变可以绑定hosts或者指定resolve服务器来固定ip
如果在使用 nginx 做反向代理的时候遇到以上相同的情况,解决办法是 设置一个 proxy_set_header
1 | proxy_set_header Host "[domain]" ; |
配置完成,nginx -s reload 浏览器访问:
现在就得到想要的页面了。
3. Nginx proxy_pass 关于 '/' 的作用
有这样一个服务器访问如下:
访问 http://192.168.118.15 得到
访问 http://192.168.118.15/a/
在这台主机前端需要添加一个反向代理。配置如下:
第一种配置:
当这样配置的时候,访问 http://192.168.118.14/a/ 结果如下:
总结:
1 | proxy_pass http: //192 .168.118.14 /a/ --> http: //192 .168.118.15/ |
第二种配置:
当这样配置的时候,访问 http://192.168.118.14/a/ 结果如下:
总结:
1 | proxy_pass http: //192 .168.118.14 /a --> http: //192 .168.118.15/ |
综上所述:
当 proxy_pass 不加 '/' 时, location uri 会追加到 proxy_pass http://domain/ 后面;
当 proxy_pass 加 '/' 时,不会在 proxy_pass http://domain 后面追加任何uri
切记以上两条规则。
本文作者:hukey
本文链接:https://www.cnblogs.com/hukey/p/11609030.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2018-09-29 [ python ] 全局和局部作用域变量的引用