首先:我不是配置方面的专家。这对我来说很新,所以我提前道歉。
在工作中,我们有一台 Centos 服务器。之前在这里工作的人安装了 nginx。我们需要创建一个 php 网站,因此,显然,我需要设置 php 并使其与 nginx 一起工作。
长话短说,我不得不用新的 nginx 二进制文件替换它(因为旧版本没有 fast-cgi 编译),并且我不得不重新编译和安装 php(因为新版本有 fpm)。然后我费了好大劲才弄好配置文件,制作了这个 nginx.conf(不是所有文件)
user php;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
并取消注释 php-fpm 中的某些参数(这里要详细说明,但重要的是组和用户是“php”)
我从来没能按照书中的说明启动 php-fpm
sudo /usr/sbin/php-fpm start
但在网上查了一下,我发现了这个
sudo /usr/local/sbin/php-fpm --fpm-config=/usr/local/etc/php-fpm.conf
我认为这是有效的
我重启了 nginx。但是...php 什么都没发生...我对 php 文件的调用(通过 Firefox)甚至没有出现在日志中(/opt/nginx/logs/error.log)
我真的真的很累,很迷茫...有人能帮帮我吗,拜托.... :(
提前致谢
答案1
首先检查 php-fpm 是否在监听 9000 端口:netstat -an | grep LISTEN | grep 9000 如果它返回类似以下内容:tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 然后 php-fpm 就可以正常工作了,你应该检查你的 nginx 配置。例如,检查你是否定义了正确的 server_name。它应该与你在浏览器中输入的相同。如果你使用 localhost 以外的其他 URL,请确保这些 URL 具有正确的 DNS 记录。我的 php-fpm 配置是:
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/somesite/htdocs$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT /var/www/somesite/htdocs;
include /etc/nginx/fastcgi_params;
}
此配置适用于我的许多站点。
答案2
我认为 php-fpm 和 fastcgi 是集成 nginx 和 PHP 的两种不同方式。我认为您需要使用其中一种方法。本 CentOS 指南应该可以让您大致了解使用 fastcgi 的方法。http://library.linode.com/web-servers/nginx/php-fastcgi/centos-5
我成功地按照他们图书馆中的一篇类似文章在 Ubuntu 上设置了 Nginx/fastcgi/PHP。
答案3
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
#NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass localhost:9000;
}
这对我在 nginx 0.8.54 上有效。“fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;”可能是您唯一需要更改的内容。它使用服务器配置中的“root /var/www/example.com/yoursite”指令。过去我曾遇到过它向我抛出错误,但只提供了一个白页。您通常可以在 /var/log/nginx/error.log 中看到错误。另外,您是否将 php-fpm 设置为在 TCP 端口或套接字上运行?检查您的 php-fpm.conf,我认为它默认为 TCP 端口 9000。 这个 nginx.org 页面为各种开源网络应用程序(wordpress、drupal 等)提供了一大堆默认配置。