目录
- 观察请求头参数Host的变化
- 修正host参数
0. 概述
- 请求头参数
host
为向谁发出请求,例如我们访问百度的首页,那么Host
就是www.baidu.com/
- nginx相当于把浏览器中发送的请求,转发给相应的服务端。
1. 观察请求头参数Host的变化
-
搭建服务端
在终端输出请求头参数Host
/**
* node.js创建服务端的基础
*/
const http = require('http')
const port = 9000
http.createServer(function(request, response) {
// 在终端输出请求头参数Host
console.log(request.headers['host'])
response.end('666')
}).listen(port)
console.log(`listen ${port}`)
-
配置nginx
转发到node服务端
server {
listen 80;
server_name test.com;
location / {
proxy_pass http://localhost:9000;
}
}
-
测试
输入test.com
- 浏览器中的Host为
test.com
- node终端的Host为
localhost:9000
出现这个的原因就是nginx转发请求时更改的原来的请求头,这并不是一个bug,而是http协议中host就是代表向谁请求,因此在nginx中发出的请求默认情况下就是配置的proxy_pass
。
2. 修正host参数
$host
为nginx提供的变量,这里我们手动设置了nginx的请求头。
server {
listen 80;
server_name test.com;
location / {
proxy_pass http://localhost:9000;
proxy_set_header Host $host;
}
}
现在再去请求test.com
终端也显示test.com
了。
网友评论