欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nginx 重定向時獲取域名的方法示例

 更新時間:2018年07月19日 09:59:22   作者:darkbaby123  
本篇文章主要介紹了Nginx 重定向時獲取域名的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

TL;DR

如果你在處理 Nginx 重定向時要獲取原請求的域名(比如 HTTP 到 HTTPS),請用 $host 而不是 $server_name 。

問題和解決方案

今天碰到一個問題,服務(wù)器上一個子域名的請求重定向到另一個子域名上面去了。查了一段時間發(fā)現(xiàn)這個問題只有在 HTTP 到 HTTPS 跳轉(zhuǎn)的時候才會發(fā)生。大概是這樣:

從 HTTP 的 sub2 子域名跳轉(zhuǎn)到 HTTPS 的 sub1 子域名

http://sub2.example.com/more_things -> https://sub1.example.com/more_things

我用的 Nginx ,當(dāng)初為了讓 HTTP 請求跳轉(zhuǎn)到同名的 HTTPS 請求,配置如下:

http {
 server {
 listen  80;
 server_name sub1.example.com sub2.example.com;
 return  301 https://$server_name$request_uri;
 }

 server {
 listen  443 ssl spdy;
 server_name sub1.example.com sub2.example.com;
 # ...
 }
}

因為 301 是永久重定向,某些瀏覽器的緩存會記住重定向,下次訪問原地址就會直接向新地址發(fā)請求,所以這個問題在瀏覽器里面不一定重現(xiàn)得了(包括 Chrome 的 Incognito Window),能每次完整重現(xiàn)的方式只有 curl 。

$ curl -I http://sub2.example.com/

HTTP/1.1 301 Moved Permanently
Server: nginx/1.9.3 (Ubuntu)
Date: Tue, 23 Feb 2016 06:06:30 GMT
Content-Type: text/html
Content-Length: 193
Connection: keep-alive
Location: https://sub1.example.com/

查了一下,發(fā)現(xiàn)問題出在 $server_name 變量上。這個變量會始終返回 server_name 中第一個名字。這里其實應(yīng)該用 $host 變量。修改后的配置如下:

http {
 server {
 listen  80;
 server_name sub1.example.com sub2.example.com;
 return  301 https://$host$request_uri;
 }
}

$host 變量會按照以下優(yōu)先級獲取域名:

  1. Request-Line 中的域名信息。Request-Line 包含 method, uri 和 HTTP 版本。
  2. 請求頭信息中的 "Host" 。
  3. Nginx 中匹配的 server_name 配置。

這幾乎可以保證在任何環(huán)境下正確地得到域名。如果是同域名下的重定向最好都用 $host 。

參考資料

Nginx Wiki - $host
Nginx 官方文檔。其中對 $host 講的比較詳細,但 $server_name 只是一筆帶過。

StackOverflow - What is the difference between Nginx variables $host, $http_host, and $server_name?
StackOverflow 上關(guān)于三個變量區(qū)別的討論。里面提到了為什么 $host 是適用于所有場景的唯一選擇。

HTTP/1.1 : Request-Line
HTTP/1.1 規(guī)范中對 Request-Line 的描述。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • nginx無法獲取帶下劃線的header值的問題解決

    nginx無法獲取帶下劃線的header值的問題解決

    Nginx默認會將連字符轉(zhuǎn)換為下劃線,這可能會導(dǎo)致無法正確獲取到原始的請求頭值,本文主要介紹了nginx無法獲取帶下劃線的header值的問題解決,感興趣的可以了解一下
    2024-12-12
  • Forever+nginx部署Node站點的方法示例

    Forever+nginx部署Node站點的方法示例

    這篇文章主要介紹了Forever+nginx部署Node站點的方法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Nginx反向代理springboot的jar包過程解析

    Nginx反向代理springboot的jar包過程解析

    這篇文章主要介紹了Nginx反向代理springboot的jar包過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • Nginx內(nèi)容緩存以及常見參數(shù)配置詳析

    Nginx內(nèi)容緩存以及常見參數(shù)配置詳析

    這篇文章主要給大家介紹了關(guān)于Nginx內(nèi)容緩存以及常見參數(shù)配置的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學(xué)習(xí)或者使用Nginx具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05
  • 詳解如何部署H5游戲到nginx服務(wù)器

    詳解如何部署H5游戲到nginx服務(wù)器

    這篇文章主要介紹了詳解如何部署H5游戲到nginx服務(wù)器,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • Nginx學(xué)習(xí)筆記之事件驅(qū)動框架處理流程

    Nginx學(xué)習(xí)筆記之事件驅(qū)動框架處理流程

    Nginx對請求的處理是通過事件觸發(fā)的,模塊作為事件消費者,只能被事件收集、分發(fā)器調(diào)用。在Nginx中,接收到一個請求時,不會產(chǎn)生一個單獨的進程來處理該請求,而是由事件收集、分發(fā)器(進程)調(diào)用某個模塊,由模塊處理請求,處理完后再返回到事件收集、分發(fā)器
    2014-07-07
  • Nginx中輪詢機制的實現(xiàn)

    Nginx中輪詢機制的實現(xiàn)

    Nginx是一款優(yōu)秀的Web服務(wù)器和反向代理服務(wù)器,本文主要介紹了Nginx中最基本的輪詢機制的原理、配置及其優(yōu)化方法,具有一定的參考價值,感興趣的可以了解一下
    2024-10-10
  • 在Nginx中配置image filter模塊來實現(xiàn)動態(tài)生成縮略圖

    在Nginx中配置image filter模塊來實現(xiàn)動態(tài)生成縮略圖

    這篇文章主要介紹了在Nginx中配置image filter模塊來實現(xiàn)動態(tài)生成縮略圖的方法,包括縮略圖尺寸的設(shè)置等方面的介紹,需要的朋友可以參考下
    2015-12-12
  • Linux下Nginx服務(wù)設(shè)置開機自啟動的命令詳解

    Linux下Nginx服務(wù)設(shè)置開機自啟動的命令詳解

    這篇文章主要介紹了Linux下Nginx服務(wù)設(shè)置開機自啟動的命令,文中通過代碼示例介紹的非常詳細,對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-09-09
  • Nginx基本命令&不停機版本升級

    Nginx基本命令&不停機版本升級

    這篇文章主要為大家介紹了Nginx基本命令&不停機版本升級,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08

最新評論