nginx proxy_set_header Host $host 和 proxy_set_header Host $http_host 的作用对比
转载自https://www.jianshu.com/p/7a8a7eb3707a
1、浏览器直接访问服务,获取到的 Host 包含浏览器请求的 IP 和端口
测试服务器,centos 7
sudo pip install --upgrade pip
sudo pip install flask
把如下代码放到文件ngx_header.py, 并用python运行如下脚本,
IP 是 eth0的IP,请根据自己的服务器,做相应的修改, 笔者使用的是阿里云服务器,有公网IP,公网IP映射到本地eth0就是172.31.5.0
# cat ngx_header.py
from flask import Flask, request, jsonify
app = Flask(__name__) @app.route('/')
def get_host():
host = request.headers.get('Host')
return jsonify({'Host': host}), 200 if __name__ == '__main__':
app.run(host='172.31.5.0', port=5000) # python ngx_header.py
结果如下:

2、配置 nginx 代理服务
# cat ngx_header.conf
server {
listen 8090;
server_name _;
location / {
proxy_pass http://172.31.5.0:5000;
}
}
结果如下:

2.2 设置 proxy_set_header Host $host 时,浏览器直接访问 nginx,获取到的 Host 是 $host 的值,没有端口信息
# cat ngx_header.conf
server {
listen 8090;
server_name _;
location / {
proxy_set_header Host $host;
proxy_pass http://172.31.5.0:5000;
}
}
结果如下:

2.3 设置 proxy_set_header Host $host:$proxy_port 时,浏览器直接访问 nginx,获取到的 Host 是 $host:$proxy_port 的值
# cat ngx_header.conf
server {
listen 8090;
server_name _;
location / {
proxy_set_header Host $host:$proxy_port;
proxy_pass http://172.31.5.0:5000;
}
}
结果如下:

2.4 设置 proxy_set_header Host $http_host 时,浏览器直接访问 nginx,获取到的 Host 包含浏览器请求的 IP 和端口
server {
listen 8090;
server_name _;
location / {
proxy_set_header Host $http_host;
proxy_pass http://172.31.5.0:5000;
}
}
结果如下:

# tree .
.
├── ngx_header.py
└── templates
├── bar.html
└── foo.html 1 directory, 3 files // ngx_header.py 代码
# cat ngx_header.py
from flask import Flask, request, render_template, redirect
app = Flask(__name__) @app.route('/')
def get_header():
host = request.headers.get('Host')
return render_template('foo.html',Host=host) @app.route('/bar')
def get_header2():
host = request.headers.get('Host')
return render_template('bar.html',Host=host) @app.route('/2bar')
def get_header3():
# 代码层实现的重定向
return redirect('/bar') if __name__ == '__main__':
app.run(host='172.31.5.0', port=5000)
// foo.html 代码
# cat templates/foo.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>foo</title>
</head>
<body>
Host: {{ Host }}
</br>
<a href="2bar"">页面跳转</a>
</body>
</html> // bar.html 代码
# cat templates/bar.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>bar</title>
</head>
<body>
Host: {{ Host }}
</body>
</html> # python ngx_header.py # cat ngx_header.conf
server {
listen 8090;
server_name _;
location / {
proxy_set_header Host $host;
proxy_pass http://172.31.5.0:5000;
}
}
结果如下:



