我目前正在尝试使用单独的商店视图设置 Magento 安装以进行本地化。但是,我不确定我目前在 Nginx 中实现 URL 处理的方式是最干净的解决方案。
网址结构为:
http://www.example.com/ (US store)
http://www.example.com/nl/ (Dutch store)
http://www.example.com/nl/en (Dutch store, English language)
等等。/var/www/magento/
无论 URL 结构如何(即都对应于)http://www.example.com/nl/en/index.php
,每个商店视图的 PHP 代码都将被提供。http://www.example.com/index.php
/var/www/magento/index.php
我们现在正在寻找 16 家独立的 Magento 商店,最终可能会扩大到 30 家以上。Magento/PHP 性能是这么多商店关心的问题,但我现在更担心 Nginx。
当前端口 80 处理所有传入连接,并基于本地化代码使用 proxy_pass 将它们重定向到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 中删除了 store 代码,从而为 Magento 提供了正确的REQUEST_URI
. 商店代码是根据处理请求的端口设置的(它本身由 URL 中的商店代码确定)。然后,当 Magento 执行index.php
重定向魔术时,商店代码将被重写为 URL(例如,荷兰商店的基本 URL 指定为,因此如果设置了荷兰商店代码,则http://www.example.com/nl/
请求/product/
被重写)。http://www.example.com/nl/product/
一切都运作良好。导航到子文件夹 URL 时,商店代码设置正确,页面上的所有链接都没有损坏,并且从域的根目录提供静态文件。
不过,关于这个设置的一些东西让我很痒。我知道 proxy_pass 的开销并不大,并且从端口 80 提供静态文件时,每个页面加载应该只有一个额外的内部连接,但我担心我错过了一些明显的东西(或者更糟糕的是,一些非很明显)这使得这是一个坏主意。谁能告诉我为什么我不应该以这种方式路由请求,或者提出提高性能的建议?
另一种选择(在另一个堆栈溢出线程中建议)是在/var/www/magento
(例如ln -s /var/www/magento/ /var/www/magento/nl/en/
)中设置符号链接嵌套。由于涉及的商店数量众多,这可能会变得一团糟。(我也无法让它在合理的时间内工作!)