1. 程式人生 > 其它 >nginx 常用配置記錄

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;
        }
    }
}