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 ...
随机推荐
- MongoDB 分片的原理、搭建、应用 (转)
一.概念: 分片(sharding)是指将数据库拆分,将其分散在不同的机器上的过程.将数据分散到不同的机器上,不需要功能强大的服务器就可以存储更多的数据和处理更大的负载.基本思想就是将集合切成小块,这 ...
- APP测试之MONKEY安装、使用
1.先下载java的jdk;配置java变量 安装好之后会有两个文件夹一个是jdk 一个是jre(运行)然后配置好java环境变量:JAVA_HOME:C:\Program Files\Java\jd ...
- 异常错误:在可以调用 OLE 之前,必须将当前线程设置为单线程单元(STA)模式
最近做一个蛋疼的东西就是C#调用windows API 来操作一个摄像头,自动处理一些东西.要用到剪切板复制 粘贴功能,即 Clipboard.SetDataObject(filedic, true) ...
- 如何在Windows上部署Redis集群和SpringBoot进行整合
一.安装Redis的Windows版本并进行配置 (1)下载链接 https://github.com/microsoftarchive/redis/releases (2)将下载后的Redis复制成 ...
- opencv图像处理之gamma变换
import cv2 import numpy as np img=cv2.imread('4.jpg') def adjust_gamma(image, gamma=1.0): invGamma = ...
- 关于吲哚美辛(NSAIDS)对袢利尿药的影响。
吲哚美辛 一方面是解热镇痛抗炎药,是最强的PG合成酶抑制药之一,另一方面,吲哚美辛可于袢利尿药如呋塞米.依他尼酸竞争近曲小管有机酸分泌途径,可以影响后者的排泄和作用. 吲哚美辛可以抑制前列腺素的合成, ...
- 2019牛客国庆集训派对day1 K题 双向链表练习题 splay区间翻转
题目链接: 解法: 先建n颗平衡树,合并的时候将a中最右的结点翻转到根节点,b中最左的结点翻转到根节点,对合并后的根节点进行标记. #include <bits/stdc++.h> usi ...
- LeetCode 845. Longest Mountain in Array
原题链接在这里:https://leetcode.com/problems/longest-mountain-in-array/ 题目: Let's call any (contiguous) sub ...
- c++ socket发送数据时,sendData = char * string 导致的乱码问题
解决方法:将string 通过copy函数复制到某个char[] 1. string res =“xxx”; char arr[100]; int len = res.copy(arr, 100); ...
- WinDbg常用命令系列---断点操作b*
ba (Break on Access) ba命令设置处理器断点(通常称为数据断点,不太准确).此断点在访问指定内存时触发. 用户模式下 [~Thread] ba[ID] Access Size [O ...