我正在尝试在 AWS/Linux AMI 上为 django 应用程序和 php 设置 nginx。Nginx 已配置为同时为多个 django 应用程序工作,并且一切运行正常。
现在我需要包含基于 php 的第三方解决方案。这应该在单独的 URL /dash/ 上工作。
我看过很多教程和“堆栈”答案,但没有一个对我有用。
我已经安装了 php 和 php-fpm。我修改了 /etc/php-fpm-5.5.d/www.conf 中的配置文件,并尝试使用套接字和 TCP/IP:
listen = 127.0.0.1:9000
并且
listen = /var/run/php-fpm.sock
重启php-fpm服务后我检查socket确实已经创建了,然后我根据nginx做了如下修改:
location ~ /dash/$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
我创建了 test.php 文件来测试 php,并将第三方解决方案放在 /usr/share/nginx/html/。当我尝试访问https://域名/dash/我收到 404 错误(或者如果我删除try_files
设置,我会得到空白页)。但是,当我尝试访问https://DOMAIN/dash/index.php或者https://域名/test.php,浏览器会向我提供一个文件供我下载 - 即我期望生成 html 的实际 index.php 文件。我使用 wget 获得了相同的结果。
service php-fpm status
声明php-fpm-5.5 (pid 12345) is running...
所以我认为应该处理 php 文件。
我已经尝试通过更改属性listen.owner
和list.group
以及和user
为group
来更改 php-fpm 配置nobody
,ec2-user
或者nginx
但仍然得到相同的 404。
我已经尝试过该参数
fastcgi_param SCRIPT_FILENAME ...
,但由于我不确定这里到底应该是什么,所以我将其删除了。我想现在我们使用文件中的默认值fastcgi_param
:
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
如果您发现一些明显的错误或我忽略了什么,请告诉我。如果有任何错误的术语,我深表歉意。
答案1
您location
需要处理以 结尾的 URI .php
。如果您的配置正在下载 PHP 文件,则您可能已经root
正确设置了。
SCRIPT_NAME
许多安装在包含的文件中都有合适的值fastcgi_params
,但下面的示例明确显示了它(以防万一)。
例如:
root ...;
location ~ \.php$ {
try_files $uri =404;
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
在这种情况下,不需要fastcgi_split_path_info
和指令。始终将语句fastcgi_index
fastcgi_param
后声明include
,否则你的指令可能会被默默覆盖。