nginx proxy_set_header Host $host 和 proxy_set_header Host $http_host 的作用对比的更多相关文章
- kafka配置项host.name advertised.host.name
遇到的问题: 在本机或者其他机器telnet IP 9092,通,使用域名也通,telnet 127.0.0.1 9092不通 host.name:按配置文件说明,是Kafka绑定的interface ...
- switch host 切换本地host
百度网盘提取地址 提取码: 753r 下载后放到软件目录即可使用
- Nginx接收的host值会影响alias的规则匹配
一般内网接收的HTTP请求都是内网唯一的网关传过来的,nginx的alias匹配会直接使用网关穿过的host值,而不是从URL解析出来的,从而导致的问题是,容器的alias相关Server_name规 ...
- Nginx详解二十:Nginx深度学习篇之HTTPS的原理和作用、配置及优化
一.HTTPS原理和作用: 1.为什么需要HTTPS?原因:HTTP不安全1.传输数据被中间人盗用.信息泄露2.数据内容劫持.篡改 2.HTTPS协议的实现对传输内容进行加密以及身份验证 对称加密:加 ...
- (转载)Nginx/LVS/HAProxy三种主流负载均衡软件的对比
原地址:http://www.ha97.com/5646.html PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些 ...
- uwsgi nginx与django之间的关系以及各自的作用
首先要明确几个概念及其作用(注意大小写的区别): WSGI uWSGI uwsgi Nginx WSGI 是一种协议,不是任何包不是任何服务器,就和 TCP 协议一样.它定义了 Web 服务器和 We ...
- Nginx 301重定向域名
为何要使用301重定向 在网站建设中需要网页重定向的情况很多:如网页目录结构变动,网页重命名.网页的扩展名改变.网站域名改变等.如果不做重定向,用户的收藏和搜索引擎数据库中的旧地址只能让访客得到一个4 ...
- 很不错的NGINX URL重写实例
转自:http://www.jbxue.com/article/2187.html 本文介绍nginx URL重写的相关知识,包括301重定向的内容等,希望对大家有所帮助. nginx rewrite ...
- nginx url 重写 [转]
本文转自 http://www.jbxue.com/article/2187.html 本文介绍nginx URL重写的相关知识,包括301重定向的内容等,希望对大家有所帮助. nginx rewri ...
随机推荐
- DOTNET Core MVC(二)路由初探
搁置了几天,工作忙的一塌糊涂,今天终于抽空来继续看看MVC的知识.先来看看MVC的路由是如何处理的.以下为替代的路由: app.UseEndpoints(endpoints => { endpo ...
- RabbitMQ工作模式
------------恢复内容开始------------ RabbitMQ基本概念: Producer:生产者(消息的提供者) Consumer:消费者(消息的使用者) Message:消息(程序 ...
- 同一台电脑安装python2&python3
[安装之前,先了解一下概念] python是什么? Python是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. ...
- Centos8(Liunx) 中安装PHP7.4 的三种方法和删除它的三种方法
编译安装 Centos8下PHP源码编译和通过yum安装的区别和以后的选择 其实这两种方法各有千秋: yum安装: 从yum安装来说吧,yum相当于是自动化帮你安装,你不用管软件的依赖关系,在yum安 ...
- 转载:字符编码简介 ASCII UTF-8 ISO8859-1
字符编码简介 ASCII UTF-8 ISO8859-1 博客分类: 电脑综合知识 XP数据结构Windows 计算机中的一切都是以数字来表示的,字符同样如此.字符编码就是将字符集编码成为数字序列, ...
- vue中this在回调函数中的使用
this在各类回调中使用: 如果是普通函数是没法使用的 所以需要先将this.变量赋值给新的变量,然后才能在回调函数中使用 例如: refund: function (id) { if (!this. ...
- #6029. 「雅礼集训 2017 Day1」市场 [线段树]
考虑到每次除法,然后加法,差距会变小,于是维护加法lazytag即可 #include <cstdio> #include <cmath> #define int long l ...
- ConcurrentHashMap的size()方法(1.7和1.8)
在1.7和1.8版本中,计算size()方法有写不同.先介绍1.7版本的实现. 1.7版本 在1.7版本中,有一个重要的类Segment,利用它来实现分段锁 static final class Se ...
- Linux-redis安装以及客户端搭建
redis安装: 下载redis数据库,网址:redis官网 将文件放到home或者其他文件夹,cd到文件夹 执行 tar zxvf redis-4.0.2.tar.gz //解压文件 执行make进 ...
- Hibernate注释
Hibernate注释映射一.PO类的基本注释1.@Entity:将pojo类标记成实体,可以指定一个name属性,指定实体类的名称.默认一该类的类名作为实体类的名称 2.@Table:注释改持久化类 ...