我需要在一个域(react + symfony)下设置两个项目,这是我的nginx配置:
server {
listen 80;
server_name domain.ltd;
rewrite_log on;
root /var/www/frontend;
access_log /var/log/nginx/project_access.log;
error_log /var/log/nginx/project_error.log;
location / {
index /index.html;
}
location /api/ {
alias /var/www/backend;
try_files $uri /index.php$is_args$args;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
}
}
root /可以正常工作,因此可以使用static index.html,没有任何问题。但是/ api的symfony应用程序在nginx error.log中抛出错误(禁止使用403):
32349 open() "/var/www/frontend/index.php"
由于某种原因别名被忽略,我在做什么错? 预先感谢
答案 0 :(得分:1)
location
和alias
的值都应以/
结尾或都不以/
结尾。 try_files
语句的最后一个参数是URI,因此您需要包含/api/
前缀。
例如:
location /api/ {
alias /var/www/backend/;
try_files $uri /api/index.php$is_args$args;
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param DOCUMENT_ROOT $realpath_root;
internal;
}
}
另外,将try_files
语句添加到avoid passing uncontrolled requests to PHP的嵌套location
块中。 SCRIPT_FILENAME
的正确值为$request_filename
,它可以与root
或alias
一起使用。