国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 網(wǎng)站 > Nginx > 正文

Nginx 重定向時(shí)獲取域名的方法示例

2024-08-30 12:24:55
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

TL;DR

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

問(wèn)題和解決方案

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

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

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

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

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

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

$ curl -I http://sub2.example.com/HTTP/1.1 301 Moved PermanentlyServer: nginx/1.9.3 (Ubuntu)Date: Tue, 23 Feb 2016 06:06:30 GMTContent-Type: text/htmlContent-Length: 193Connection: keep-aliveLocation: https://sub1.example.com/

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

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

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

    Request-Line 中的域名信息。Request-Line 包含 method, uri 和 HTTP 版本。 請(qǐng)求頭信息中的 "Host" 。 Nginx 中匹配的 server_name 配置。

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

參考資料

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

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

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持錯(cuò)新站長(zhǎng)站。

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 当涂县| 乌兰浩特市| 湖州市| 孟连| 镇坪县| 南川市| 习水县| 墨玉县| 东港市| 夏津县| 姜堰市| 玉田县| 大理市| 来宾市| 上杭县| 临汾市| 安顺市| 体育| 鹤峰县| 太仆寺旗| 贵州省| 清丰县| 灵台县| 东阳市| 遂昌县| 花垣县| 会宁县| 静安区| 宁阳县| 合江县| 大渡口区| 长岛县| 肇庆市| 海林市| 额济纳旗| 乌海市| 博罗县| 沧州市| 恩施市| 黎平县| 大化|