【nginx】代理设置Host
旧文章从语雀迁移过来,原日期为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_hostproxy_set_header Host $http_hostproxy_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。
【nginx】代理设置Host的更多相关文章
- MAC nginx代理设置
问题: 10.154.156.83:10081私服不存在了.但是不能改.用nginx代理至maven.xx.cn 增加换回地址: sudo ifconfig lo0 add 10.154.156.83 ...
- Windows实战(1):Nginx代理设置及负载均衡配置
简言 以下配置实现功能: 反向代理 通过轮询的方式实现nginx负载均衡 直接看以下配置文件: #user nobody; worker_processes 1; #error_log logs/er ...
- cool-admin vite-vue3 打包部署 nginx代理设置
location /api {rewrite ^/api/(.*)$ /$1 break;proxy_pass http://xxx.com;}location /socket.io {rewrite ...
- 【Nginx】nginx 代理 Haproxy 怎么设置?
由于Haproxy是通过 url 正则匹配 识别 的,nginx代理到 haproxy需要设置 proxy_set_header Host 为 haproxy的目标 url 直接上配置 upstrea ...
- Nginx的安装及反向代理设置
因为项目的缘故,接触到了Nginx的安装和反向代理设置,和大家分享下. 一.Nginx的下载.安装cd /homewget http://nginx.org/download/nginx-1.0.5. ...
- Nginx、haproxy反向代理设置
Nginx反向代理配置: #user nobody; worker_processes ; events { worker_connections ; } http { include mime.ty ...
- nginx反向代理设置自定义错误页面
为nginx反向代理设置自定义错误页面 转:https://blog.csdn.net/u014433030/article/details/77507839 如果我们的nginx配置了反向代理,如下 ...
- 前后端分离产生的跨域问题的解决方案之--jsonp、nginx代理、设置头信息等
前言 在前后端没有分离的时候,前端开发要么是写静态页面,数据渲染后端来做,要么就是前端的页面和后端的代码刚开始的时候就合并在一起,每次后端代码更新了之后,前端也要更新一下代码,然后重启一下服务,还是比 ...
- 单机部署minio,设置Nginx代理,配置https(TLS)访问
安装 下载地址:https://dl.min.io/ # 创建目录 mkdir -p /usr/local/minio/{data,bin,etc} # 下载minio wget https://dl ...
- Nginx前端设置反向代理,后端Apache如何获取访客的真实IP,结合PHP
nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递 ...
随机推荐
- [题解] Codeforces 1349 D Slime and Biscuits 概率,推式子,DP,解方程
题目 神题.很多东西都不知道是怎么凑出来的,随意设置几个变量,之间就产生了密切的关系.下次碰到这种题应该还是不会做罢. 令\(E_x\)为最后结束时所有的饼干都在第x个人手中的概率*时间的和.\(an ...
- day04-MySQL常用函数01
5.MySQL常用函数 5.1合计/统计函数 5.1.1合计函数-count count 返回行的总数 Select count(*)|count (列名) from table_name [WHER ...
- 微信小程序分享好友,朋友圈
<template> <view> <button open-type="share">发送给好友</button> </vi ...
- 用户输入学号,如果是以aabcddef开头,并且后边是4位数字,前两位大于06小于等于当前年份。判断用户输入是否合法
package seven_topic; import java.util.*; public class p_19_1 { public static void main(String[] args ...
- P3834 【模板】可持久化线段树 2
P3834 主席树模板,求区间第k小. 1 #include <bits/stdc++.h> 2 using namespace std; 3 #define lc tr[i].ch[0] ...
- 通过linux-PAM实现禁止root用户登陆的方法
前言 在linux系统中,root账户是有全部管理权限的,一旦root账户密码外泄,对于服务器而言将是致命的威胁:出于安全考虑,通常会限制root账户的登陆,改为配置普通用户登陆服务器后su切换到ro ...
- MySQL精华笔记
1.mysql分为 server 层和存储引擎: server 层: 1.连接器:管理连接权限验证 2.查询缓存:命中缓存直接换回查询结果 3.分析器:分析语法 4.优化器:生成执行计划,选择索引 5 ...
- Docker | 制作tomcat镜像并部署项目
本文讲解如何制作自己的tomcat镜像,并使用tomcat部署项目 原料准备: tomcat.jdk安装包,dockerfile文件 步骤 1.准备压缩包 jdk-8u301-linux-x64.ta ...
- vue Excel导入,下载Excel模板,导出Excel
vue Excel导入,下载Excel模板,导出Excel vue Excel导入,下载Excel模板 <template> <div style="display: ...
- 六、模型层(ORM)
六.模型层(ORM) Django中内嵌了ORM框架,不需要直接编写SQL语句进行数据库操作,而是通过定义模型类,操作模型类来完成对数据库中表的增删改查和创建等操作. O是object,也就类对象的意 ...