2013-12-19 3 views
0

Прямо сейчас я использую конфигурацию ниже для nginx в моем Magento multiwebsite. Все работает отлично, но мне не нравится, что эта конфигурация не оптимизирована и в результате очень огромна. Как вы можете видеть, 2 конфигурации сервера почти одинаковы, только имя_сервера, ssl и fastcgi_param MAGE_RUN_CODE разные. Как я могу присоединиться к двум конфигурациям сервера? Как вы можете видеть, здесь много дублирования.Magento и nginx - конфигурация multiwebsite

server { 
    listen 80; 
    server_name test.com test1.com; 
    rewrite/$scheme://www.$host$request_uri permanent; ## Forcibly prepend a www 
} 

server { 
    listen 80; 
## SSL directives might go here 
    listen 443 ssl; 
    ssl_certificate  /etc/nginx/ssl/test/cert.cer; 
    ssl_certificate_key  /etc/nginx/ssl/private/test.key; 
    server_name www.test.com test.com; 
    root /var/www/test; 

    location/{ 
     index index.html index.php; ## Allow a static html file to be shown first 
     try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler 
     expires 30d; ## Assume all files are cachable 
    } 

    ## These locations would be hidden by .htaccess normally 
    location ^~ /app/    { deny all; } 
    location ^~ /includes/   { deny all; } 
    location ^~ /lib/    { deny all; } 
    location ^~ /media/downloadable/ { deny all; } 
    location ^~ /pkginfo/   { deny all; } 
    location ^~ /report/config.xml { deny all; } 
    location ^~ /var/    { deny all; } 

    location /var/export/ { ## Allow admins only to view export folder 
     auth_basic   "Restricted"; ## Message shown in login window 
     auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword 
     autoindex   on; 
    } 

    location /. { ## Disable .htaccess and other hidden files 
     return 404; 
    } 

    location @handler { ## Magento uses a common front handler 
     rewrite//index.php; 
    } 

    location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler 
     rewrite ^(.*.php)/ $1 last; 
    } 

    location ~ .php$ { ## Execute PHP scripts 
     if (!-e $request_filename) { rewrite//index.php last; } ## Catch 404s that try_files miss 

     expires  off; ## Do not cache dynamic content 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_param HTTPS $fastcgi_https; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_param MAGE_RUN_CODE default; ## Store code is defined in administration > Configuration > Manage Stores 
     fastcgi_param MAGE_RUN_TYPE store; 
     include  fastcgi_params; ## See /etc/nginx/fastcgi_params 
    } 

    error_page 403 /error-page.html; 
    error_page 502 /error-page.html; 
    error_page 503 /error-page.html; 
    error_page 504 /error-page.html; 
} 

server { 
    listen 80; 
## SSL directives might go here 
    listen 443 ssl; 

    server_name test1.com www.test1.com; 
    root /var/www/test; 

    location/{ 
     index index.html index.php; ## Allow a static html file to be shown first 
     try_files $uri $uri/ @handler; ## If missing pass the URI to Magento's front handler 
     expires 30d; ## Assume all files are cachable 
    } 

    ## These locations would be hidden by .htaccess normally 
    location ^~ /app/    { deny all; } 
    location ^~ /includes/   { deny all; } 
    location ^~ /lib/    { deny all; } 
    location ^~ /media/downloadable/ { deny all; } 
    location ^~ /pkginfo/   { deny all; } 
    location ^~ /report/config.xml { deny all; } 
    location ^~ /var/    { deny all; } 

    location /var/export/ { ## Allow admins only to view export folder 
     auth_basic   "Restricted"; ## Message shown in login window 
     auth_basic_user_file htpasswd; ## See /etc/nginx/htpassword 
     autoindex   on; 
    } 

    location /. { ## Disable .htaccess and other hidden files 
     return 404; 
    } 

    location @handler { ## Magento uses a common front handler 
     rewrite//index.php; 
    } 

    location ~ .php/ { ## Forward paths like /js/index.php/x.js to relevant handler 
     rewrite ^(.*.php)/ $1 last; 
    } 

    location ~ .php$ { ## Execute PHP scripts 
     if (!-e $request_filename) { rewrite//index.php last; } ## Catch 404s that try_files miss 

     expires  off; ## Do not cache dynamic content 
     fastcgi_pass 127.0.0.1:9000; 
     fastcgi_param HTTPS $fastcgi_https; 
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
     fastcgi_param MAGE_RUN_CODE test1; ## Store code is defined in administration > Configuration > Manage Stores 
     fastcgi_param MAGE_RUN_TYPE store; 
     include  fastcgi_params; ## See /etc/nginx/fastcgi_params 
    } 

    error_page 403 /error-page.html; 
    error_page 502 /error-page.html; 
    error_page 503 /error-page.html; 
    error_page 504 /error-page.html; 
} 

ответ

1

Я думал о переписывании всего файла конфигурации для вас, однако было бы плохой идеей для вас просто скопировать-вставить что-то из Интернета, как это, а также, вероятно, нарушит дух формата ответа StackOverflow.

Итак, позвольте мне дать вам несколько хороших указаний о том, как вы можете выполнить то, что вам нужно, в общем смысле.

Кроме того, в целом, и, насколько Nginx и производительность, то она не плохая идея, чтобы иметь несколько почти одинаковых server директив — они только плохо с административной точки зрения, где это не очень понятно, для кого-то глядя на них, какая разница между серверами.

include

  • Вы можете использовать include директиву для разделения каждого сервера в отдельный файл. Таким образом, любой, кто ищет вашу настройку, может легко использовать diff, чтобы четко видеть, в чем разница между серверами, и вы также можете внести изменения в один из файлов сервера, а затем применить указанные изменения к другим с помощью patch, что также приносит нас к первопричине & hellip;

  • Вы можете использовать include иметь все одинаковые части от каждого server в одном заданный файл, где каждый server будет иметь вполне Barebone, и перечислите только фактические различия между конфигурациями

set

  • Вы можете использовать переменные для выделения значений, переданных некоторым директивам. Обратите внимание, что использование всех видов директив непосредственно в пределах if обычно не работает, но с использованием промежуточной переменной вы можете сделать то же самое.

объединить include и set

  • Вы, вероятно, следует объединить вышеупомянутые идеи, чтобы соответствовать вашей точные потребности, учитывая планы для будущего роста.

Как использовать set условно?

Если вы хотите установить все это в течение одного server, вы можете использовать set условно:

set $mage_rc "default"; 
if ($server_name = test1.com) { 
    set $mage_rc "test1"; 
} 

location ~ \.php$ { 
    … 
    fastcgi_param MAGE_RUN_CODE $mage_rc; 
    … 
} 

Итак, с чего же начать?

С информацией предоставленной Вами, я бы, вероятно, держать серверы отдельных (т.е. по-прежнему используют отдельные server директивы), определяют некоторые локальные переменные в каждом server и include конфигурации, общие для обоих серверов, где в указанной общей конфигурация использовала бы такие переменные, как $mage_rc, которые должны были быть определены в каждом server. С отдельными server s, нет необходимости использовать if, как указано выше —, вы просто определяете каждую переменную отдельно в каждом server, один раз для всего контекста server.

0

Это зависит от Distro вы используете, в Ubuntu, /etc/nginx/nginx.conf файл добавить эту запись include /etc/nginx/sites-enabled/*; внутри HTTP секции {}

Затем создать отдельные веб-сайты под включают /etc/nginx/sites-enabled/

Надежда, что помогает.

Смежные вопросы