我正在使用 Docker alpine-nginx 创建 PHP 后端应用程序,我需要重定向以/api
运行www/index.php
文件开头的所有请求,因为它是基于 MVC 框架构建的。
Proxy_pass 与 NextJS(React、Node)配合使用,非常适合网站的其余部分
但是 Nginx 下载了我的源代码,而不是将其传递给 FPM。关于该主题的其他问题都无法帮助我,也无法将位置块移到另一个位置之外。
你看到了什么吗?如果我删除嵌套位置,它会运行 PHP-FPM,但会出现错误Primary script unknown" while reading response header from upstream
,试图了解问题出在哪里...
编辑:完整会议在这里
upstream next_app {
# NextJS running app port
server nextapp:3000;
}
upstream php_fpm {
# PHP FPM server URI and port
server phpapp:9000;
}
server {
listen 80 default_server;
server_name _;
server_tokens off;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location /api {
root /var/www;
try_files /www/index.php =404;
include fastcgi_params;
fastcgi_pass php_fpm;
}
# proxy pass for NodeJS app
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
location / {
proxy_pass http://next_app;
}
}
现在它正在影响 PHP-FPM,但告诉我File not found
FPM 没有记录任何内容。Nginx 告诉我FastCGI sent in stderr: "Primary script unknown" while reading response header from upstream
答案1
移除嵌套的location
。
尝试:
location /api {
root /var/www;
try_files /www/index.php =404;
include fastcgi_params;
fastcgi_pass php_fpm;
}
答案2
好的,感谢第一个回答,我对此进行了一些实验。查看了Nginx FASTCGI 注意,第四条建议设置SCRIPT_FILENAME
为高山,似乎不包括
现在它可以工作了,通过这段代码;
location /api {
root /var/www;
try_files /www/index.php =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php_fpm;
}