我目前正在嘗試爲本地化設置具有單獨存儲視圖的Magento安裝。但是,我不確定我目前在Nginx中實現URL處理的方式是最乾淨的解決方案。Magento使用nginx proxy_pass在子文件夾中存儲
的URL結構是:
http://www.example.com/ (US store)
http://www.example.com/nl/ (Dutch store)
http://www.example.com/nl/en (Dutch store, English language)
等。無論URL結構如何(即http://www.example.com/nl/en/index.php
和http://www.example.com/index.php
均對應於/var/www/magento/index.php
),每個商店視圖的PHP代碼將從/var/www/magento/
提供服務。
我們現在正在尋找16個獨立的Magento商店,最終可能會擴展到30個以上。 Magento/PHP的性能是很多商店關心的問題,但我現在更擔心Nginx。
當前端口80處理所有傳入連接,並基於本地化代碼使用proxy_pass將它們重定向到一個單獨的Nginx服務器上,其中localhost
。此服務器然後設置MAGE_RUN_CODE變量來指定商店代碼的Magento:
server {
listen 80 default;
server_name www.example.com;
root /var/www/magento;
location /nl {
rewrite ^/nl/(.*) /$1 break;
proxy_pass http://localhost:82;
proxy_set_header X-Real-IP $remote_addr;
}
... ## Similar location blocks for other country codes
location ^~ /media/ {
expires 30d; ## Assume all files are cachable
}
... ## Similar location blocks for other static content
location/{
proxy_pass http://localhost:81;
proxy_set_header X-Real-IP $remote_addr;
}
}
server {
listen localhost:81;
server_name www.example.com;
root /var/www/magento;
...
# Handle PHP files
location ~ .php$ {
... ## Uses standard Magento configuration, except for:
fastcgi_param MAGE_RUN_CODE en_us;
fastcgi_param MAGE_RUN_TYPE store;
...
}
... ## Similar configuration blocks for other stores
}
在listen 80
塊重寫條從URL商店代碼,從而呈現的Magento與正確REQUEST_URI
。商店代碼基於處理請求的端口(其本身由URL中的商店代碼確定)設置。當Magento的index.php
重定向魔術(例如,荷蘭商店的基本URL被指定爲http://www.example.com/nl/
,因此如果荷蘭商店代碼被設置,則/product/
的請求被重寫爲http://www.example.com/nl/product/
)時,商店代碼被重寫入URL中。
一切正常合理。導航到子文件夾URL時,商店代碼設置正確,頁面上的鏈接都不顯示中斷,並且靜態文件是從域的根目錄提供的。
雖然這個設置有點讓我很癢。我知道proxy_pass沒有很大的開銷,並且從端口80提供的靜態文件應該只有一個額外的內部連接,但是我擔心我錯過了明顯的東西(或者更糟糕的是,顯而易見),這是一個壞主意。誰能告訴我爲什麼我不應該這樣的路由請求,或提出建議,以提高性能?
一種替代選項(在another Stack Overflow thread中建議)是在/var/www/magento
(例如ln -s /var/www/magento/ /var/www/magento/nl/en/
)中建立符號鏈接的嵌套。隨着涉及的商店數量,這可能會變得混亂。 (我也無法讓它在合理的時間內工作!)
問題的一部分是,Magento需要重寫從基本URL剝離商店代碼,否則無論商店代碼如何,它都會查找'/ var/www/magento/nl/zh/index.php'。 (同樣,符號鏈接可以在這裏工作,但這似乎是一個徹頭徹尾的破解。)或許正確設置REQUEST_URI參數也可以。或者,我可以在_every_位置塊中重寫重寫,但配置可能會很快失控。 – bclune 2013-05-08 13:39:44
@bclune我會在我回家時嘗試重現這一點。你能列出你的系統 - 配置 - 網絡?默認視圖base_URL和設置「重定向到基本URL」的值? – Melvyn 2013-05-10 16:48:44