Как настроить nginx для обработки разных роутов разными fastcgi?

О том, как отрабатывает location прочитал, но почему-то при переходе на sub.site.local/hotels все-равно обрабатывается "location / {}", а не "location /hotels {}", хотя префикс hotels длинее.

Каким образом отправлять запросы на разные php-fpm?

Текущий конфиг:

server {
  listen 80;

  server_name sub.site.local;
  index       index.php;

  client_max_body_size 100M;
  fastcgi_read_timeout 1800;

  location /hotels {
    root        /projects/newsite/public;
    try_files $uri $uri/ /index.php?$query_string;
    add_header X-location newsite;

    include       fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass  cabinet:9000;
  }


  location / {
    root        /projects/oldsite;
    try_files $uri $uri/ /index.php?$query_string;
    add_header X-location oldsite;

    include       fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass  agent:9000;
  }
}
  • Вопрос задан
  • 1420 просмотров
Решения вопроса 1
Flaker
@Flaker Автор вопроса
Решил задачу таким образом:

server {
  listen 80;

  server_name sub.site.local
  root        /projects/oldsite;
  index       index.php;

  client_max_body_size 100M;
  fastcgi_read_timeout 1800;

  location / {
    try_files $uri $uri/ /index.php?$query_string;
  }

  # if (!-d $request_filename) {
  #   rewrite ^/(.+)/$ /$1 permanent;
  # }


  location ~* ^/new/(.+\.(?:gif|jpe?g|png|ico|js|css))$ {
    alias /projects/newsite/public/$1;
    expires       max;
    log_not_found off;
    access_log    off;
  }

  location /new/ {
      alias /projects/newsite/public;
      try_files $uri $uri/ @new;

      location ~* \.php {
        include       fastcgi_params;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /projects/newsite/public/index.php;
        fastcgi_pass  newsite:9000;
      }
  }

  location @new {
    rewrite ^/new/(.*)$ /new/index.php?$1 last; # THIS IS THE IMPORTANT LINE
  }


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

  location ~ \.php$ {
    try_files     $uri =404;
    include       fastcgi_params;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    fastcgi_pass  oldsite:9000;
  }
}


P.S. Забыл про вопрос, поэтому только сейчас опубликовал
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
@nikolayvaganov
Физически каталог /hotels есть ?
Ответ написан
Vovanys
@Vovanys
Стучитесь нетуда
В конфиге:
server_name sub.site.local
А вы лезете site.local/hotels
Ответ написан
@demsi
Советую добавлять access_log в location'ы. Чтобы точно определять на какой location уходит запрос. После правильной настройки главное не забыть их удалить.
Заголовки могуть попадать в кэш, по ним труднее определять.

По этому конфигу при запросе sub.site.local/hotels, nginx должен давать на выполнение в fastcgi файл /projects/newsite/public/hotels/index.php, если он существует.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы