Nginx+Boost 500 ошибка при запросе урлов с параметрами

Главные вкладки

Аватар пользователя Айдар Айдар 16 декабря 2015 в 19:48

Возникает 500 ошибка при попытке настройки boost на сайте - при открытии урлов с параметрами (от поиска вьюс до utm меток метрики), а также при открытии внешних ссылок, которые редиректятся модулем gotwo (ссылка вида /go/233).

Лог ничего не говорит.

Использовал фрагмент конфига нжинса отсюда: http://www.drupal.ru/node/103671

В итоге у меня получился следующий конфиг:

server {
    listen       80;
    server_name  www.site.ru;
    return       301 http://site.ru$request_uri;
}

server {
  listen 80 default_server;
  server_name site.ru;

  root /var/www/html/drupal;
  index index.php index.html index.htm;

  error_page 404 /404.html;
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
      root /usr/share/nginx/html;
  }

  location = /favicon.ico {
    log_not_found off;
    access_log off;
   }

   location = /robots.txt {
     allow all;
     log_not_found off;
     access_log off;
   }

   location ~ \..*/.*\.php$ {
     return 403;
   }

   location ~ ^/sites/.*/private/ {
     return 403;
   }

   location ~ (^|/)\. {
     return 403;
   }

   location [user=rewrite]rewrite[/user] {
     rewrite ^ /index.php;
   }

   location ~ \.php$ {
     fastcgi_split_path_info ^(.+\.php)(/.+)$;
     include fastcgi_params;
     fastcgi_param SCRIPT_FILENAME $request_filename;
     fastcgi_intercept_errors off;
     fastcgi_pass unix:/var/run/php5-fpm.sock;
   }

   location ~ ^/sites/.*/files/styles/ {
     try_files $uri [user=rewrite]rewrite[/user];
   }

   location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
     expires max;
     log_not_found off;
   }
   ##### BOOST #####
        location / {
                #вместо отсылки к друпалу, сперва идем в кеш
                try_files $uri [user=boost]boost[/user];
        }

        #основные правила для Boost
        location [user=boost]boost[/user] {
                #модуль boost выставляет залогиненым юзерам кукис DRUPAL_UID, если находим его, игнорируем кеш
                if ($http_cookie ~ "DRUPAL_UID" ) {
                        return 405;
                }
                                if ($request_method !~ ^(GET|HEAD)$ ) {
                                                return 405;
                                }

                #кешировать результаты отправки форм бесполезно, потому игнорируем кеш, если видим пост запрос.
                if ($request_method = "POST" ) {
                        return 405;
                }

                #в случае 405 кода возврата передаем управление друпалу.
                error_page 405 = [user=drupal]drupal[/user];
                #запрещаем браузеру кеширование
                add_header Expires "Sun, 19 Nov 1978 05:00:00 GMT";
                add_header Cache-Control "no-store, no-cache, must-revalidate, post-check=0, pre-check=0";
                #ищем кеш буста, если его нет, отдаем управление друпалу, GET переменные учитываются(собственно именно эта строчка отличается от того, что можно найти в гугле).
                try_files /cache/normal/$host${uri}_$args.html /cache/$host/0$uri.html /cache/$host/0${uri}/index.html [user=drupal]drupal[/user];
        }
        ##### BOOST END #####
}

Есть какие-то идеи, что вызывает ошибку и как исправить это дело?

Комментарии

Аватар пользователя Айдар Айдар 16 декабря 2015 в 23:03

Спасибо огромное! Работает в итоге такой конфиг:

server {
    listen       80;
    server_name  www.site.ru;
    return       301 http://site.ru$request_uri;
}

server {
  listen 80 default_server;
  server_name site.ru;

  root /var/www/html/drupal;
  index index.php index.html index.htm;

  error_page 404 /404.html;
  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
      root /usr/share/nginx/html;
  }

  location = /favicon.ico {
    log_not_found off;
    access_log off;
   }

   location = /robots.txt {
     allow all;
     log_not_found off;
     access_log off;
   }

   location ~ \..*/.*\.php$ {
     return 403;
   }

   location ~ ^/sites/.*/private/ {
     return 403;
   }

   location ~ (^|/)\. {
     return 403;
   }
   
location / {
    try_files           $uri    @cache;
}

location @cache {
    if ($http_cookie ~ "DRUPAL_UID") { return 405; }
    if ($request_method !~ ^(GET|HEAD)$ ) { return 405; }
    error_page 405 = @drupal;
    add_header Expires "Tue, 22 Sep 1974 08:00:00 GMT";
    add_header Cache-Control "must-revalidate, post-check=0, pre-check=0";
    try_files /cache/normal/$host/${uri}_${args}.html /cache/perm/$host/${uri}_.css /cache/perm/$host/${uri}_.js /cache/$host/0$uri.html /cache/$host/0${uri}/index.html @drupal;
}

location @drupal {
    rewrite ^/(.*)$ /index.php?q=$1;
}

location @rewrite {
    rewrite ^/(.*)$ /index.php?q=$1;
}

location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
    expires max;
    log_not_found off;
}

   location ~ \.php$ {
     fastcgi_split_path_info ^(.+\.php)(/.+)$;
     include fastcgi_params;
     fastcgi_param SCRIPT_FILENAME $request_filename;
     fastcgi_intercept_errors off;
     fastcgi_pass unix:/var/run/php5-fpm.sock;
   }

   location ~ ^/sites/.*/files/styles/ {
     try_files $uri @rewrite;
   }
}

ЗЫ Согласен с предыдущим оратором.

Аватар пользователя Айдар Айдар 10 января 2016 в 23:10

Подскажите, пожалуйста, ещё такой момент: этим код также отключается кеширование браузера? Это обязательно нужно? А то я логику просто не пойму, зачем.