nginx反向代理入门(2) :proxy_set_header、代理多个网站

https://blog.youkuaiyun.com/github_26672553/article/details/81902645
前面已经学习了使用proxy_pass指令来实现反向代理,但是并不完善,网站如何获取主机?

$_SERVER['HTTP_HOST']; 这是php获取请求头中的Host函数,由于我们做了反向代理,最终发现该值是服务端的真实IP,而不是域名。
比如http://abc.com 我们希望得到的值是 abc.com

##使用proxy_set_header指令
http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_set_header

为了解决这些问题,我们需要学习proxy_set_header指令,重新定义或添加字段传递代理服务器的请求头。


server{
listen 8082;
location /{
proxy_set_header Host a123; #这时我们获取的HTTP_HOST就变成了我们自定义的a123
proxy_pass http://192.168.88.88:9090/;
}
}

一般来说我们会使用nginx内置变量$host来自动获取,当请求端头部有Host值取该值,否则取主域名。

proxy_set_header Host $host;

把端口加上(非必需)

proxy_set_header Host $host:$server_port;

代理多网站

当我们访问
http://abc.com:8082/php 时进入php网站;
http://abc.com:8082/java 时进入java网站.

简单配置如下:

location /php{
    proxy_set_header Host $host:$server_port; 
    proxy_pass http://192.168.88.88:9090/;
}
location /java{
    proxy_set_header Host $host:$server_port; 
    proxy_pass http://192.168.88.88:8080/;
}
`add_header`和`proxy_set_header`是Nginx中用于操作HTTP头部信息的指令,二者作用方向和使用场景完全不同,具体区别如下: - **作用方向**:`proxy_set_header`作用于请求头,是将请求头发送给后端服务器;`add_header`作用于响应头,是将响应头发送给客户端浏览器[^1][^2]。 - **目标对象**:`proxy_set_header`的目标对象是后端上游服务器;`add_header`的目标对象是终端用户浏览器[^2]。 - **主要用途**:`proxy_set_header`主要用于修改或添加发往后端的请求头信息;`add_header`主要用于添加或覆盖返回给客户端的响应头信息[^2]。 - **数据流向**:`proxy_set_header`的数据流向是从Nginx到后端服务器;`add_header`的数据流向是从后端服务器经过Nginx再到客户端[^2]。 - **常见变量**:`proxy_set_header`常见使用`$remote_addr`、`$host`、`$uri`等变量;`add_header`常使用固定值、环境变量或后端返回的数据[^2]。 - **应用场景**:`proxy_set_header`常用于反向代理、负载均衡、后端路由决策;`add_header`常用于安全防护、跨域控制、缓存策略、API元数据标注[^2]。 - **调试方法**:`proxy_set_header`可通过检查后端收到的请求头来调试;`add_header`可通过浏览器开发者工具查看响应头来调试[^2]。 以下是二者的使用示例: ```nginx server { listen 80; server_name example.com; location / { # 设置请求头给上游服务器 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 反向代理到后端服务器 proxy_pass http://backend_server; # 设置响应头信息给浏览器 add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Headers' 'X-Requested-With'; add_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS'; } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值