服務(wù)器
怎么在nginx 重定向時獲取域名?相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
http 請求跳轉(zhuǎn)到同名的 https 請求,配置如下:
http{server{listen80;server_namesub1.example.comsub2.example.com;return301https://$server_name$request_uri;}server{listen443sslspdy;server_namesub1.example.comsub2.example.com;#…}}
因為 301 是永久重定向,某些瀏覽器的緩存會記住重定向,下次訪問原地址就會直接向新地址發(fā)請求,所以這個問題在瀏覽器里面不一定重現(xiàn)得了(包括 chrome 的 incognito window),能每次完整重現(xiàn)的方式只有 curl 。
$curl-ihttp://sub2.example.com/http/1.1301movedpermanentlyserver:nginx/1.9.3(ubuntu)date:tue,23feb201606:06:30gmtcontent-type:text/htmlcontent-length:193connection:keep-alivelocation:https://sub1.example.com/
查了一下,發(fā)現(xiàn)問題出在$server_name變量上。這個變量會始終返回 server_name 中第一個名字。這里其實應(yīng)該用$host變量。修改后的配置如下:
http{server{listen80;server_namesub1.example.comsub2.example.com;return301https://$host$request_uri;}}
$host變量會按照以下優(yōu)先級獲取域名:
request-line 中的域名信息。request-line 包含 method, uri 和 http 版本。
請求頭信息中的 \”host\” 。
nginx 中匹配的 server_name 配置。
看完上述內(nèi)容,你們掌握怎么在nginx 重定向時獲取域名的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注西部數(shù)碼資訊頻道,感謝各位的閱讀!