Unix 系统上的 Nginx 1.4.x

本文档将介绍使用 PHP-FPM 为 Nginx 1.4.x HTTP 服务器安装和配置 PHP。

本指南假设您已从源代码构建 Nginx,因此所有二进制文件和配置文件都位于 /usr/local/nginx。如果情况并非如此,并且您通过其他方式获得了 Nginx,请参考 » Nginx Wiki,以便将本手册转换为您的设置。

本指南将介绍配置 Nginx 服务器以处理 PHP 应用程序并将其在端口 80 上提供服务的步骤,建议您学习 Nginx 和 PHP-FPM 文档,如果您希望超出本文档范围优化您的设置。

请注意,在本文档中,版本号已被替换为“x”,以确保本文档在将来保持正确,请根据需要用相应的版本号替换这些号。

  1. 建议您访问 Nginx Wiki » install 页面以获取并在您的系统上安装 Nginx。

  2. 获取并解压 PHP 源代码

    tar zxf php-x.x.x
    
  3. 配置和构建 PHP。在这里您可以使用各种选项自定义 PHP,例如要启用的扩展。运行 ./configure --help 查看可用的选项列表。在我们的示例中,我们将使用 PHP-FPM 和 MySQLi 支持进行简单的配置。

    cd ../php-x.x.x
    ./configure --enable-fpm --with-mysqli
    make
    sudo make install
    
  4. 获取并将配置文件移动到其正确的位置

    cp php.ini-development /usr/local/php/php.ini
    cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
    cp sapi/fpm/php-fpm /usr/local/bin
    
  5. 重要的是,如果文件不存在,我们要阻止 Nginx 将请求传递到 PHP-FPM 后端,从而防止任意脚本注入。

    我们可以通过在我们的 php.ini 文件中将 cgi.fix_pathinfo 指令设置为 0 来解决此问题。

    加载 php.ini

    vim /usr/local/php/php.ini
    

    找到 cgi.fix_pathinfo= 并将其修改如下

    cgi.fix_pathinfo=0
    
  6. 在我们可以启动服务之前,必须修改 php-fpm.conf 以指定 php-fpm 必须以 www-data 用户和 www-data 组运行

    vim /usr/local/etc/php-fpm.d/www.conf
    

    找到并修改以下内容

    ; Unix user/group of processes
    ; Note: The user is mandatory. If the group is not set, the default user's group
    ;       will be used.
    user = www-data
    group = www-data
    

    现在可以启动 php-fpm 服务

    /usr/local/bin/php-fpm
    

    本指南不会进一步配置 php-fpm,如果您有兴趣进一步配置 php-fpm,请参阅文档。

  7. 现在必须配置 Nginx 以支持处理 PHP 应用程序

    vim /usr/local/nginx/conf/nginx.conf
    

    修改默认位置块以使其知道它必须尝试提供 .php 文件

    location / {
        root   html;
        index  index.php index.html index.htm;
    }

    下一步是确保 .php 文件被传递到 PHP-FPM 后端。在注释的默认 PHP 位置块下方,输入以下内容

    location ~* \.php$ {
        fastcgi_index   index.php;
        fastcgi_pass    127.0.0.1:9000;
        include         fastcgi_params;
        fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
    }

    重新启动 Nginx。

    sudo /usr/local/nginx/sbin/nginx -s stop
    sudo /usr/local/nginx/sbin/nginx
    
  8. 创建一个测试文件

    rm /usr/local/nginx/html/index.html
    echo "<?php phpinfo(); ?>" >> /usr/local/nginx/html/index.php
    

    现在导航到 http://localhost。现在应该显示 phpinfo()。

按照上述步骤,您将拥有一个运行的 Nginx Web 服务器,它支持 PHP 作为 FPM SAPI 模块。当然,Nginx 和 PHP 提供了更多配置选项。有关更多信息,请在相应的源代码树中键入 ./configure --help

添加注释

用户贡献的注释 10 个注释

41
Lenny
8 年前
如果某些事情略有不同,从源代码构建并不容易,我在一些目录和配置选项上遇到了困难。我在网上四处摸索,直到我找到了这个从中文翻译的网站。没有其他人有解决方案。我在将目录更改后(项目 2.ERROR:无法全局化)才能启动 php fpm。我还遇到了其他问题,但我能够解决它们。请不要删除此内容,它非常有用的信息。

原始网站(它使用中文,不是我的网站,但我想要表示感谢)

(那里还有更多内容,您可以访问该网站)

blog.dream1987.top/?paged=2

安装问题

1. configure: error:. 找不到 Xml2-config 请检查您的 libxml2 安装。

解决方案

apt-get install libxml2-dev



2.Warning: PEAR_Installer :: download () 的声明应与 & PEAR_Downloader :: download ($ params) 在 phar 中兼容: ///root/php-7.0.0alpha1/pear/install-pear-nozlib.phar/PEAR /Installer.php 第 43 行

