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

查看日志信息:
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
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/ 结果如下:

总结:
proxy_pass http://192.168.118.14/a/ --> http://192.168.118.15/
第二种配置:

当这样配置的时候,访问 http://192.168.118.14/a/ 结果如下:

总结:
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
切记以上两条规则。
Nginx - 代理后端通过域名访问的更多相关文章
- CAS (5) —— Nginx代理模式下浏览器访问CAS服务器配置详解
CAS (5) -- Nginx代理模式下浏览器访问CAS服务器配置详解 tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1.9.8 ...
- nginx 禁止未绑定的域名访问
nginx 禁止未绑定的域名访问 方法1: server { listen 80 default_server; #不指定 server_name, server_name 默认为"&quo ...
- CAS (6) —— Nginx代理模式下浏览器访问CAS服务器网络顺序图详解
CAS (6) -- Nginx代理模式下浏览器访问CAS服务器网络顺序图详解 tomcat版本: tomcat-8.0.29 jdk版本: jdk1.8.0_65 nginx版本: nginx-1. ...
- Nginx (安装+ 配置域名+ 访问认证 +发布文件)
一.Nginx介绍: Nginx是一款高性能的HTTP和反向代理服务器,能够选择高效的epoll(linux2.6内核).kqueue(freebsd).eventport(solaris10)作为网 ...
- 医院内外网之间通过网闸交互,通过端口转发加nginx代理实现内网访问外网
首先介绍下主要需求,很简单,就是要在医院his系统内嵌公司的平台,实现内网直接访问外网 这是院方给我提供的网闸相关配置,105是医院内网的服务器,120是外网的服务器,中间通过网闸配置的几个端口实现互 ...
- Nginx安装、多域名访问
nginx web服务 apache iis django web框架 lvs 负载均衡 章文嵩博士 vue 尤雨溪 Tengine F5 硬件负载 A10 安装 ``` wget http://ng ...
- IIS反向代理实现Revel域名访问
Revel实现域名访问 1.在cmd中启动revel项目,我设置的端口为8000 2.下载IIS的Application Request Routing Cache组件下载地址 3.安装ARR 4.打 ...
- 通过nginx实现多个域名访问同一个服务器
一台服务器通过nginx配置多个域名(80端口) 参考:https://www.cnblogs.com/ruanjianlaowang/p/11182486.html 1. 问题描述 多个域名对应一 ...
- java 解决nginx代理的跨域访问问题
一.什么是跨域 跨域是浏览器对JavaScript同源策略的限制 二.什么情况下会产生跨域 域名不同 wwww.baidu.com www.jd.com 域名相同,访问的端口不同 wwww.baidu ...
随机推荐
- python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'的解决方法:
全文转载至:http://www.cnblogs.com/testyao/p/5658200.html python3中用HTMLTestRunner.py报ImportError: No modul ...
- 微服务:springboot与swagger2的集成
现在测试都提倡自动化测试,那我们作为后台的开发人员,也得进步下啊,以前用postman来测试后台接口,那个麻烦啊,一个字母输错就导致测试失败,现在swagger的出现可谓是拯救了这些开发人员,便捷之处 ...
- springboot无法识别配置文件级解决办法
eclipse中右键项目bulid path 之后找到 后点击完成后点击运用 修改完成
- 项目Beta冲刺(团队)-凡事预则立
所属课程 软件工程1916|W(福州大学) 作业要求 项目Beta冲刺(团队)-凡事预则立 团队名称 基于云的胜利冲锋队 作业目标 为 Beta 冲刺规划安排 1.讨论组长是否重选的议题和结论 由于我 ...
- Python爬虫爬企查查数据
因为制作B2b网站需要,需要入库企业信息数据.所以目光锁定企查查数据,废话不多说,开干! #-*- coding-8 -*- import requests import lxml import sy ...
- jQuery 遍历 - 过滤
三个最基本的过滤方法是:first(), last() 和 eq(),它们允许您基于其在一组元素中的位置来选择一个特定的元素. 其他过滤方法,比如 filter() 和 not() 允许您选取匹配或不 ...
- about云Hadoop相关技术总结
让你真正明白spark streaminghttp://www.aboutyun.com/forum.php?mod=viewthread&tid=21141(出处: about云开发)
- Laravel —— 路由问题
在 Laravel 中,路由是项目的起点. 下面总结一些路由中常见的问题. 一.路由 404 是因为配置文件没有开启重定向模块,可以通过下面的操作解决. 1.php.ini 开启 openssl 模块 ...
- (转)接口测试工具Postman使用实践
一.接口定义 软件不同部分之间的交互接口.通常就是所谓的API――应用程序编程接口,其表现的形式是源代码. —— [ 百度百科 ]我们常说的接口一般指两种:(1)API:应用程序编程接口.程序间的接口 ...
- Making Huge Palindromes LightOJ - 1258
题目链接:LightOJ - 1258 1258 - Making Huge Palindromes PDF (English) Statistics Forum Time Limit: 1 se ...