我正在尝试在AWS / Linux AMI上为django app和php设置nginx。 Nginx已经被configuration为同时为多个Django应用程序工作,所有的工作正常。
现在我需要包含基于php的第三方解决scheme。 这应该在单独的url/破折号/。
我经历了许多教程和“堆栈”的答案,但没有为我工作。
我已经安装了php和php-fpm。 我在/etc/php-fpm-5.5.d/www.conf修改了configuration文件,并尝试使用socket和TCP / IP:
listen = 127.0.0.1:9000
并且
listen = /var/run/php-fpm.sock
重新启动php-fpm服务后,我检查了套接字是否真的被创build。 然后我相应地修改了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; }
我创build了test.php文件来testingphp,并且将第三方解决scheme放到了/ usr / share / nginx / html /中。 当我尝试访问https:// DOMAIN / dash /时,我得到了404错误(或者如果删除了try_files设置,我得到空白页面)。 但是,当我尝试访问https://DOMAIN/dash/index.php或https://DOMAIN/test.php时 ,浏览器提供了一个文件来下载 – 实际的index.php文件,我期望生成的HTML为了我。 我使用wget获得相同的结果。
service php-fpm status声明php-fpm-5.5 (pid 12345) is running...所以我应该处理php文件。
我已经尝试通过将属性listen.owner和list.group以及user和group更改为nobody , ec2-user或nginx来更改php-fpmconfiguration,但是我仍然获得相同的404。
我已经尝试过参数fastcgi_param SCRIPT_FILENAME ...但是因为我不知道究竟应该在这里我删除它。 我想现在我们使用fastcgi_param文件的默认值: fastcgi_param SCRIPT_NAME $fastcgi_script_name;
如果你看到一些明显的错误或者我忽略了的东西,请告诉我。 如果有任何错误的话,我很抱歉。
您的location需要处理以.php结尾的URI。 如果您的configuration正在下载您的PHP文件,您可能已经正确设置了root 。
在包含的fastcgi_params文件中,许多安装对SCRIPT_NAME都有一个合适的值,但是下面的例子显示了它明确的陈述(以防万一)。
例如:
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语句之后,否则您的指令可能会被默认覆盖。