旧文章从语雀迁移过来,原日期为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 的几种配置:

  1. proxy_set_header Host $proxy_host
  2. proxy_set_header Host $http_host
  3. proxy_set_header Host $host

测试流程:

  1. postman发送请求nginx服务127.0.0.1:4000;
  2. nginx中转后node服务127.0.0.1:9090;
  3. 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

【nginx】代理设置Host的更多相关文章

  1. MAC nginx代理设置

    问题: 10.154.156.83:10081私服不存在了.但是不能改.用nginx代理至maven.xx.cn 增加换回地址: sudo ifconfig lo0 add 10.154.156.83 ...

  2. Windows实战(1):Nginx代理设置及负载均衡配置

    简言 以下配置实现功能: 反向代理 通过轮询的方式实现nginx负载均衡 直接看以下配置文件: #user nobody; worker_processes 1; #error_log logs/er ...

  3. cool-admin vite-vue3 打包部署 nginx代理设置

    location /api {rewrite ^/api/(.*)$ /$1 break;proxy_pass http://xxx.com;}location /socket.io {rewrite ...

  4. 【Nginx】nginx 代理 Haproxy 怎么设置?

    由于Haproxy是通过 url 正则匹配 识别 的,nginx代理到 haproxy需要设置 proxy_set_header Host 为 haproxy的目标 url 直接上配置 upstrea ...

  5. Nginx的安装及反向代理设置

    因为项目的缘故,接触到了Nginx的安装和反向代理设置,和大家分享下. 一.Nginx的下载.安装cd /homewget http://nginx.org/download/nginx-1.0.5. ...

  6. Nginx、haproxy反向代理设置

    Nginx反向代理配置: #user nobody; worker_processes ; events { worker_connections ; } http { include mime.ty ...

  7. nginx反向代理设置自定义错误页面

    为nginx反向代理设置自定义错误页面 转:https://blog.csdn.net/u014433030/article/details/77507839 如果我们的nginx配置了反向代理,如下 ...

  8. 前后端分离产生的跨域问题的解决方案之--jsonp、nginx代理、设置头信息等

    前言 在前后端没有分离的时候,前端开发要么是写静态页面,数据渲染后端来做,要么就是前端的页面和后端的代码刚开始的时候就合并在一起,每次后端代码更新了之后,前端也要更新一下代码,然后重启一下服务,还是比 ...

  9. 单机部署minio,设置Nginx代理,配置https(TLS)访问

    安装 下载地址:https://dl.min.io/ # 创建目录 mkdir -p /usr/local/minio/{data,bin,etc} # 下载minio wget https://dl ...

  10. Nginx前端设置反向代理,后端Apache如何获取访客的真实IP,结合PHP

    nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递 ...

随机推荐

  1. EFCore (二)之 跟踪实体

    核心 SaveChanges() "已分离"和"未改变"的实体,SaveChanges()忽略: "已添加"的实体,SaveChanges( ...

  2. 萌新也能看懂的KMP算法

    前言 算法是什么?算法就是数学规律.怎么去总结和发现这个规律,就是理解算法的过程. KMP算法的本质是穷举法,而并不是去创造新的匹配逻辑. 以下将搜寻的字符串称为子串(part),以P表示.被搜寻的字 ...

  3. 齐博x1直播要设置回调地址才能播放

    因为通过扫码或推流网址给第三方用,也能让圈子实现直播,所以系统就改为必须要设置回调地址才能播放视频了.下面阿里与腾讯的都是大同小异的.腾迅的有多项,阿里的只有一项,不过阿里其实还有另一项,就是录制的时 ...

  4. 前端性能优化——首屏时间&&白屏时间

    1.首屏时间概念 首屏时间是指用户打开一个网站时,直到浏览器首页面内容渲染完成的时间. 2.白屏时间概念 白屏时间即是,浏览器开始显示内容的时间,所以我们一般认为解析完<head>的时刻, ...

  5. 驱动开发:内核层InlineHook挂钩函数

    在上一章<驱动开发:内核LDE64引擎计算汇编长度>中,LyShark教大家如何通过LDE64引擎实现计算反汇编指令长度,本章将在此基础之上实现内联函数挂钩,内核中的InlineHook函 ...

  6. Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块

    这是一篇系列博文,我将使用Abp.Zero搭建一套集成手机号免密登录验证与号码绑定功能的用户系统: Abp.Zero 手机号免密登录验证与号码绑定功能的实现(一):验证码模块 Abp.Zero 手机号 ...

  7. Ubuntu安装Docker及镜像加速器

    一.安装Docker sudo apt-get update && sudo apt-get install -y apt-transport-https ca-certificate ...

  8. Jekyll于windows中使用

    安装 安装Ruby http://rubyinstaller.org/downloads/ 于其中选择最新的带dev套件的. 在安装时,安装目录不能有空格,检查是否已经安装成功 ruby -v gem ...

  9. 图学习【参考资料2】-知识补充与node2vec代码注解

    本项目参考: https://aistudio.baidu.com/aistudio/projectdetail/5012408?contributionType=1 *一.正题篇:DeepWalk. ...

  10. perl chmod

    chmod函数改变一列文件的权限.列表的第一个元素必须是数字模式.chmod函数返回成功改变了的文件的数目.如: $cnt = chmod 0755, 'file1', 'file2';  其中最前面 ...