현재 현지화를 위해 별도의 저장보기가있는 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)
합니다. 각 상점보기에 대한 PHP 코드는 URL 구조에 관계없이 /var/www/magento/
에서 제공됩니다 (즉, http://www.example.com/nl/en/index.php
및 http://www.example.com/index.php
은 모두 /var/www/magento/index.php
에 해당).
우리는 현재 16 개의 Magento 매장을 찾고 있으며 결국 30 개 이상으로 확장 할 수 있습니다. Magento/PHP 성능은이 많은 상점들에 대한 관심사이지만이 시점에서 Nginx에 대해 더 걱정이됩니다.
현재 포트 80은 들어오는 모든 연결을 처리하며 현지화 코드에 따라 proxy_pass를 사용하여 localhost
에있는 별도의 Nginx 서버로 리디렉션합니다. 이 서버는 마 젠토에 상점 코드를 지정 MAGE_RUN_CODE 변수를 설정합니다
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에서 상점 코드를 제거합니다 때문에 올바른 REQUEST_URI
와 젠토를 제공합니다. 상점 코드는 요청을 처리하는 포트 (URL 자체의 상점 코드에 의해 결정됨)를 기반으로 설정됩니다. 그런 다음 Magento가 index.php
리디렉션 매직 (예 : 네덜란드어 상점의 기본 URL은 http://www.example.com/nl/
으로 지정되어 있으므로 네덜란드 상점 코드가 설정된 경우 /product/
에 대한 요청이 http://www.example.com/nl/product/
으로 다시 작성됩니다.)으로 저장소 코드가 URL로 다시 작성됩니다.
모든 것이 적절하게 작동합니다. 하위 폴더 URL을 탐색 할 때 저장소 코드가 올바르게 설정되고 페이지의 링크가 모두 손상된 것으로 나타나지 않으며 정적 파일이 도메인의 루트에서 제공됩니다.
이 설정에 대해 뭔가 가끔 나를 가렵 게 만듭니다. proxy_pass에 대한 엄청난 오버 헤드가없고, 정적 파일이 포트 80에서 제공된다는 점은 pageload 당 하나의 추가 내부 연결 만 있어야한다는 것을 알고 있지만, 나는 명백한 (또는 더 나쁜, 명백한) 이것은 나쁜 생각을 만든다. 아무도 왜 내가 이 이런 식으로 요청을 라우팅해서는 안되며, 아니면 성능을 향상시키기위한 제안을 내릴 수 있습니까?
대체 옵션 (another Stack Overflow thread에서 제안)은 /var/www/magento
(예 : ln -s /var/www/magento/ /var/www/magento/nl/en/
)에 심볼릭 링크의 중첩을 설정하는 것입니다. 상점의 수가 많으면 지저분해질 가능성이 있습니다. (나는 또한 합리적인 시간 내에 작동하도록 만들 수 없었다!)
Magento는 저장소 코드를 기본 URL에서 제거하기 위해 다시 작성해야합니다. 그렇지 않으면 저장소 코드와 상관없이'/ var/www/magento/nl/en/index.php'를 찾습니다. (다시 말하지만, 심볼릭 링크가 여기에서 작동 할 수 있습니다.하지만 그것은 총 해킹처럼 보입니다.) 아마도 REQUEST_URI 매개 변수를 올바르게 설정하면 올바르게 작동 할 것입니다. 또는 _every_ 위치 블록에서 재 작성을 복제 할 수 있지만 configs는 손에서 빠져 나올 수 있습니다. – bclune
@bclune 집에 올 때 이것을 재현하려고 노력할 것입니다. 당신은 당신의 시스템 - config - web을 열거 할 수 있습니까? 기본보기 base_URL 및 "기본 URL로 리디렉션"설정의 값은 무엇입니까? – Melvyn