在 Ubuntu 16.04 上使用 PHP-FPM 和 Apache
本教程适用于这些操作系统版本
- Ubuntu 16.04(Xenial Xerus)
- Ubuntu 11.10(Oneiric Ocelot)
在此页
- 1 条初步说明
- 2 安装 MySQL 或 MariaDB
- 2.1 安装MySQL 5.7
- 2.2 安装MariaDB
本教程展示了如何在支持 PHP 7(通过 PHP-FPM)和 MySQL 的 Ubuntu 16.04 服务器上安装 Apache 网络服务器。 PHP-FPM(FastCGI 进程管理器)是一种替代的 PHP FastCGI 实现,具有一些对任何规模的站点都非常有用的附加功能,尤其是繁忙的站点。
1 初步说明
在本教程中,我将使用 IP 地址为 192.168.1.100 的主机名 server1.example.com。这些设置可能因您而异,因此您必须在适当的地方替换它们。
我以 root 权限运行本教程中的所有步骤,因此请确保您以 root 身份登录:
sudo su
2 安装 MySQL 或 MariaDB
Ubuntu 提供了 MySQL 和 MariaDB 包。 MariaDB 是由原始 MySQL 开发人员 Monty Widenius 提供的 MySQL 分支。按照第 2.1 或 2.2 章安装数据库服务器。
2.1 安装MySQL 5.7
首先,我们像这样安装 MySQL 5.7:
apt-get -y install mysql-server mysql-client
系统将要求您提供 MySQL root 用户的密码 - 此密码对用户 [email 有效,因此我们以后不必手动指定 MySQL root 密码:
MySQL \root\ 用户的新密码:<-- yourrootsqlpassword
MySQL \root\ 用户的新密码:<-- yourrootsqlpassword运行 mysql_secure_installation 以保护 MySQL 数据库并禁用对测试数据库的访问。
mysql_secure_installation
你会被问到这些问题:
Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y2.2 安装MariaDB
运行以下命令来安装 MariaDB 服务器和客户端:
apt-get -y install mariadb-server mariadb-client
现在我们为 MariaDB 设置一个 root 密码。
mysql_secure_installation
你会被问到这些问题:
Enter current password for root (enter for none): <-- press enter
Set root password? [Y/n] <-- y
New password: <-- Enter the new MariaDB root password here
Re-enter new password: <-- Repeat the password
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y3 安装阿帕奇
Apache 2.4 作为 Ubuntu 软件包提供。我们需要 apache2 包,我们可以像这样安装它:
apt-get -y install apache2
现在将您的浏览器指向 http://192.168.1.100,您应该会看到 Apache 占位符页面(有效!):
Apache的默认文档根目录在Ubuntu上是/var/www/html,配置文件是/etc/apache2/apache2.conf。其他配置存储在 /etc/apache2 目录的子目录中,例如 /etc/apache2/mods-enabled(用于 Apache 模块)、/etc/apache2/sites-enabled(用于虚拟主机)和 /etc/apache2/conf .d.
4 安装 PHP 7
我们可以通过 PHP-FPM 和我们安装的 Apaches mod_fastcgi 模块使 PHP 7 在 Apache2 中工作,如下所示:
apt-get -y install libapache2-mod-fastcgi php7.0-fpm php7.0
PHP-FPM 是一个守护进程(带有 systemd 单元 php7.0-fpm.service),它在套接字 /var/run/php/php7.0-fpm.sock 上运行 FastCGI 服务器。
接下来,启用以下 Apache 模块...
a2enmod actions fastcgi alias
...并重新启动 Apache:
systemctl restart apache2.service
5 配置阿帕奇
为了使 Apache 与 PHP-FPM 一起工作,我们需要进行以下配置:
<IfModule mod_fastcgi.c> AddHandler php7-fcgi .php Action php7-fcgi /php7-fcgi Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization </IfModule>
你可以把它放在全局 Apache 配置中(所以它对所有虚拟主机都启用),例如 /etc/apache2/conf.d/php7.0-fpm.conf (这个文件不存在,所以你必须创建它) ,或者你可以将它放在每个应该使用 PHP-FPM 的虚拟主机中。我想将 PHP-FPM 与默认虚拟主机一起使用,所以我打开它的虚拟主机配置文件 /etc/apache2/sites-available/000-default.conf。
nano /etc/apache2/sites-available/000-default.conf
... 并将以下部分放在
之间: <Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
<IfModule mod_fastcgi.c> SetHandler php7-fcgi .php Action php7-fcgi /php7-fcgi virtual Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization </IfModule>之后重启 Apache:
systemctl restart apache2.service
现在在文档根目录 /var/www 中创建以下 PHP 文件:
nano /var/www/html/info.php
<?php phpinfo();
现在我们在浏览器中调用该文件(例如 http://192.168.1.100/info.php):
如您所见,PHP 7 正在运行,并且它通过 FPM/FastCGI 运行,如服务器 API 行所示。如果进一步向下滚动,您将看到所有已在 PHP 中启用的模块。那里没有列出 MySQL,这意味着我们还没有在 PHP 中支持 MySQL。
请注意:如果您安装了 PHP 7 apache 模块 (mod_php),这可能会发生,例如当您从 ISP 的 LAMP 服务器设置开始,而不是像我在本教程中那样使用空服务器时,您可能必须禁用 mod_php,如下所示。
a2dismod php7.0
并重新启动apache:
systemctl restart apache2.service
6 在 PHP 7 中获得 MySQL/MariaDB 支持
要在 PHP 中获得 MySQL 支持,我们可以安装 php7.0-mysql 包。最好安装一些其他 PHP 模块,因为您的应用程序可能需要它们。您可以像这样搜索可用的 PHP 模块:
apt-cache search php7.0
选择你需要的并像这样安装它们:
apt-get install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php7.0-imap php7.0-mcrypt php7.0-ps php7.0-pspell php7.0-recode php7.0-snmp php7.0-sqlite php7.0-tidy php7.0-xmlrpc php7.0-xsl
现在重新加载 PHP-FPM:
systemctl reload php7.0-fpm.service
现在在浏览器中重新加载 http://192.168.1.100/info.php 并再次向下滚动到模块部分。你现在应该在那里找到很多新模块,包括 MySQLi 模块:
7 php我的管理员
phpMyAdmin 是一个 Web 界面,您可以通过它管理 MySQL 数据库。安装它是个好主意:
apt-get -y install phpmyadmin
您将看到以下问题:
Web server to reconfigure automatically:<-- apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Press enter之后就可以在http://192.168.1.100/phpmyadmin/下访问phpMyAdmin
8 让 PHP-FPM 使用 TCP 连接(可选)
注意:本章介绍 PHP-FPM over TCP 的配置。我将把它作为配置示例展示,并且可能有您需要的设置,例如当 fastcgi 进程在第二台服务器上运行时,但通常使用套接字会更快。所以你可能想跳过这一章。
默认情况下,PHP-FPM 监听套接字 /var/run/php/php7.0-fpm.sock。也可以使 PHP-FPM 使用 TCP 连接。为此,打开 /etc/php5/fpm/pool.d/www.conf...
nano /etc/php/7.0/fpm/pool.d/www.conf
...并使 listen 行如下所示:
[...] ;listen = /var/run/php/php7.0-fpm.sock listen = 127.0.0.1:9000 [...]
这将使 PHP-FPM 侦听 IP 127.0.0.1(本地主机)上的端口 9000。确保您使用的端口未在您的系统上使用。
然后重新加载 PHP-FPM:
systemctl reload php7.0-fpm.service
接下来检查您的 Apache 配置和所有虚拟主机并将行 FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -socket /var/run/php/php7.0-fpm.sock -pass-header Authorization 更改为 FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -host 127.0.0.1:9000 -pass-header 授权,例如像这样:
nano /etc/apache2/sites-available/000-default.conf
[...] <Directory /usr/lib/cgi-bin>
Require all granted
</Directory>
<IfModule mod_fastcgi.c>
AddHandler php7-fcgi .php
Action php7-fcgi /php7-fcgi virtual
Alias /php7-fcgi /usr/lib/cgi-bin/php7-fcgi
FastCgiExternalServer /usr/lib/cgi-bin/php7-fcgi -host 127.0.0.1:9000 -pass-header Authorization
</IfModule> [...]最后重新加载 Apache:
systemctl reload apache2.service
9个链接
- 阿帕奇:http://httpd.apache.org/
- PHP:http://www.php.net/
- PHP-FPM:http://php-fpm.org/
- MySQL:http://www.mysql.com/
- Ubuntu:http://www.ubuntu.com/
- phpMyAdmin:http://www.phpmyadmin.net/