各位技術大佬,大家好,我是練習時長兩年半的代碼練習生,Max,喜歡技術,後端和架構。 問題介紹 項目配置了多個功能變數名稱,如下,php 代碼中有獲取 $_SERVER['SERVER_NAME'] 的值。 server { server_name a.demo.com b.demo.com; ... } ...
各位技術大佬,大家好,我是練習時長兩年半的代碼練習生,Max,喜歡技術,後端和架構。
問題介紹
項目配置了多個功能變數名稱,如下,php 代碼中有獲取 $_SERVER['SERVER_NAME']
的值。
server {
server_name a.demo.com b.demo.com;
...
}
當訪問 a.demo.com
時,其獲取的值是符合預期的。但是當訪問 b.demo.com
時,其獲取的值還是 a.demo.com
,導致代碼中的判斷出現錯誤。
問題分析
當 nginx 的一個 server 節點下,server_name 配置多個功能變數名稱時,$server_name 變數的值是配置的第一個功能變數名稱。結合上面我們的配置,此時我們的 $server_name 值為 a.demo.com
。
解決方案
- 方案 1,將多個功能變數名稱配置在不同的 server 段下(推薦)。
例如上面的配置,可以改成如下:
server {
server_name a.demo.com;
...
}
server {
server_name b.demo.com;
...
}
- 方案 2,修改 nginx 的 SERVER_NAME 值,使用 $host 變數。
# 預設
fastcgi_param SERVER_NAME $server_name;
# 修改為
fastcgi_param SERVER_NAME $host;
今天的坑就踩到這,改天我們接著踩。
更多技術文章,請關註我的個人博客 www.immaxfang.com 和小公眾號
Max的技術札記
。