Re: Drupal + nginx + Apache: try files вызывает циклический редирект

Pavel V. pavel2000 at ngs.ru
Wed Jul 25 09:31:19 UTC 2012


Здравствуйте, STINGER_LP.

Вы писали 25 июля 2012 г., 3:52:20:

> Я делал все в частности как указано в
> вики: http://wiki.nginx.org/HttpCoreModule#try_files за
> исключением того, что у меня fastcgi не
> стоит. Но в итоге, в каком бы я локейшене
> не прописывал "try_files $uri $uri/ /index.php?q=$uri;" по
> его адресу происходит циклическое
> перенаправление, о чем любезно сообщил
> мне Хром (Опера же тупо белую страницу
> выдает).

Вы в лог апача посмотрите, может этот редирект выдается им??



> server {

>    listen mysite.com:80;
>    server_name mysite.com www.mysite.com dev.mysite.com
> download.mysite.com www.mysite.com download.myoldsite.com
> www.myoldsite.com www.download.myoldsite.com;
>    root /var/www/mysite/;
>    index index.php index.html index.htm;
>    charset utf-8;
>    access_log  /var/log/nginx/access_mysite.log;
>    error_log   /var/log/nginx/error_mysite.log warn;

Почитайте про "Nginx IfIsEvil", перепишите условия с использованием $host в отдельные блоки server {} , иначе не
ждите отсюда помощи.

>    if ( $host = myoldsite.com ) {
>          rewrite ^(.*) http://mysite.com$1 permanent;
>    }
>    if ( $host = www.myoldsite.com ) {
>          rewrite ^(.*) http://mysite.com$1 permanent;
>    }
>    if ( $host = www.download.mysite.com ) {
>          rewrite ^(.*) http://download.mysite.com$1 permanent;
>    }
>    if ( $host = www.myoldsite.com ) {
>          rewrite ^(.*) http://download.myoldsite.com$1 permanent;
>    }
>         

>    if ($host !~
> ^(mysite.com|www.mysite.com|download.myoldsite.com|www.download.myoldsite.com|dev.mysite.com|www.dev.mysite.com)$)
> {
>          rewrite ^(.*) http://mysite.com$1 permanent;   
>    }


>         
>    location / {
>             proxy_pass                 http://127.0.0.1:81/;
>             proxy_redirect             off;
>             proxy_set_header           Host $host;
>             proxy_set_header           X-Real-IP $remote_addr;#
>             proxy_set_header           X-Forwarded-For
> $proxy_add_x_forwarded_for;
>             client_max_body_size       10m;
>             client_body_buffer_size    128k;
>             client_body_temp_path      /var/nginx/client_body_temp 1 2;
>             proxy_connect_timeout      90;
>             proxy_send_timeout         90;
>             proxy_read_timeout         90;
>             proxy_buffer_size          4k;
>             proxy_buffers              4 32k;
>             proxy_busy_buffers_size    64k;
>             proxy_temp_file_write_size 64k;
>             proxy_temp_path            /var/nginx/proxy_temp 1 2;

>             try_files $uri $uri/ /index.php?q=$uri;
>        }

Зачем здесь в этом location / {} столько _тюнинга_, я думаю не понятно _никому_.



>        # Serve static files directly by nginx
>        location ^~ /files/ {
>             access_log        off;
>             expires           20d;
>             try_files $uri $uri/ /index.php?q=$uri;
>        }
>        location ~*
> ^.+\.(jpeg|jpg|gif|png|bmp|ico|swf|exe|air|ttf|otf|xml|torrent|bup|ifo|info|nfo|cur|tar|zip|tgz|rar|bz2|pdf|psd|txt|doc|xls|docx|xlsx|bak|veg|sfk|css|js|ogg|mp3|ac3|flac|mp2|wav|wma|wmv|avi|mpeg|mpg|mov|flv|mp4|webm|mkv|ts|vob|m4v|rm|m2ts|mts)$
> {
>             access_log   off;
>             expires      30d;
>             try_files $uri $uri/ /index.php?q=$uri;     
>        }

>        location ^~ /files/imagecache/ {          
>             root   /var/www/mysite;
>             index  index.php index.html;
>             try_files $uri $uri/ /index.php?q=$uri;
>        }
> }

У меня это делается чуть по другому (тоже drupal):

server {
   ...
root /web/site/www;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
#дефолтный локейшн
location / {  proxy_pass http://127.0.0.1:80; }
#Абсолютная статика
location = /favicon.ico { return 404; }
location = /robots.txt {}
location ^~ /img/ {}
location ^~ /misc/ {}
#Эти три в одну регулярку объединять было лениво, но сделать можно и наверное нужно.
location ~* ^\/sites\/all\/themes\/.*\.(gif|jpg|jpeg|png|css|swf|ico|js)$ {}
location ~* ^\/sites\/all\/libraries\/.*\.(gif|jpg|jpeg|png|css|swf|ico|js)$ {}
location ~* ^\/sites\/all\/modules\/.*\.(gif|jpg|jpeg|png|css|swf|ico|js)$ {}
location ~* ^\/modules\/.*\.(gif|jpg|jpeg|png|css|swf|ico|js)$ {}
#Тут что-то создается динамически, поэтому try_files
location ^~ /sites/default/files/ { try_files $uri @backend; }
#локейшн для динамики
location @backend { proxy_pass http://127.0.0.1:80;  }
#Всякие защитные фенечки
location ~ /\.ht { deny  all; }
...
}

Обратите внимание на то, что /index.php?q=$uri заменен на @backend.
Не забудьте посмотреть в логи апача, он тоже может выдавать редиректы.


> nginx-ru mailing list
> nginx-ru at nginx.org
> http://mailman.nginx.org/mailman/listinfo/nginx-ru



-- 
С уважением,
 Pavel                          mailto:pavel2000 at ngs.ru



Подробная информация о списке рассылки nginx-ru