nginx 常用配置记录
$host
$http_host
区别:
$host 含义:
官网解释:链接
优先级:请求行的主机名[1] > 请求头字段 Host 中的主机名[2] > 与请求匹配的服务器名称[3]
ip或域名,不包含端口;如:访问
http://www.juejin.cn:300
, 主机名就是www.juejin.cn
;访问http://192.168.1.128:8000
主机名就是192.168.1.128
1. [1]请求行的主机名
请求地址中的主机名,如图请求地址为 http://localhost:81
,那么 $host
值为 localhost
2. [2]请求头字段 Host 的值中的主机名
如图请求头 Host
值为 localhost:81
,那 $host
值为 localhost
3. [3]与请求匹配的服务器名称
此时的 $host
= $server_name
, 比如 nginx 配置如下:
server {
listen 81;
server_name h5.juejin.cn locahost;
rewrite ^/(.*) https://$http_host/$1 redirect;
}
访问地址为 http://h5.juejin.cn:81
时,$server_name
值为 h5.juejin.cn
访问地址为 http://localhost:81
时,注意 $server_name
值还是为 h5.juejin.cn
$http_host 含义
请求头字段 Host 的值,既包含主机名[主机名],也包含端口
访问地址为 http://h5.juejin.cn:81
时,$http_host
值为 h5.juejin.cn:81
访问地址为 http://localhost:81
时,注意 $server_name
值还是为 h5.juejin.cn
如图请求头 Host
值为 localhost:81
,那 $http_host
值为 localhost:81
1. 重定向
server {
listen 80;
server_name h5.juejin.cn;
location / {
if ($scheme = 'http'){
## 永久重定向至 https ; 需要注意到底使用 $host 还是 $http_host
return 301 https://$host$request_uri;
## 永久重定向至 https
rewrite ^(.*) https://$server_name$1 permanent;
## 临时重定向至 https
rewrite ^(.*) https://$server_name$1 permanent;
rewrite ^/(.*) /test/$1 redirect;
}
}
}