Nginx
如何在 Nginx 中解析和檢索子域和主機名標籤
我正在使用基於 nginx + php-fpm + mysql 堆棧上的幾個 magento 版本的測試環境,我將每個分發版放在不同的文件夾中,並在 nginx vhost 配置文件中使用以下句子:
server_name ~^(?<version>.+)\.magento\.test$; 根 [root_path]/distro/$version;
所以直到這裡我可以將任何動態 url 映射到它的文件夾
ce107.magento.test => [root_path]/distro/ce107/ ce108.magento.test => [root_path]/distro/ce108/ ce109.magento.test => [root_path]/distro/ce109/
當我嘗試使用“主機名標籤”在每個發行版上切換網站時,問題就開始了:
us.ce107.magento.test,ar.ce107.magento.test ...
因為 nginx 尋找:**$$ root_path $$/distro/us.ce107/和$$ root_path $$/distro/ar.ce107/**文件夾。
所以我需要解析和檢索以下值:
[ws_code].[version].magento.test
我不知道該怎麼做,也許我可以使用“地圖 $ host $ ws_code {}" 來解析 $ ws_code value, and apply some regex to remove “ws_code.” part from the $ 版本
順便說一句,顯然我可以“編碼”,但我想保持“動態”
有人可以幫忙嗎?提前致謝!
正
(?<version>.+)
則表達式將使用貪婪匹配並將其分配給$version
變數。你可以做同樣的事情來匹配ws_code
和version
:server_name ~^(?<ws_code>.+)\.(?<version>.+?)\.magento\.test$; root [root_path]/distro/$version/$ws_code;
我使用了貪婪匹配
[ws_code]
和非貪婪匹配[version]
。另外我會使用更具確定性的東西,比如[a-zA-Z0-9-]+
從可能的匹配中排除域分隔符點號(在這種情況下,我們不需要檢查匹配算法是否貪婪):server_name ~^((?<ws_code>[a-z]+)\.)?(?<version>[a-zA-Z0-9-]+)\.magento\.test$; root [root_path]/distro/$version;
ws_code matchig 上的附加
()?
大括號將允許此配置匹配只有一個可用變數的 3 級域和具有兩個可用變數的 4 級域。您可能希望為ws_code
.