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