ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: "include" directive is not allowed here



Попробуйте вынести inсlude на уровень server или http - все равно же файл один для всех proxy_pass'ов?

25 января 2009 г. 20:20 пользователь Roman Hlynovskiy <roman.hlynovskiy@xxxxxxxxx> написал:
Добрый день,

в данный момент существует вот такой конфиг который вполне успешно
обрабатывает запросы к хосту и если есть какие-то несуществующие
файлы, либо страшные редиректы через mod_rewrite на бэкенде, то nginx
их ему скармливает.

server {
 server_name www.xxx.kz xxx.kz;
 listen a.b.c.d:80;

 log_not_found off;
 access_log /usr/local/apache/domlogs/xxx.kz common buffer=32k;
 access_log /usr/local/apache/domlogs/xxx.kz-bytes_log bytes_log buffer=4k;
 error_log /var/log/nginx/error.log warn;

 location ~* \.(gif|jpg|jpeg|png|bmp|ico|wmv|avi|mpg|mpeg|mp4|htm|html|js|css|swf|rar|zip|mp3)$
{
   root /home/fotoland/public_html;
   error_page 404 = @apache;
 }

 location ~ /\.ht {
   deny all;
 }

 location / {
   proxy_pass http://localserver/;
   include /etc/nginx/proxy_pass.conf;
   proxy_redirect  http://www.xxx.kz:88 http://www.xxx.kz;
   proxy_redirect  http://xxx.kz:88 http://xxx.kz;
 }

 location @apache {
   proxy_pass http://localserver;
   include /etc/nginx/proxy_pass.conf;
   proxy_redirect  http://www.xxx.kz:88 http://www.xxx.kz;
   proxy_redirect  http://xxx.kz:88 http://xxx.kz;
 }

}

в поисках того чего-бы тут еще оптимизировать конфиг был переписан вот
к такому виду:

server {
 server_name www.xxx.kz xxx.kz;
 listen a.b.c.d:80;

 log_not_found off;
 access_log /usr/local/apache/domlogs/xxx.kz common buffer=32k;
 access_log /usr/local/apache/domlogs/xxx.kz-bytes_log bytes_log buffer=4k;
 error_log /var/log/nginx/error.log warn;

 location ~* \.(gif|jpg|jpeg|png|bmp|ico|wmv|avi|mpg|mpeg|mp4|htm|html|js|css|swf|rar|zip|mp3)$
{
   if (!-f $request_filename) {
    break;
    proxy_pass http://localserver;
    include /etc/nginx/proxy_pass.conf;
    proxy_redirect  http://www.xxx.kz:88 http://www.xxx.kz;
    proxy_redirect  http://xxx.kz:88 http://xxx.kz;
   }
   root /home/fotoland/public_html;
 }

 location ~ /\.ht {
   deny all;
 }

 location / {
   proxy_pass http://localserver/;
   include /etc/nginx/proxy_pass.conf;
   proxy_redirect  http://www.xxx.kz:88 http://www.xxx.kz;
   proxy_redirect  http://xxx.kz:88 http://xxx.kz;
 }

}

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

но тут столкнулся с тем, что nginx не хочет в этом if-е обрабатывать
этот include. сам include содержит набор стандартным директив для
проксирования на бэкенд с именами хедеров и проч. атрибутами модуля
proxy.

у меня есть 2 вопроса:
1) прав-ли я в своей логике, что такая схема будет отрабатывать чуть быстрее
2) если прав как nginx заставить делать то что хочу?

--
...WBR, Roman Hlynovskiy



--
С уважением, Борис Долгов.
icq 77556665
e-mail boris@xxxxxxxxxxx


 




Copyright © Lexa Software, 1996-2009.