在 Debian 8 上使用 PHP(作为 PHP-FPM)和 MariaDB (LEMP) 安装 Nginx
本教程适用于这些操作系统版本
- Debian 7(喘息)
在此页
- 初步说明
- 更新系统
- 安装 MariaDB(作为 MySQL 的替代品)
- 安装 Nginx
- 安装 PHP
- 配置 nginx
- 在 PHP 中获得 MySQL/MariaDB 支持
- 让 PHP-FPM 使用 TCP 连接(可选)
- 虚拟机映像
- SSH登录
- MariaDB 登录
本教程将向您展示在 Debian 8 上安装 Nginx Web 服务器(PHP-FPM)和 MariaDB 作为 MySQL 的替代品。此设置通常称为 LEMP=Linux + nginx(发音为 \engine x\)+ MySQL + P惠普)。
初步说明
在本教程中,我使用 IP 地址为 192.168.1.100 的主机名 server1.example.com。这些设置可能因您而异,因此您必须在适当的地方替换它们。您应该有一个 Debian 8 服务器,我将使用 Debian minimal 服务器作为本教程的基础系统。
更新系统
建议在开始 Nginx 设置之前更新包列表并安装任何待处理的更新。运行以下命令以安装任何挂起的更新。
apt-get update
apt-get upgrade -y稍后我将使用 nano 编辑器来编辑配置文件。可以使用以下命令安装 Nano:
apt-get -y install nano
安装 MariaDB(作为 MySQL 的替代品)
为了安装 MariaDB,我们运行:
apt-get -y install mariadb-server mariadb-client
系统将要求您提供 MariaDB root 用户的密码 - 此密码对用户 [email 有效,因此我们以后不必手动指定 MariaDB root 密码:
MariaDB \root\ 用户的新密码:<-- yourrootsqlpassword
MariaDB \root\ 用户的新密码:<-- yourrootsqlpassword安装 Nginx
Nginx 可作为 Debian Jessie 的软件包使用,我们可以按如下方式安装它:
apt-get -y install nginx
之后启动 Nginx:
systemctl start nginx.service
在浏览器中输入您的 Web 服务器 IP 地址或主机名(例如 http://192.168.1.100),您应该会看到以下页面:
Debian 8 上的默认 nginx 文档根目录是 /var/www/html。
安装PHP
我们可以通过 PHP-FPM 使 PHP5 在 nginx 中工作(PHP-FPM(FastCGI 进程管理器)是一种替代的 PHP FastCGI 实现,具有一些对任何规模的站点都有用的附加功能,尤其是繁忙的站点)我们安装如下:
apt-get -y install php5-fpm
PHP-FPM 是一个守护进程(带有 systemd 单元文件 php5-fpm.service),它在套接字 /var/run/php5-fpm.sock 上运行 FastCGI 服务器。
配置nginx
nginx的配置在我们现在打开的/etc/nginx/nginx.conf中:
nano /etc/nginx/nginx.conf
配置简单易懂(你可以在这里了解更多信息:http://wiki.nginx.org/NginxFullExample2)
首先将 keepalive_timeout 设置为合理的值,如 2 秒:
[...] keepalive_timeout 2; [...]
虚拟主机在服务器 {} 容器中定义。默认虚拟主机在文件 /etc/nginx/sites-available/default 中定义 - 让我们按如下方式修改它:
nano /etc/nginx/sites-available/default
[...] server {
listen 80 default_server;
listen [::]:80 default_server;
# SSL configuration
#
# listen 443 ssl default_server;
# listen [::]:443 ssl default_server;
#
# Self signed certs generated by the ssl-cert package
# Don't use them in a production server!
#
# include snippets/snakeoil.conf;
root /var/www/html;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html index.php;
server_name _;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
location ~ /\.ht {
deny all;
}
} [...]服务器名称 _;使它成为默认的通用虚拟主机(当然,您也可以在此处指定一个主机名,例如 www.example.com)。
我将 index.php 添加到索引行。根/var/www/html;表示文档根目录是目录/var/www/html。
PHP 的重要部分是 location ~ \.php${} 节。如上所示取消注释以启用它。
现在保存文件并重新加载 Nginx:
systemctl reload nginx.service
接下来打开/etc/php5/fpm/php.ini...
nano /etc/php5/fpm/php.ini
...并设置 cgi.fix_pathinfo=0:
[...] ; cgi.fix_pathinfo provides *real* PATH_INFO/PATH_TRANSLATED support for CGI. PHP's ; previous behaviour was to set PATH_TRANSLATED to SCRIPT_FILENAME, and to not grok ; what PATH_INFO is. For more information on PATH_INFO, see the cgi specs. Setting ; this to 1 will cause PHP CGI to fix its paths to conform to the spec. A setting ; of zero causes PHP to behave as before. Default is 1. You should fix your scripts ; to use SCRIPT_FILENAME rather than PATH_TRANSLATED. ; http://php.net/cgi.fix-pathinfo cgi.fix_pathinfo=0 [...]
重新加载 PHP-FPM:
systemctl reload php5-fpm.service
现在在文档根目录 /var/www/html/ 中创建以下 PHP 文件:
nano /var/www/html/info.php
<?php phpinfo(); ?>
现在我们在浏览器中调用该文件(例如 http://192.168.1.100/info.php):
如您所见,PHP5 正在运行,并且它通过 FPM/FastCGI 运行,如服务器 API 行所示。如果进一步向下滚动,您将看到所有已在 PHP5 中启用的模块。那里没有列出 MySQL,这意味着我们还没有在 PHP 中支持 MariaDB/MySQL。
在 PHP 中获取 MySQL/MariaDB 支持
要在 PHP 中获得 MySQL 支持,我们可以安装 php5-mysqlnd 包。最好安装一些其他 PHP 模块,因为您的应用程序可能需要它们。您可以像这样搜索可用的 PHP 模块:
apt-cache search php5
选择你需要的并像这样安装它们:
apt-get -y install php5-mysqlnd php5-curl php5-gd php5-intl php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-intl php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl
APCu 是一个免费开放的 PHP 操作码缓存器,用于缓存和优化扩展 PHP opcache 的 PHP 中间代码。它取代了 APC 缓存。它类似于其他 PHP 操作码缓存器,例如 eAccelerator 和 Xcache。强烈建议安装其中之一以加速您的 PHP 页面。
APCu 可以按如下方式安装:
apt-get install php5-apcu
现在重新加载 PHP-FPM:
systemctl reload php5-fpm.service
现在在浏览器中重新加载 http://192.168.1.100/info.php 并再次向下滚动到模块部分。你现在应该在那里找到很多新模块,包括 MySQL 模块:
使 PHP-FPM 使用 TCP 连接(可选)
默认情况下,PHP-FPM 正在监听套接字 /var/run/php5-fpm.sock。也可以使 PHP-FPM 使用 TCP 连接。为此,打开 /etc/php5/fpm/pool.d/www.conf...
nano /etc/php5/fpm/pool.d/www.conf
...并使 listen 行如下所示:
[...] ;listen = /var/run/php5-fpm.sock listen = 127.0.0.1:9000 [...]
这将使 PHP-FPM 侦听 IP 127.0.0.1(本地主机)上的端口 9000。确保您使用的端口未在您的系统上使用。
然后重新加载 PHP-FPM:
systemctl reload php5-fpm.service
接下来检查您的 Nginx 配置和所有虚拟主机并更改行 fastcgi_pass unix:/var/run/php5-fpm.sock;到 fastcgi_pass 127.0.0.1:9000;,例如像这样:
nano /etc/nginx/sites-available/default
[...]
location ~ \.php$ {
include snippets/fastcgi-php.conf;
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
} [...]最后,重新加载 Nginx:
systemctl reload nginx.service
虚拟机映像
本教程以 OVA/OVF 格式的虚拟机可供 Howtoforge 订阅者使用。 VM 格式与 VMWare 和 Virtualbox 兼容,可能还有其他一些可以导入此格式的工具。您可以在顶部的右侧菜单中找到下载链接。单击文件名开始下载。
VM 的登录详细信息为:
SSH登录
用户名:root
密码:howtoforge登录
用户名:root
密码:howtoforge请在首次启动后更改密码。
VM 配置为静态 IP 192.168.1.100,可以在文件 /etc/network/interfaces 中更改 IP。
链接
- nginx:http://nginx.net/
- nginx 维基:http://wiki.codemongers.com/Main
- PHP:http://www.php.net/
- PHP-FPM:http://php-fpm.org/
- MariaDB:https://mariadb.org/
- Debian:http://www.debian.org/