2013-05-06 2 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) 

합니다. 각 상점보기에 대한 PHP 코드는 URL 구조에 관계없이 /var/www/magento/에서 제공됩니다 (즉, http://www.example.com/nl/en/index.phphttp://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/)에 심볼릭 링크의 중첩을 설정하는 것입니다. 상점의 수가 많으면 지저분해질 가능성이 있습니다. (나는 또한 합리적인 시간 내에 작동하도록 만들 수 없었다!)

답변

0

왜 가상 호스트로 분리 되었습니까? URL을 기반으로 변수를 설정 한 다음 MAGE_RUN_CODE를 해당 변수의 값으로 설정하면됩니다.

+0

Magento는 저장소 코드를 기본 URL에서 제거하기 위해 다시 작성해야합니다. 그렇지 않으면 저장소 코드와 상관없이'/ var/www/magento/nl/en/index.php'를 찾습니다. (다시 말하지만, 심볼릭 링크가 여기에서 작동 할 수 있습니다.하지만 그것은 총 해킹처럼 보입니다.) 아마도 REQUEST_URI 매개 변수를 올바르게 설정하면 올바르게 작동 할 것입니다. 또는 _every_ 위치 블록에서 재 작성을 복제 할 수 있지만 configs는 손에서 빠져 나올 수 있습니다. – bclune

+0

@bclune 집에 올 때 이것을 재현하려고 노력할 것입니다. 당신은 당신의 시스템 - config - web을 열거 할 수 있습니까? 기본보기 base_URL 및 "기본 URL로 리디렉션"설정의 값은 무엇입니까? – Melvyn

관련 문제