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