【nginx】代理设置Host
2024-10-21 05:08:34
旧文章从语雀迁移过来,原日期为2021-02-18
nginx 的 proxy 模块使我们经常会用到的模块之一,比如我们常用的 nginx 反向代理。
反向代理我们一般有这么几行配置代码:
location /api {
proxy_pass http://127.0.0.1:9090;
proxy_set_header Host $host;
...
}
proxy_pass 是反向代理的目的地址,是比较熟悉的,但第三行是什么意思呢?
proxy_set_header
这个配置是允许你代理后修改请求头的各个字段,可支持 nginx 内置变量、字符串和两种组合方式。
Host
这次要详细理解的是 Host 的几种配置:
proxy_set_header Host $proxy_host
proxy_set_header Host $http_host
proxy_set_header Host $host
测试流程:
- postman发送请求nginx服务127.0.0.1:4000;
- nginx中转后node服务127.0.0.1:9090;
- node服务打印request.host看看是什么。
$proxy_host
默认值(不配置等同于配置了 proxy_set_header Host $proxy_host),nginx 配置:
location /api {
proxy_pass http://127.0.0.1:9090;
}
或
location /api {
proxy_pass http://127.0.0.1:9090;
proxy_set_header Host $proxy_host
}
代理后的请求头的 Host : 127.0.0.1:9090 ,所以$proxy_host 为 proxy_pass 中的域名
**
$http_host
nginx 配置:
location /api {
proxy_pass http://127.0.0.1:9090;
proxy_set_header Host $http_host;
}
postman 另外配置头部中的 Host:
代理后的请求头的 Host : www.baidu.com ,所以$http_host 为代理前的请求头的 Host。
**
$host
$host 根据文档介绍,如果请求头有 Host 字段会取该字段,否则就会去主服务器名(也就是 server_name )。
首先和 $http_host 一样,自定义 Host,得到的和 $http_host 是一致的,证明了前半句。
接着是传一个空的 Host,但实际上是不可行的,根据 HTTP/1.1 开规定,如果 Host 为空,会返回 400(如下图),nginx 也很好地实现了这个规定。
而HTTP/1.0是允许的,这里猜测是该字段为了HTTP/1.0设计的。
结论
以上就是三种配置的差别,一般常用proxy_set_header Host $host
。
最新文章
- PHP乱码完美解决
- Redis多机常用架构-cluster
- DevExpress更新至13.1.7
- BZOJ 1124: [POI2008]枪战Maf
- django base.html
- git 新建项目
- Jenkins 插件 CIFS
- Arrays.asList的源码分析
- Min and Max
- 【转】十款让 Web 前端开发人员更轻松的实用工具
- MVC3+EF5.0 code first+Flexigrid+ajax请求+jquery dialog 增删改查
- angular change the url , prevent reloading
- Windows服务器上使用phpstudy部署PHP程序
- spring+springmvc+hibernate 整合
- 起源-C的故事
- Confluence 6 链接到其他应用
- Doracle.jdbc.J2EE13Compliant=true
- openstack学习-nove计算节点部署(五)
- audio video 控制播放和停止
- meta viewport 理解
热门文章
- MySQL实战,SQL语句
- P1073 [NOIP2009 提高组] 最优贸易 (最短路spfa)
- 代码随想录第八天 |344.反转字符串 、541. 反转字符串II、剑指Offer 05.替换空格 、151.翻转字符串里的单词 、剑指Offer58-II.左旋转字符串
- SpringBoot+MyBatis Plus对Map中Date格式转换的处理
- Linux文本相关命令
- MySQL的日志文件
- 忘记了99乘法表啥样的了,python打印下看看
- Landau-Vishkin
- 将vue+nodejs项目部署到服务器上(完整版)
- Linux操作系统,笔录!