UPD !!!: Обсуждаемая здесь проблема полностью решена этой темой:
http://groups.drupal.org/node/155564
И путем детального изучения:
Конфигурация Nginx от гуру Nginx и Drupal - Антониу П. П. Алмейда (Perusio).
https://github.com/perusio/drupal-with-nginx
не может решить следующую проблему: у меня FreeBSD, Apache 2.2, PHP (без FastCGI!) в качестве модуля apache, nginx 0.8.5.4.
Я пытаюсь перенести портал Drupal с включенным ускорением и image_cache на персональный VPS-сервер.
Моя цель - перезаписать clean_url в nginx и исправить правила boost и image_cache.
Пожалуйста помоги! Я знаю, что что-то не так с моей текущей конфигурацией nginx. На это был вырезан целый день.
Вот nginx.conf (сейчас работает только / route):
user www www; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx-access.log main; reset_timedout_connection on; sendfile on; aio sendfile; tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; upstream backend { # Apache server server 77.72.19.19:81; } server { listen 77.72.19.19:80 default accept_filter=httpready; server_name 77.72.19.19; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; gzip on; gzip_static on; gzip_proxied any; gzip_types text/plain text/html text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript; set $myroot /usr/local/www/apache22/data/alfa; root $myroot; location ~ ^\. { deny all; } set $boost ""; set $boost_query "_"; if ( $request_method = GET ) { set $boost G; } if ($http_cookie !~ "DRUPAL_UID") { set $boost "${boost}D"; } if ($query_string = "") { set $boost "${boost}Q"; } if ( -f $myroot/cache/normal/$http_host$request_uri$boost_query$query_string.html ) { set $boost "${boost}F"; } if ($boost = GDQF){ rewrite ^.*$ /cache/normal/$http_host/$request_uri$boost_query$query_string.html break; } if ( -f $myroot/cache/perm/$http_host$request_uri$boost_query$query_string.css ) { set $boost "${boost}F"; } if ($boost = GDQF){ rewrite ^.*$ /cache/perm/$http_host/$request_uri$boost_query$query_string.css break; } if ( -f $myroot/cache/perm/$http_host$request_uri$boost_query$query_string.js ) { set $boost "${boost}F"; } if ($boost = GDQF){ rewrite ^.*$ /cache/perm/$http_host/$request_uri$boost_query$query_string.js break; } location ~ ^/sites/.*/files/imagecache/ { #try_files $uri @rewrite; error_page 404 = /; } location ~* \.(txt|jpg|jpeg|css|js|gif|png|bmp|flv|pdf|ps|doc|mp3|wmv|wma|wav|ogg|mpg|mpeg|mpg4|htm|zip|bz2|rar|xls|docx|avi|djvu|mp4|rtf|ico)$ { expires max; add_header Vary Accept-Encoding; if (-f $request_filename) { break; } if (!-f $request_filename) { proxy_pass "http://backend"; break; } } location ~* \.(html(.gz)?|xml)$ { add_header Cache-Control no-cache,no-store,must-validate; root $myroot; if (-f $request_filename) { break; } if (!-f $request_filename) { proxy_pass "http://backend"; break; } } if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; break; } location / { proxy_pass http://backend; } } }
UPD: С этим nginx.conf у меня работает /. И любая другая страница дает мне: «Страница не перенаправляется должным образом». Кто может объяснить мне порядок, в котором оцениваются правила местоположения? И если это «обрыв» - когда nginx встречает эту строчку, что он делает дальше. Я действительно перепробовал около 20 образцов конфигурации nginx. Мне не нужна еще одна ссылка, я бы предпочел ответы кого-то, кто действительно понимает, что происходит в nginx.conf.
UPD2: Если заменю
if (!-e $request_filename) { rewrite ^/(.*)$ /index.php?q=$1 last; break; }
с участием:
try_files $uri $uri/ @drupal; location @drupal { rewrite ^ /index.php?q=$uri last; # for Drupal 6 }
Затем все некорневые страницы дают мне 404 «Запрошенный URL не найден на этом сервере».