今天在配置Nginx + PHP + MediaWiki中, 發現一個問題:MediaWiki所在的Nginx虛擬主機綁定了多個域名,可是無論經過什麼域名訪問MediaWiki首頁,都會被跳轉到其中的一個域 名上。Nginx配置文件中沒有相關的rewrite跳轉規則,那麼就應該是MediaWiki的PHP程序作的跳轉,可是,遍歷了MediaWiki目 錄下的全部文件以及查詢了MySQL數據庫中的每一個表,都沒有發現記錄有這個域名。後來,經過查看源代碼發現MediaWiki是根 據$_SERVER['SERVER_NAME']作的跳轉,順藤摸瓜,發現了下列問題:
在一個Nginx虛擬主機中,能夠綁定多個server_name,例如:
而server_name的前後順序的不一樣,對PHP程序中使用$_SERVER["SERVER_NAME"]或getenv('SERVER_NAME')獲取服務器域名是有影響的:
$_SERVER["SERVER_NAME"]或getenv('SERVER_NAME')獲取的始終將是Nginx server_name配置中的第一個域名,這一點在程序開發中須要注意。這第一個域名就至關於Apache虛擬主機配置中的ServerName,後面 的域名就至關於Apache的ServerAlias。php