2013-05-06 52 views
1

我目前正在嘗試爲本地化設置具有單獨存儲視圖的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.phphttp://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/)中建立符號鏈接的嵌套。隨着涉及的商店數量,這可能會變得混亂。 (我也無法讓它在合理的時間內工作!)

回答

0

爲什麼所有這些分離到虛擬主機?只需根據URL設置一個變量,然後將MAGE_RUN_CODE設置爲該變量的值。

+0

問題的一部分是,Magento需要重寫從基本URL剝離商店代碼,否則無論商店代碼如何,它都會查找'/ var/www/magento/nl/zh/index.php'。 (同樣,符號鏈接可以在這裏工作,但這似乎是一個徹頭徹尾的破解。)或許正確設置REQUEST_URI參數也可以。或者,我可以在_every_位置塊中重寫重寫,但配置可能會很快失控。 – bclune 2013-05-08 13:39:44

+0

@bclune我會在我回家時嘗試重現這一點。你能列出你的系統 - 配置 - 網絡?默認視圖base_URL和設置「重定向到基本URL」的值? – Melvyn 2013-05-10 16:48:44