Intereting Posts
Коллекция Laravel .each () + array_push Сравнить два массива и сортировать WRT USD Условный автоответчик – Контактная форма 7 Рекурсивно объединить подобные индексы страшный «Warning: imagecreatefromjpeg (): '/ tmp / filename' не является допустимым файлом JPEG в /phpfile.php в строке xxx" Как просматривать изображения локальной сети с удаленного интерфейса при использовании <img src = "" />? Часто изменяются переменные PHP $ _SSIONSION? PHP-цикл: добавьте div вокруг каждого трех элементов синтаксиса PHP – конвертировать миллисекунды в часы: минуты: секунды. Doctrine 2: невозможно обновить DateTime coloumn на SQL Server 2008apm Отображение изображений в подкатегориях в opencart Не удалось получить доступ к сообщению об ошибке, соответствующему имени вашего поля PHP – лучшая практика для передачи переменных для включения файлов Загрузите Joomla 3.x Framework и модули во внешний файл PHP Подчеркивать текст, используя imagettftext

Конфигурация nginx с несколькими блоками местоположения

Я пытаюсь настроить nginx для обслуживания двух разных php-скриптов из двух разных мест. Конфигурация выглядит следующим образом.

  1. У меня есть установка Laravel, которая находится в /home/hamed/laravel в которой должен обслуживаться ее /home/hamed/laravel каталог.
  2. У меня есть установка WordPress в /home/hamed/www/blog .

И это моя конфигурация nginx :

 server { listen 443 ssl; server_name example.com www.example.com; #root /home/hamed/laravel/public; index index.html index.htm index.php; ssl_certificate /root/hamed/ssl.crt; ssl_certificate_key /root/hamed/ssl.key; location /blog { root /home/hamed/www/blog; try_files $uri $uri/ /blog/index.php?do=$request_uri; } location / { root /home/hamed/laravel/public; try_files $uri $uri/ /index.php?$request_uri; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/var/run/php5-fpm.hamed.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } 

Проблема в том, что при попытке доступа к разделу wordpress, вызывая example.com/blog все же установка laravel берет на себя этот запрос.

Теперь я попытался заменить root директиву внутри блоков location alias безрезультатно.

Согласно этому руководству, имеющему директиву index или try_files внутри location запускается внутренняя перенаправка, которая, как я подозреваю, вызывает это поведение.

Кто-нибудь, пожалуйста, помогите мне понять это?

Solutions Collecting From Web of "Конфигурация nginx с несколькими блоками местоположения"

Проблема в том, что location ~ \.php$ { ... } отвечает за обработку всех ваших php-скриптов, которые разделены на два разных корня.

Один из подходов состоит в том, чтобы использовать общий root для контейнера server и выполнять внутренние перезаписи в каждом блоке местоположения префикса. Что-то вроде:

 location /blog { rewrite ^(.*\.php)$ /www$1 last; ... } location / { rewrite ^(.*\.php)$ /laravel/public$1 last; ... } location ~ \.php$ { internal; root /home/hamed; ... } 

Вышеупомянутое должно работать (но я не тестировал его со своим сценарием).

Второй подход – использовать вложенные блоки местоположения. Блок location ~ \.php$ { ... } затем реплицируется в блок местоположения каждого приложения. Что-то вроде:

 location /blog { root /home/hamed/www; ... location ~ \.php$ { ... } } location / { root /home/hamed/laravel/public; ... location ~ \.php$ { ... } } 

Теперь, когда он был протестирован для работы.

Благодаря @RichardSmith мне удалось создать правильную конфигурацию. Вот окончательная рабочая конфигурация. Мне пришлось использовать комбинацию вложенных блоков location и обратное регулярное выражение для его работы.

 server { listen 443 ssl; server_name example.com; root /home/hamed/laravel/public; # index index.html index.htm index.php; ssl_certificate /root/hamed/ssl.crt; ssl_certificate_key /root/hamed/ssl.key; location ~ ^/blog(.*)$ { index index.php; root /home/hamed/www/; try_files $uri $uri/ /blog/index.php?do=$request_uri; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/var/run/php5-fpm.hamed.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } location ~ ^((?!\/blog).)*$ { #this regex is to match anything but `/blog` index index.php; root /home/hamed/laravel/public; try_files $uri $uri/ /index.php?$request_uri; location ~ \.php$ { try_files $uri =404; fastcgi_split_path_info ^(.+\.php)(/.+)$; #fastcgi_pass 127.0.0.1:9000; fastcgi_pass unix:/var/run/php5-fpm.hamed.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } }