我有两个具有不同路径位置的项目,需要在单个域下配置它们,并使用单独的上游 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 上游 当我尝试 site.local 时,hhvm 上游工作正常,并且页面成功呈现。
PHP 上游 当我尝试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 上提供的不同解决方案,但似乎都无法解决我的问题。
答案1
发生该错误的可能原因是该文件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;
来查看两者之间的区别。
不要忘记重新加载服务;)