Warning: PEAR_PackageFile_Parser_v2 :: parse () 的声明应与 PEAR_XMLParser :: parse ($ data) 在 phar 中兼容: ///root/php-7.0.0alpha1/pear/install-pear-nozlib.phar/PEAR/PackageFile/ Parser / v2.php 第 113 行
[PEAR] Archive_Tar - 已安装:1.3.13
[PEAR] Console_Getopt - 已安装:1.3.1
[PEAR] Structures_Graph- 已安装:1.0.4

Warning: PEAR_Task_Replace :: init () 的声明应与 PEAR_Task_Common :: init ($ xml, $ fileAttributes, $ lastVersion) 在 phar 中兼容: ///root/php-7.0.0alpha1/pear/install-pear-nozlib. phar / PEAR / Task / Replace.php 第 31 行
[PEAR] XML_Util - 已安装:1.2.3

Warning: PEAR_Task_Windowseol :: init () 的声明应与 PEAR_Task_Common :: init ($ xml, $ fileAttributes, $ lastVersion) 在 phar 中兼容: ///root/php-7.0.0alpha1/pear/install-pear-nozlib. phar / PEAR / Task / Windowseol.php 第 76 行

Warning: PEAR_Task_Unixeol :: init () 的声明应与 PEAR_Task_Common :: init ($ xml, $ fileAttributes, $ lastVersion) 在 phar 中兼容: ///root/php-7.0.0alpha1/pear/install-pear-nozlib. phar / PEAR / Task / Unixeol.php 第 76 行
[PEAR] PEAR - 已安装:1.9.5

解决方案

