目录
(四)在 LNMP 平台中部署 Web 应用(以 Discuz! 为例)
一、Nginx 概述
Nginx 是一款轻量级的高性能 Web 服务器、反向代理服务器,同时具备电子邮件(IMAP/POP3)代理服务等功能。因其出色的性能、稳定性以及丰富的模块生态,在现代 Web 架构中应用广泛。相比传统的 Apache 服务器,Nginx 在处理高并发连接时表现更为优异,资源消耗更低,这使得它成为众多大型网站和应用的首选 Web 服务器软件。
二、Nginx 基于授权的访问控制
(一)基于授权的访问控制简介
Nginx 与 Apache 类似,能够实现基于用户授权的访问控制机制。当客户端尝试访问特定网站或目录时,系统会要求用户输入用户名和密码进行身份验证,验证通过后方可正常访问。这一功能在保障网站资源安全性、限制特定用户访问特定内容等场景中发挥着重要作用。其配置步骤大致可概括为以下关键环节:生成用户密码认证文件,此文件用于存储用户名和加密后的密码信息;修改主配置文件中对应目录的配置,添加认证相关配置项;完成配置修改后,重启 Nginx 服务,并进行访问测试,以确保授权访问控制功能正常运行。
(二)基于授权的访问控制步骤
- 使用 htpasswd 生成用户认证文件
- 在开始配置之前,首先需要确保系统中安装了
htpasswd
命令。若系统中不存在该命令,可以通过yum
包管理器安装httpd - tools
软件包,执行命令yum -y install httpd-tools
即可完成安装。 - 使用
htpasswd
命令生成用户认证文件,例如执行htpasswd -c /usr/local/nginx/passwd.db test
。该命令中,-c
参数表示创建一个新的密码文件,/usr/local/nginx/passwd.db
为指定的密码文件路径及名称,test
是创建的用户名。执行命令后,系统会提示输入两次密码,输入完成后,在/usr/local/nginx/
目录下会生成passwd.db
文件,该文件中存储了用户名test
及其对应的加密密码密文。可以使用cat /usr/local/nginx/passwd.db
命令查看文件内容,确认用户信息是否正确生成。
- 在开始配置之前,首先需要确保系统中安装了
- 修改密码文件权限和所有者
- 为了确保密码文件的安全性,需要修改其权限为 400,这样只有文件所有者具有读取权限,执行命令
chmod 400 /usr/local/nginx/passwd.db
。 - 同时,将密码文件的所有者改为 Nginx 的运行用户,一般为
nginx
,执行命令chown nginx /usr/local/nginx/passwd.db
。修改完成后,可以使用ll -d /usr/local/nginx/passwd.db
命令查看文件的权限和所有者信息,确认修改是否成功。
- 为了确保密码文件的安全性,需要修改其权限为 400,这样只有文件所有者具有读取权限,执行命令
- 修改主配置文件 nginx.conf,添加认证配置项
- 使用文本编辑器(如
vim
)打开 Nginx 的主配置文件/usr/local/nginx/conf/nginx.conf
,在server
块中的location
部分添加认证配置项。例如:
- 使用文本编辑器(如
server {
listen 80;
server_name localhost;
#charset koi8 - r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
}
}
- 其中,
auth_basic "secret";
设置了认证提示信息,当客户端访问受保护的资源时,弹出的认证对话框中会显示该提示内容;auth_basic_user_file /usr/local/nginx/passwd.db;
指定了用于验证用户身份的密码文件路径。
- 检测语法、重启服务
- 在修改完配置文件后,为了避免因配置错误导致 Nginx 服务无法正常启动,需要先检测配置文件的语法是否正确。执行命令
nginx -t
,若配置文件语法无误,会提示configuration file /usr/local/nginx/conf/nginx.conf test is successful
;若存在语法错误,根据提示信息修改配置文件,直至语法检测通过。 - 确认配置文件语法正确后,执行命令
systemctl restart nginx
重启 Nginx 服务,使新的配置生效。
- 在修改完配置文件后,为了避免因配置错误导致 Nginx 服务无法正常启动,需要先检测配置文件的语法是否正确。执行命令
- 用浏览器访问网址,检验控制效果
- 在浏览器地址栏中输入 Nginx 服务器的 IP 地址(如
http://192.168.10.101
),此时会弹出一个登录对话框,要求输入用户名和密码。输入之前创建的用户名test
及其对应的密码,若验证通过,则可以正常访问网站内容;若输入错误的用户名或密码,则无法访问,提示访问受限。通过这种方式,可以直观地检验基于授权的访问控制功能是否正常工作。
- 在浏览器地址栏中输入 Nginx 服务器的 IP 地址(如
三、Nginx 基于客户端的访问控制
(一)基于客户端的访问控制简介
基于客户端的访问控制是 Nginx 提供的另一项重要安全功能,它通过对客户端的 IP 地址进行检查和匹配,决定是否允许其访问网站页面。与 Apache 相比,Nginx 基于客户端的访问控制规则更为简洁、易于配置。其核心规则主要包括以下两点:
deny IP/IP段
:用于拒绝指定 IP 地址或 IP 段的客户端访问。例如,deny 192.168.10.3;
表示拒绝 IP 地址为192.168.10.3
的客户端访问网站。allow IP/IP段
:用于允许指定 IP 地址或 IP 段的客户端访问。例如,allow all;
表示允许所有 IP 地址的客户端访问网站。- 访问控制规则按照从上往下的顺序依次执行,当某个客户端的 IP 地址匹配到其中一条规则时,便停止继续匹配后续规则,直接根据匹配结果决定是否允许访问。这一执行顺序在实际配置中需要特别注意,合理安排规则顺序可以确保访问控制策略的准确性和有效性。
(二)基于客户端的访问控制步骤
- 修改主配置文件 nginx.conf,添加相应配置项
- 使用
vim
编辑器打开 Nginx 的主配置文件/usr/local/nginx/conf/nginx.conf
,在location
块中添加基于客户端 IP 地址的访问控制规则。例如:
- 使用
location / {
root html;
index index.html index.htm;
auth_basic "secret";
auth_basic_user_file /usr/local/nginx/passwd.db;
deny 192.168.10.3;
allow all;
}
- 上述配置表示拒绝 IP 地址为
192.168.10.3
的客户端访问,允许其他所有客户端访问。同时,这里还保留了之前基于授权的访问控制配置项,实际应用中可根据需求灵活调整。
- 检测语法、重启服务
- 完成配置文件修改后,执行
nginx -t
命令检测配置文件语法,确保语法正确无误。 - 若语法检测通过,执行
systemctl restart nginx
命令重启 Nginx 服务,使新的访问控制配置生效。
- 完成配置文件修改后,执行
- 测试访问控制效果
- 在不同 IP 地址的客户端上尝试访问 Nginx 服务器。使用 IP 地址为
192.168.10.3
的客户端访问时,会收到访问拒绝的提示;而使用其他 IP 地址的客户端访问时,若之前配置的基于授权的访问控制验证通过,则可以正常访问网站内容。通过这种方式,可以验证基于客户端的访问控制功能是否按照预期工作。
- 在不同 IP 地址的客户端上尝试访问 Nginx 服务器。使用 IP 地址为
四、Nginx 虚拟主机
Nginx 虚拟主机功能允许在同一台服务器、同一组 Nginx 进程上同时运行多个网站,极大地提高了服务器资源的利用率。与 Apache 类似,Nginx 支持多种类型的虚拟主机配置,主要包括基于域名的虚拟主机、基于 IP 的虚拟主机和基于端口的虚拟主机。下面将分别详细介绍这三种类型虚拟主机的配置方法。
(一)基于域名的虚拟主机
- 设置客户端域名解析
- 在客户端的
hosts
文件中添加域名解析记录,将www.benet.com
和www.accp.com
这两个域名都指向 Nginx 服务器的 IP 地址192.168.10.101
。在 Linux 系统中,hosts
文件通常位于/etc/hosts
,使用文本编辑器打开该文件,添加如下内容:
- 在客户端的
192.168.10.101 www.benet.com
192.168.10.101 www.accp.com
- 在 Windows 系统中,
hosts
文件位于C:\Windows\System32\drivers\etc\hosts
,同样添加上述域名解析记录。修改完成后保存文件,这样客户端在访问这两个域名时,会将请求发送到指定的 Nginx 服务器。
- 准备各个网站的目录和测试首页
- 在服务器上创建两个网站对应的目录,执行命令
mkdir -p /var/www/html/benet/
和mkdir -p /var/www/html/accp/
,其中-p
参数用于递归创建目录,确保目录结构完整创建。 - 为每个网站创建测试首页,在
/var/www/html/benet/
目录下创建index.html
文件,执行命令echo "www.benet.com">> /var/www/html/benet/index.html
;在/var/www/html/accp/
目录下创建index.html
文件,执行命令echo "www.accp.com">> /var/www/html/accp/index.html
。这两个文件将作为网站的默认首页内容。
- 在服务器上创建两个网站对应的目录,执行命令
- 修改配置文件
- 使用
vim
编辑器打开 Nginx 的主配置文件/usr/local/nginx/conf/nginx.conf
,在文件中添加两个server
块,分别配置www.benet.com
和www.accp.com
这两个虚拟主机的相关参数。配置内容如下:
- 使用
server {
listen 80;
server_name www.benet.com;
access_log logs/www.benet.com.access.log;
charset utf - 8;
location / {
root /var/www/html/benet;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
server {
listen 80;
server_name www.accp.com;
access_log logs/www.accp.com.access.log;
charset utf - 8;
location / {
root /var/www/html/accp;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
- 在上述配置中,每个
server
块都指定了监听的端口(listen 80
)、域名(server_name
)、访问日志路径(access_log
)、字符集(charset
)等信息。location /
块中指定了网站的根目录(root
)和默认首页(index
)。同时,还配置了错误页面的处理规则,当服务器发生 500、502、503、504 等错误时,会返回相应的错误页面。
- 检测语法、重启服务并测试
- 完成配置文件修改后,执行
nginx -t
命令检测配置文件语法,确保配置文件没有语法错误。 - 若语法检测通过,执行
systemctl restart nginx
命令重启 Nginx 服务,使新的虚拟主机配置生效。 - 在浏览器中分别访问
www.benet.com
和www.accp.com
,若配置正确,将分别显示对应的网站内容,即www.benet.com
网站显示www.benet.com
内容,www.accp.com
网站显示www.accp.com
内容。
- 完成配置文件修改后,执行
(二)基于 IP 的虚拟主机
- 为服务器设置多个 IP 地址
- 可以通过为服务器添加虚拟网卡的方式来设置多个 IP 地址。以 CentOS 系统为例,进入
/etc/sysconfig/network - scripts/
目录,执行命令cp ifcfg - ens33 ifcfg - ens33:0
和cp ifcfg - ens33 ifcfg - ens33:1
,这两条命令分别复制了原网卡配置文件,创建了两个新的虚拟网卡配置文件ifcfg - ens33:0
和ifcfg - ens33:1
。 - 使用
vim
编辑器分别修改这两个虚拟网卡配置文件的内容。对于ifcfg - ens33:0
文件,添加如下内容:
- 可以通过为服务器添加虚拟网卡的方式来设置多个 IP 地址。以 CentOS 系统为例,进入
IPADDR=192.168.10.151
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
NAME=ens33:0
DEVICE=ens33:0
- 对于
ifcfg - ens33:1
文件,添加如下内容:
IPADDR=192.168.10.152
NETMASK=255.255.255.0
GATEWAY=192.168.10.254
DNS1=223.6.6.6
NAME=ens33:1
DEVICE=ens33:1
- 修改完成后保存文件,然后执行
nmcli c reload
命令重新加载网络配置,执行nmcli c up ens33
命令启动网络连接,最后使用ip add
命令查看服务器的 IP 地址,确认新的 IP 地址是否添加成功。
- 修改 Nginx 的配置文件,使基于 IP 的虚拟主机生效
- 使用
vim
编辑器打开 Nginx 的主配置文件/usr/local/nginx/conf/nginx.conf
,在文件中添加两个server
块,分别配置不同 IP 地址对应的虚拟主机。配置内容如下:
- 使用
server {
listen 192.168.10.151:80;
server_name www.benet.com;
}
server {
listen 192.168.10.152:80;
server_name www.accp.com;
}
- 在上述配置中,每个
server
块都指定了监听的 IP 地址和端口(listen
)以及域名(server_name
)。这里的域名可以根据实际需求进行设置,不一定与基于域名的虚拟主机配置中的域名相同。
- 访问两个 IP 网站,测试页面是否生效
- 完成 Nginx 配置文件修改后,执行
systemctl restart nginx
命令重启 Nginx 服务,使新的配置生效。 - 在浏览器中分别访问
192.168.10.151
和192.168.10.152
这两个 IP 地址,若配置正确,将分别显示对应的网站内容。如果之前在相应的网站目录中创建了测试首页,此时将看到对应的测试页面。
- 完成 Nginx 配置文件修改后,执行
(三)基于端口的虚拟主机
- 选择系统中不使用的端口,多个端口映射到同一 IP 地址
- 首先需要选择系统中未被占用的端口用于虚拟主机配置。例如,选择
8080
和8888
端口。使用vim
编辑器打开 Nginx 的主配置文件/usr/local/nginx/conf/nginx.conf
,在文件中添加两个server
块,分别配置不同端口对应的虚拟主机。配置内容如下:
- 首先需要选择系统中未被占用的端口用于虚拟主机配置。例如,选择
server {
listen 192.168.10.101:8080;
server_name www.benet.com;
}
server {
listen 192.168.10.101:8888;
server_name www.accp.com;
}
- 在上述配置中,每个
server
块都指定了监听的 IP 地址和端口(listen
)以及域名(server_name
)。通过这种方式,将不同的端口映射到了同一 IP 地址上,实现了基于端口的虚拟主机配置。
- 检测端口是否运行正常
- 完成配置文件修改后,执行
systemctl restart nginx
命令重启 Nginx 服务,使新的配置生效。 - 使用
netstat -anpt | grep nginx
命令检查 Nginx 服务是否正常监听指定的端口。该命令会列出所有与 Nginx 相关的网络连接信息,通过查看输出结果,确认8080
和8888
端口是否被 Nginx 正常监听。如果端口未被正确监听,可能需要检查配置文件是否存在错误,或者系统中是否有其他进程占用了这些端口。
- 完成配置文件修改后,执行
- 分别访问 2 个端口地址
- 在浏览器中分别访问
http://192.168.10.101:8080
和http://192.168.10.101:8888
这两个端口地址,若配置正确,将分别显示对应的网站内容。同样,如果之前在相应的网站目录中创建了测试首页,此时将看到对应的测试页面。
- 在浏览器中分别访问
五、LNMP 架构部署及应用
随着 Nginx 在企业中的广泛应用,LNMP(Linux随着 Nginx 在企业中的广泛应用,LNMP(Linux、Nginx、MySQL、PHP)架构越来越受到青睐,它为搭建高性能的 Web 应用提供了稳定的技术栈。接下来详细介绍 LNMP 架构的部署过程及相关应用。
(一)编译安装 MySQL 服务
本案例既可以使用 rpm 包安装 MySQL 服务,也可以选择编译安装的方式,编译安装能够根据实际需求进行更细致的定制。
- 安装编译依赖
- 首先安装 autoconf 工具,它用于生成可自动配置软件源代码包的脚本,以适应多种 Unix 类系统。执行命令:
yum install -y autoconf
。 - 接着安装其他必要的依赖包,包括 ncurses-devel、gcc-c++、perl-Module-Install 和 cmake,执行命令:
yum -y install ncurses-devel gcc-c++ perl-Module-Install cmake
。这些依赖包为 MySQL 的编译和安装提供了必要的环境和工具支持。
- 首先安装 autoconf 工具,它用于生成可自动配置软件源代码包的脚本,以适应多种 Unix 类系统。执行命令:
- 解压与编译 MySQL
- 将 MySQL 安装包解压,假设安装包为 mysql-5.6.36.tar.gz,执行命令:
tar -zxvf mysql-5.6.36.tar.gz
,解压后会得到一个名为 mysql-5.6.36 的目录。 - 进入解压后的目录:
cd mysql-5.6.36/
,在该目录下执行 cmake 命令进行配置。通过一系列参数指定安装路径、字符集、校对规则等关键设置,命令如下:
- 将 MySQL 安装包解压,假设安装包为 mysql-5.6.36.tar.gz,执行命令:
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DSYSCONFDIR=/etc
- 配置完成后,执行
make && make install
命令进行编译和安装。这个过程可能会花费一些时间,取决于服务器的性能。编译过程中,系统会根据之前的配置信息将 MySQL 源代码编译成可执行文件,并安装到指定的目录中。
- 配置 MySQL 服务
- 将 MySQL 的配置文件复制到 /etc 目录下,执行命令:
cp support-files/my-default.cnf /etc/my.cnf
,该配置文件包含了 MySQL 的各种默认配置参数,可以根据实际需求进一步修改。 - 把 MySQL 的启动脚本复制到 /etc/init.d/ 目录下,并命名为 mysqld,执行命令:
cp support-files/mysql.server /etc/init.d/mysqld
。 - 为启动脚本添加可执行权限:
chmod +x /etc/rc.d/init.d/mysqld
,使其能够被系统正常调用。 - 使用 chkconfig 工具将 MySQL 服务添加到系统服务管理中,并设置为开机自启,执行命令:
chkconfig --add mysqld
和chkconfig mysqld on
。 - 将 MySQL 的二进制目录添加到系统环境变量中,编辑 /etc/profile 文件,在文件末尾添加:
echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile
,然后执行. /etc/profile
使环境变量生效。这样,在任何目录下都可以直接执行 MySQL 相关的命令。
- 将 MySQL 的配置文件复制到 /etc 目录下,执行命令:
- 初始化数据库
- 创建一个名为 mysql 的用户组:
groupadd mysql
。 - 创建一个属于 mysql 用户组的系统用户 mysql,且该用户不允许登录系统,执行命令:
useradd -M -s /sbin/nologin mysql -g mysql
,其中-M
表示不创建用户主目录,-s /sbin/nologin
指定用户的登录 shell 为 /sbin/nologin,禁止用户通过 ssh 等方式登录系统。 - 更改 MySQL 安装目录的所有者和所属组为 mysql,执行命令:
chown -R mysql.mysql /usr/local/mysql
,确保 mysql 用户对 MySQL 相关文件有正确的读写权限。 - 执行数据库初始化脚本,指定安装目录、数据目录和运行用户,命令如下:
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql
。初始化过程中,系统会创建 MySQL 的系统数据库、表结构以及初始用户等信息。
- 创建一个名为 mysql 的用户组:
- 启动 MySQL 并设置密码
- 启动 MySQL 服务:
systemctl start mysqld
。 - 使用 mysqladmin 命令为 root 用户设置密码,假设密码为123.com,执行命令:
mysqladmin -u root password '123.com'
。设置密码后,后续登录 MySQL 时需要使用该密码进行身份验证。
- 启动 MySQL 服务:
(二)安装 PHP 解析环境
- 安装编译依赖
- 安装 GD 库、libxml2-devel、libjpeg-devel 和 libpng-devel 等依赖包,这些包为 PHP 处理图形、解析 XML、处理 JPEG 和 PNG 图像提供了支持,执行命令:
yum -y install gd libxml2-devel libjpeg-devel libpng-devel
。 - 对各依赖包的功能简要说明:
- libxml2-devel:libxml 是用于解析 XML 文档的函数库,PHP 在处理 XML 数据时会用到它。
- libjpeg-devel:这是一个用 C 语言编写的库,实现了 JPEG 解码、编码等功能,使得 PHP 能够处理 JPEG 格式的图像。
- libpng-devel:一套免费的开源程序库,支持对 PNG 图形文件的创建、读写等操作,方便 PHP 处理 PNG 图像。
- GD(Graphic Device):PHP 的 GD 库是专门用于处理图形的扩展库,通过一系列 API 可以对图像进行处理,如裁剪、缩放、添加文字等,还能直接生成新的图片。
- 安装 GD 库、libxml2-devel、libjpeg-devel 和 libpng-devel 等依赖包,这些包为 PHP 处理图形、解析 XML、处理 JPEG 和 PNG 图像提供了支持,执行命令:
- 解压与编译 PHP
- 解压 PHP 安装包,假设安装包为 php-5.5.38.tar.gz,执行命令:
tar -zxvf php-5.5.38.tar.gz
。 - 根据 MySQL 的安装方式,选择不同的 configure 参数进行配置。
- 如果 MySQL 是用源码包安装的,进入解压后的 PHP 目录:
cd php-5.5.38/
,执行配置命令:
- 如果 MySQL 是用源码包安装的,进入解压后的 PHP 目录:
- 解压 PHP 安装包,假设安装包为 php-5.5.38.tar.gz,执行命令:
./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring \
--enable-fpm \
--with-jpeg-dir=/usr/lib
- 如果 MySQL 是用 yum 安装的,执行配置命令:
./configure \
--prefix=/usr/local/php5 \
--with-gd \
--with-zlib \
--with-mysql=mysqlnd \
--with-mysqli=mysqlnd \
--with-config-file-path=/usr/local/php5 \
--enable-mbstring \
--enable-fpm \
--with-jpeg-dir=/usr/lib
- 注意事项:
--with-mysqli=mysqlnd
这种方式需要用 IP 地址的方式连接数据库,适用于 PHP 和 MySQL 安装在同一服务器或不同服务器的情况。使用 127.0.0.1 本地连接时不需要额外授权,但使用 192.168.10.101 等其他 IP 连接本地数据库时需要授权。--with-mysqli=/usr/bin/mysql_config
这种方式只能用localhost连接数据库,仅适用于 PHP 和 MySQL 安装在同一服务器上的场景。
- 配置完成后,执行
make && make install
命令进行编译和安装。
- 安装后调整
- 将 PHP 的配置文件模板复制为正式的配置文件,执行命令:
cp php.ini-development /usr/local/php5/php.ini
,可以根据实际需求进一步修改该配置文件中的参数。 - 创建软链接,方便在系统中全局使用 PHP 命令,执行命令:
ln -s /usr/local/php5/bin/ /usr/local/bin/
和ln -s /usr/local/php5/sbin/ /usr/local/sbin/
。
- 将 PHP 的配置文件模板复制为正式的配置文件,执行命令:
- 安装 ZendGuardLoader
- 解压 ZendGuardLoader 安装包,假设安装包为 zend-loader-php5.5-linux-x86_64_update1.tar.gz,执行命令:
tar -zxvf zend-loader-php5.5-linux-x86_64_update1.tar.gz
。 - 进入解压后的目录:
cd zend-loader-php5.5-linux-x86_64/
,将 ZendGuardLoader.so 文件复制到 PHP 的扩展目录下,执行命令:cp ZendGuardLoader.so /usr/local/php5/lib/php/
。 - 编辑 PHP 的配置文件 /usr/local/php5/php.ini,添加以下内容:
- 解压 ZendGuardLoader 安装包,假设安装包为 zend-loader-php5.5-linux-x86_64_update1.tar.gz,执行命令:
zend_extension=/usr/local/php5/lib/php/ZendGuardLoader.so
zend_loader.enable=1
这两行配置启用了 ZendGuardLoader 扩展,使得 PHP 能够支持相关的加密和优化功能。
(三)配置 Nginx 支持 PHP 环境
- 启用 php-fpm 进程
- 进入 PHP 的配置目录:
cd /usr/local/php5/etc/
。 - 复制 php-fpm 配置文件的默认模板为正式配置文件:
cp php-fpm.conf.default php-fpm.conf
。 - 创建一个用于运行 php-fpm 进程的系统用户 php,执行命令:
useradd -M -s /sbin/nologin php
。 - 编辑 php-fpm.conf 文件,设置一些关键参数,如:
- 进入 PHP 的配置目录:
pid = run/php-fpm.pid
user = php
group = php
pm.max_children = 50 # 最多子进程数
pm.start_servers = 20 # 启动时开启的进程数
pm.min_spare_servers = 5 # 最少空闲进程数
pm.max_spare_servers = 35 # 最多空闲进程数
- 启动 php-fpm 进程:
/usr/local/sbin/php-fpm
,使用netstat -anpt | grep php-fpm
命令检查 php-fpm 进程是否正常启动并监听相应端口。 - 创建一个 systemd 服务单元文件,用于管理 php-fpm 进程的启动、停止和重启等操作。编辑 /lib/systemd/system/php-fpm.service 文件,添加以下内容:
[Unit]
Description=The PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php5/php-fpm.pid
ExecStart=/usr/local/php5/sbin/php-fpm --nodaemonize --pm-config /usr/local/php5/etc/php-fpm.conf
ExecReload=/bin/kill -USR2 $MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
- 重新加载 systemd 配置:
systemctl daemon-reload
,然后启动 php-fpm 服务:systemctl start php-fpm
,这样可以通过 systemctl 命令更方便地管理 php-fpm 服务。
- 配置 Nginx 支持 PHP 解析
- 编辑 Nginx 的主配置文件 /usr/local/nginx/conf/nginx.conf,在 server 块中添加对 PHP 解析的支持。假设网站域名为www.bt.com,配置如下:
server {
listen 80;
server_name www.bt.com;
location / {
root /var/www/html;
index index.html index.htm index.php;
}
location ~ \.php$ {
root /var/www/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi.conf;
}
}
- 上述配置中,
location ~ \.php$
表示匹配所有以.php 结尾的请求。fastcgi_pass 127.0.0.1:9000
指定了将 PHP 请求转发到本地的 php-fpm 进程监听的端口 9000。fastcgi_index index.php
设置了默认的 PHP 索引文件为 index.php,include fastcgi.conf
包含了 FastCGI 相关的配置参数。
- PHP 页面访问测试
- 创建网站根目录:
mkdir -p /var/www/html/
。 - 创建两个测试 PHP 文件。编辑 /var/www/html/test1.php 文件,添加如下内容:
- 创建网站根目录:
<?php
phpinfo();
?>
该文件用于查看 PHP 的配置信息。
- 编辑 /var/www/html/test2.php 文件,添加如下内容:
<?php
$link = mysqli_connect('127.0.0.1', 'root', 'pwd123');
if ($link) {
echo "<h1>恭喜你,数据库连接成功啦!!!</h1>";
}
mysqli_close($link);
?>
该文件用于测试 PHP 与 MySQL 的数据库连接。在浏览器中分别访问这两个测试文件对应的 URL(如http://www.bt.com/test1.php和http://www.bt.com/test2.php),检查 PHP 环境是否正常工作以及数据库连接是否成功。
(四)在 LNMP 平台中部署 Web 应用(以 Discuz! 为例)
- 下载并部署程序代码
- 安装 unzip 工具,用于解压 Discuz! 的安装包,执行命令:
yum -y install unzip
。 - 解压 Discuz! 安装包,假设安装包为 Discuz_X3.3_SC_UTF8.zip,执行命令:
unzip Discuz_X3.3_SC_UTF8.zip
。 - 创建 Discuz! 的安装目录:
mkdir -p /var/www/html/bbs
。 - 将解压后的安装包中的所有文件移动到创建的目录中:
mv upload/* /var/www/html/bbs
。 - 修改安装目录的所有者和所属组为 php,确保 php-fpm 进程对该目录有读写权限,执行命令:
chown -R php:php /var/www/html/bbs/
。
- 安装 unzip 工具,用于解压 Discuz! 的安装包,执行命令:
- 创建数据库
- 使用 root 用户登录 MySQL:
mysql -uroot -p
,输入之前设置的 root 密码。 - 在 MySQL 中创建一个名为 bbs 的数据库,执行命令:
create database bbs;
。 - 为 Discuz! 创建一个专门的数据库用户 runbbs,并授予该用户对 bbs 数据库的所有权限,执行命令:
- 使用 root 用户登录 MySQL:
grant all on bbs.* to runbbs@127.0.0.1 identified by 'bbs123';
grant all on bbs.* to runbbs@'localhost' identified by 'bbs123';
这里分别授权该用户可以通过 127.0.0.1 和localhost这两个地址访问数据库。
3. 安装 Web 应用
- 在浏览器中访问服务器的 URL 地址,加上 Discuz! 的安装路径,如http://192.168.10.101/bbs/install/index.php,进入 Discuz! 的安装向导页面。
- 在安装向导页面中,根据提示填写数据库信息,包括数据库服务器地址(一般为 127.0.0.1 或localhost)、数据库名(bbs)、数据库用户名(runbbs)、数据库密码(bbs123)等。同时,设置数据表前缀(可保持默认,也可根据需要修改)和系统信箱 Email。
- 填写管理员信息,包括管理员账号、密码和 Email 等。设置完成后,按照安装向导的提示逐步完成安装过程。安装完成后,就可以通过访问网站 URL 来使用搭建好的 Discuz! 论坛应用了。