У меня есть два проекта с разными путями, которые необходимо настроить в одном домене с отдельными восходящими PHP 7.1 и HHVM. Я пытаюсь достичь цели с помощью директивы псевдонима nginx, но она отображает 403 Forbidden в моем указанном месте. Корень по умолчанию, предоставленный внутри сервера, отлично работает.
server {
listen 80;
listen [::]:80;
server_name site.local;
root /srv/project1;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
#This renders a 403 forbidden
location ~ /catalog/category/view/id {
alias /srv/project2/public;
index index.laravel.php;
if (!-e $request_filename) { rewrite ^ index.laravel.php last; }
location ~ \.laravel\.php$ {
if (!-f $request_filename) { return 404; }
include fastcgi_params;
fastcgi_pass php-upstream;
fastcgi_index index.laravel.php;
fastcgi_param SCRIPT_FILENAME $document_root$request_filename;
}
}
location ~ \.php$ {
try_files $uri /index.php =404;
fastcgi_pass hhvm-upstream;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
HHVM Upstream Когда я пробую site.local, восходящий поток hhvm работает нормально, и страница успешно отображается.
PHP Upstream Когда я пытаюсь http: //site.local/catalog/category/view/id/11 Я получаю 403 запрещенную ошибку и вижу это в журнале ошибок nginx
> site_openresty | 2018/05/21 11:34:43 [error] 6#6: *1 directory index
> of "/srv/project2/public" is forbidden, client: 172.19.0.1, server:
> site.local, request: "GET /catalog/category/view/id/11/??? HTTP/1.1",
> host: "site.local"
Я пробовал это в течение 3 дней и пробовал разные решения, представленные на Stackoverflow, github и serverfault, но, похоже, ни одно из них не решает мою проблему.
Возможная причина возникновения этой ошибки заключается в том, что файл index.laravel.php
не существует в каталоге /srv/project2/public
.
Второе, что нужно перепроверить, - это право собственности и разрешение /srv/project2/public
и его содержимое.
Убедитесь, что владельцем этого каталога и файлов в нем является пользователь, запускающий nginx (возможно, www-data или nginx). Режим каталога должен быть 755, а режим файла - 644.
РЕДАКТИРОВАТЬ:
Я пропустил линию fastcgi_param SCRIPT_FILENAME $document_root$request_filename;
в месте, соответствующем /catalog/category/view/id
Вам следует заменить $request_filename
по $fastcgi_script_name
так что вы получите fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
Внутри локации вы можете использовать echo $document_root$fastcgi_script_name;
и echo $document_root$request_filename;
чтобы увидеть разницу между ними.
Не забываем перезагрузить сервис;)