找不到解决方法 (http://pear.php.net/bugs/bug.php?id=20554)

3. 启动 php-fpm

1.ERROR:无法打开配置文件 '/usr/local/etc/php-fpm.conf':没有此类文件或目录 (2)
ERROR:无法加载配置文件 '/usr/local/etc/php-fpm.conf'
ERROR:FPM 初始化失败

解决方案

将 php-fpm.conf 文件从源文件复制到该位置。

cp /root/php-7.0.0alpha1/sapi/fpm/php-fpm.conf /usr/local/etc/php-fpm.conf

2.ERROR:无法将 '/usr/local/NONE/etc/php-fpm.d/*.conf' 全局化 (ret = 2) 来自 /usr/local/etc/php-fpm.conf 第 125 行。
ERROR:无法加载配置文件 '/usr/local/etc/php-fpm.conf'
ERROR:FPM 初始化失败

解决方案

编辑 /usr/local/etc/php-fpm.conf 文档中介绍的 *.conf 部分,更改为正确的路径 include = / usr / local / etc / php-fpm.d / *. Conf

如果没有 /usr/local/etc/php-fpm.d 目录,则创建该目录。

3.WARNING:没有内容匹配来自 /usr/local/etc/php-fpm.conf 第 125 行的包含模式 '/usr/local/etc/php-fpm.d/*.conf'。
ERROR:. 配置文件中至少要指定一个池部分
ERROR:无法后处理配置
ERROR:FPM 初始化失败

解决方案

cp www.conf.default www.conf

4.ERROR: [pool www] 无法为组 'nobody' 获取 gid
ERROR:FPM 初始化失败

解决方案

打开 www.conf 文件,将用户和组用户更改为 nginx 默认设置,通常默认值为 www-data。
8
uanaoeng at outlook dot com
5 年前
当我运行以下命令来启动 php-fpm 时
/usr/local/bin/php-fpm

我收到了以下错误信息
无法将 '/usr/local/NONE/etc/php-fpm.d/*.conf' 全局化 (ret=2) 来自 /usr/local/etc/php-fpm.conf 第 143 行。

要修复此错误,请执行以下操作
使用文本编辑器将文件 "/usr/local/etc/php-fpm.conf" 中的字符串 "include=NONE/etc/php-fpm.d/*.conf" 更改为 "include=etc/php-fpm.d/*.conf"。

之后,我尝试再次启动 php-fpm 并再次收到错误信息
没有内容匹配来自 /usr/local/etc/php-fpm.conf 第 143 行的包含模式 '/usr/local/etc/php-fpm.d/*.conf'。

要修复此错误,请执行以下操作
cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
9
Leon Nguyen vnlab
3 年前
为了以最快的速度,最少的资源来最大限度地提高服务器性能,我决定从最小的基于 Linux/Unix 的操作系统(我的 Linux 发行版是基于 rpm 的软件包)手动编译 PHP 8。

我的系统已成功由 PHP 8.0.9 驱动 - 启用了 Opcache/JIT 和其他几个 PHP 扩展模块。以下是一些可能为您节省数小时研究时间的经验。

1. 在步骤 (3) - 配置和构建 PHP 之前 - 为了确保不会出现错误,您可以参考我的先决条件库。

sudo dnf install \
gcc gcc-c++ make cmake autoconfig \
zlib zlib-devel pcre pcre-devel \
libxml2-devel libxslt-devel \
bzip2-devel curl-devel libzip-devel\
sqlite-devel \
systemd-devel \
openssl-devel \
libffi-devel \
libpng libpng-devel libwebp libwebp-devel libjpeg libjpeg-devel libXpm libXpm-devel \
freetype-devel \
gmp-devel \
libldb-devel \
libc-client libc-client-devel \
openldap openldap-devel \
oniguruma oniguruma-devel \
net-snmp-devel readline-devel unixODBC-devel \
uw-imap uw-imap-devel uw-imap-static uw-imap-utils \
libicu-devel \
enchant2 enchant2-devel \
gd gd-devel \
libsodium libsodium-devel \
libtidy libtidy-devel

您在执行 ./configure、make && make install 时可能不会收到错误。即使您稍后手动构建 PHP 扩展包。

2. 在步骤 5 - 修改 php.ini 之前 - 您可以通过以下命令双重检查当前 PHP 读取的是哪个 php.ini 文件

php -ini | grep php.ini
# 我的结果。它与教程不同。
Configuration File (php.ini) Path => /usr/local/lib
Loaded Configuration File => /usr/local/lib/php.ini
6
Akash Kumar Sharma
8 年前
如果您收到“文件未找到”错误,请在 PHP 位置块(即“location ~* \.php$ { }”)中添加“root ROOT_DIR_LOCATION”指令,其中 ROOT_DIR_LOCATION 是根目录,例如“/usr/share/nginx/html”。
2
610010559 at qq dot com
4 年前
在 Linux 系统中,如果要将 php-fpm 服务添加到系统服务;这很容易做到,因为 php 提供了相关的 shell 脚本

在 make 和 make install 之后;进入源代码包 sapi/fpm/init.d.php-fpm;在 Linux 系统中键入代码。
cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm

然后您可以使用“php-fpm {start|stop|force-quit|restart|reload|status|configtest}”命令更方便地控制您的 php-fpm 程序。
1
timy.shark
2 年前
感谢您为本教程付出的努力,非常感谢,以下是我的一些笔记,如果能帮到任何人,考虑到 WSL2 容器上的默认安装
注意:composer 是为 Laravel 框架添加的。
这些不应直接复制粘贴,需要选择性地使用,因为某些命令旁边有注释。
另外,我注释了 # 原始编辑器写入的一些默认值,因为它们与我的当前环境不匹配。

sha256sum php-x.x.x.tar.gz => e847745fd66fc8c57fac993a609fefcded93fddccd225f0620a26bb5ae5753c3
tar zxf php-x.x.x
sudo apt install build-essential
sudo apt install -y composer nginx pkgconf libxml2-dev libsqlite3-dev zlib1g-dev
cd php-x.x.x
./configure --enable-fpm --with-mysqli <== 感谢您安装 PHP。
make <== 需要一段时间
sudo make test <== 可选,建议使用
sudo make install <= /usr/local/bin /usr/local/php
sudo cp php.ini-development /usr/local/lib/php.ini
sudo cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
sudo cp sapi/fpm/php-fpm /usr/local/bin
sudo vim /usr/local/php/php.ini <= cgi.fix_pathinfo=0
sudo vim /usr/local/etc/php-fpm.d/www.conf <= user=www-data group=www-data
sudo vim sapi/fpm/php-fpm.conf <= 编辑 include=etc/php-fpm.d/*.conf <- 相对路径
sudo cp sapi/fpm/php-fpm.conf /usr/local/etc
/usr/local/bin/php -v <= $PATH$ 首先使用 /usr/local/bin /usr/local/lib/php.ini
sudo /usr/local/bin/php-fpm <= 启动服务
sudo vim /etc/nginx/sites-available/default <= 编辑 server {} 下面的以下内容
location / {
#root html;
#index index.php index.html index.htm;
}
location ~* \.php$ {
#fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}

*如果根路径不存在,则重启 nginx(root /var/www/html),默认路径是:/usr/share/nginx/html
sudo nginx -t <= 测试 Nginx 配置文件
sudo service nginx reload
sudo service nginx stop
sudo service nginx start <= [OK]

php-fpm 需要在服务中,或者手动终止进程 ps -aux | grep php-fpm ; kill <pid>
2
nguyentienlong88 at gmail dot com
8 年前
在步骤 3 中,执行“sudo make install”命令之后
如果 pear.php.net (https) 存在问题。需要在 Makefile 中更改此行(从 https 更改为 http)
PEAR_INSTALLER_URL = http://pear.php.net/install-pear-nozlib.phar
3
1097625354 at qq dot com
5 年前
cp php/php.ini-development php/lib/php.ini
cp php/etc/php-fpm.conf.default php/etc/php-fpm.conf
cp php/etc/php-fpm.d/www.conf.default php/etc/php-fpm.d/www.conf
0
nguyentienlong88 at gmail dot com
8 年前
在步骤 3 中,如果没有配置脚本,则需要使用以下命令重新构建配置脚本

./buildconf --force
-1
sp at rysmax dot com
6 年前
翻译错误

现在转到 http://localhsot
现在转到 http://localhost

在本节中,介绍了
在本节中,介绍了

禁止 Nginx 发送
禁止 Nginx 发送
To Top