Unix 系统下的 Nginx 1.4.x
本文档包括使用 PHP-FPM 为 Nginx 1.4.x HTTP 服务器安装和配置 PHP 的说明和提示。
本指南假定您已经从源代码成功构建 Nginx,并且其二进制文件和配置文件都位于 /usr/local/nginx。
如果您使用其他方式获取的 Nginx,请参考 » Nginx Wiki 并对照本文档完成安装。
本文档仅包含 Nginx 服务器的基本配置,它将通过 80 端口提供 PHP 应用的处理能力。
如果您需要超出本文档范围的安装配置指导,建议您查阅 Nginx 和 PHP-FPM 的文档。
需要注意的是,本文档一律使用 'x' 来表示版本号,请根据实际情况将 'x' 替换为对应的版本号。
-
建议您访问 Nginx Wiki
» 安装 页面以获取并在您的系统上安装 Nginx。
-
获取并解压 PHP 源代码:
-
配置并构建 PHP。在此步骤您可以使用很多选项自定义 PHP,例如启用某些扩展等。
运行 ./configure --help 命令来获得完整的可用选项清单。
在本示例中,我们仅进行包含 PHP-FPM 和 MySQL 支持的简单配置。
-
创建配置文件,并将其复制到正确的位置。
-
需要着重提醒的是,如果文件不存在,则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块,
以避免遭受恶意脚本注入的攻击。
将 php.ini 文件中的配置项
cgi.fix_pathinfo
设置为 0 。
打开 php.ini:
定位到 cgi.fix_pathinfo= 并将其修改为如下所示:
-
在启动服务之前,需要修改 php-fpm.conf 配置文件,确保 php-fpm 模块使用
www-data 用户和 www-data 用户组的身份运行。
找到以下内容并修改:
然后启动 php-fpm 服务:
本文档未涵盖对 php-fpm 进行进一步配置的信息,如果您需要更多信息,请查阅相关文档。
-
配置 Nginx 使其支持 PHP 应用:
修改默认的 location 块,使其支持 .php 文件:
下一步配置来保证对于 .php 文件的请求将被传送到后端的 PHP-FPM 模块,
取消默认的 PHP 配置块的注释,并修改为下面的内容:
重启 Nginx。
-
创建测试文件。
打开浏览器,访问 http://localhost,将会显示 phpinfo() 。
通过以上步骤的配置,Nginx 服务器现在可以以 SAPI 模块的方式支持 PHP 应用了。
当然,对于 Nginx 和 PHP 的配置,还有很多可用的选项,
请在对应的源代码目录执行 ./configure --help 来查阅更多配置选项。
User Contributed Notes
Lenny
21-Feb-2016 11:40
Building from source is not easy if something is a bit different, and I had a hard time with some directory and configuration options. I was floundering around the web until I found this site that translated from Chinese. No one else had the solution. I couldn't get php fpm to start until I changed the directory (Item 2.ERROR: Unable to globalize). I had other issues listed but I was able to solve them. Please don't delete this, it is very useful info.
The original site (it is in Chinese, not my site, but I want to give credit):
(there is some more there, you can goto the site)
blog.dream1987.top/?paged=2
Installation problems:
1. configure: error:. Xml2-config not found Please check your libxml2 installation.
solution:
apt-get install libxml2-dev
2.Warning: Declaration of PEAR_Installer :: download () should be compatible with & PEAR_Downloader :: download ($ params) in phar: ///root/php-7.0.0alpha1/pear/install-pear-nozlib.phar/PEAR /Installer.php on line 43
Warning: Declaration of PEAR_PackageFile_Parser_v2 :: parse () should be compatible with PEAR_XMLParser :: parse ($ data) in phar: ///root/php-7.0.0alpha1/pear/install-pear-nozlib.phar/PEAR/PackageFile/ Parser / v2.php on line 113
[PEAR] Archive_Tar - already installed: 1.3.13
[PEAR] Console_Getopt - already installed: 1.3.1
[PEAR] Structures_Graph- already installed: 1.0.4
Warning: Declaration of PEAR_Task_Replace :: init () should be compatible with PEAR_Task_Common :: init ($ xml, $ fileAttributes, $ lastVersion) in phar: ///root/php-7.0.0alpha1/pear/install-pear-nozlib. phar / PEAR / Task / Replace.php on line 31
[PEAR] XML_Util - already installed: 1.2.3
Warning: Declaration of PEAR_Task_Windowseol :: init () should be compatible with PEAR_Task_Common :: init ($ xml, $ fileAttributes, $ lastVersion) in phar: ///root/php-7.0.0alpha1/pear/install-pear-nozlib. phar / PEAR / Task / Windowseol.php on line 76
Warning: Declaration of PEAR_Task_Unixeol :: init () should be compatible with PEAR_Task_Common :: init ($ xml, $ fileAttributes, $ lastVersion) in phar: ///root/php-7.0.0alpha1/pear/install-pear-nozlib. phar / PEAR / Task / Unixeol.php on line 76
[PEAR] PEAR - already installed: 1.9.5
solution:
Workaround not found (http://pear.php.net/bugs/bug.php?id=20554)
3. Start php-fpm
1.ERROR: failed to open configuration file '/usr/local/etc/php-fpm.conf': No such file or directory (2)
ERROR: failed to load configuration file '/usr/local/etc/php-fpm.conf'
ERROR: FPM initialization failed
solution:
Php-fpm.conf copy files from the source file to that location.
cp /root/php-7.0.0alpha1/sapi/fpm/php-fpm.conf /usr/local/etc/php-fpm.conf
2.ERROR: Unable to globalize '/usr/local/NONE/etc/php-fpm.d/*.conf' (ret = 2) from /usr/local/etc/php-fpm.conf at line 125.
ERROR: failed to load configuration file '/usr/local/etc/php-fpm.conf'
ERROR: FPM initialization failed
solution:
Edit /usr/local/etc/php-fpm.conf document introduced * .conf part, change to the correct path include = / usr / local / etc / php-fpm.d / *. Conf
If there is no /usr/local/etc/php-fpm.d directory, create the directory.
3.WARNING: Nothing matches the include pattern '/usr/local/etc/php-fpm.d/*.conf' from /usr/local/etc/php-fpm.conf at line 125.
ERROR:. No pool defined at least one pool section must be specified in config file
ERROR: failed to post process the configuration
ERROR: FPM initialization failed
solution:
cp www.conf.default www.conf
4.ERROR: [pool www] can not get gid for group 'nobody'
ERROR: FPM initialization failed
solution:
Www.conf open files, user and group users into nginx default settings, usually the default is www-data.
Akash Kumar Sharma
20-Dec-2015 05:48
If you get "File not found" error then add "root ROOT_DIR_LOCATION" directive to PHP location block i.e. "location ~* \.php$ { }" , where ROOT_DIR_LOCATION is root directory like "/usr/share/nginx/html" .
nguyentienlong88 at gmail dot com
02-Dec-2015 04:38
at step 3, if there is no configure script yet, you need to rebuiding configure script using this command:
./buildconf --force