nginx 常用配置记录

$host $http_host 区别:

$host 含义:

官网解释:链接

image.png

优先级:请求行的主机名[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

image.png

2. [2]请求头字段 Host 的值中的主机名

如图请求头 Host 值为 localhost:81,那 $host 值为 localhost
image.png

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
image.png

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;
        }
    }
}
原文地址:https://www.cnblogs.com/buyiblogs/p/15539247.html