Назад | Перейти на главную страницу

Несколько проектов под одним доменом Nginx

У меня есть два проекта с разными путями, которые необходимо настроить в одном домене с отдельными восходящими 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;чтобы увидеть разницу между ними.

Не забываем перезагрузить сервис;)