在 AWS 上设置 nginx、django 和 php

在 AWS 上设置 nginx、django 和 php

我正在尝试在 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.ownerlist.group以及和usergroup来更改 php-fpm 配置nobodyec2-user或者nginx但仍然得到相同的 404。

我已经尝试过该参数 fastcgi_param SCRIPT_FILENAME ... ,但由于我不确定这里到底应该是什么,所以我将其删除了。我想现在我们使用文件中的默认值fastcgi_paramfastcgi_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_indexfastcgi_param声明include,否则你的指令可能会被默默覆盖。

相关内容