一、在LNMP平台中部署Web应用
LNMP(Linux + Nginx + MySQL + PHP)是常见的Web服务栈。以下步骤基于CentOS/RHEL系统(使用dnf包管理器),其他Linux发行版需相应调整
1. 编译安装 Nginx
编译安装Nginx可以提供更高性能和定制化
(1) 用dnf安装支持软件
安装必要的依赖包:
bash
dnf install gcc make pcre-devel zlib-devel openssl-devel -y
这些包包括编译器、库文件等
(2) 创建运行用户、组和日志目录
为安全起见,创建专用用户和组:
bash
groupadd nginx
useradd -M -s /sbin/nologin -g nginx nginx
mkdir -p /var/log/nginx
chown -R nginx:nginx /var/log/nginx
-M 表示不创建家目录,-s /sbin/nologin 禁止登录
(3) 编译安装Nginx
下载Nginx源代码并编译:
bash
wget http://nginx.org/download/nginx-1.24.0.tar.gz
tar -zxvf nginx-1.24.0.tar.gz
cd nginx-1.24.0
./configure --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http_ssl_module
make && make install
--prefix 指定安装目录,--with-http_ssl_module 启用SSL支持
(4) 添加 Nginx 系统服务
创建systemd服务文件:
bash
cat > /etc/systemd/system/nginx.service << EOF
[Unit]
Description=Nginx Web Server
After=network.target
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
启用并启动服务:
bash
systemctl daemon-reload
systemctl enable nginx
systemctl start nginx
2. 安装MySQL服务
使用包管理器安装MySQL(或MariaDB):
bash
dnf install mysql-server -y
systemctl enable mysqld
systemctl start mysqld
安全初始化:
bash
mysql_secure_installation
3. 安装php-fpm服务
PHP-FPM处理PHP脚本
(1) 依赖环境安装
安装编译PHP所需的包:
bash
dnf install libxml2-devel libjpeg-devel libpng-devel freetype-devel openssl-devel libcurl-devel -y
(2) 编译安装php
下载PHP源代码并编译:
bash
wget https://www.php.net/distributions/php-8.2.0.tar.gz
tar -zxvf php-8.2.0.tar.gz
cd php-8.2.0
./configure --prefix=/usr/local/php --enable-fpm --with-mysqli --with-openssl
make && make install
(3) 编写php-fpm启动脚本
创建systemd服务文件:
bash
cat > /etc/systemd/system/php-fpm.service << EOF
[Unit]
Description=PHP FastCGI Process Manager
After=network.target
[Service]
Type=simple
PIDFile=/usr/local/php/var/run/php-fpm.pid
ExecStart=/usr/local/php/sbin/php-fpm
ExecReload=/bin/kill -USR2 \$MAINPID
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
启用并启动服务:
bash
systemctl daemon-reload
systemctl enable php-fpm
systemctl start php-fpm
(4) php-fpm参数优化
编辑配置文件 /usr/local/php/etc/php-fpm.conf:
ini
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 10
调整进程管理参数以提高并发性能
4. 测试LNMP协同工作
创建测试PHP文件:
bash
echo "<?php phpinfo(); ?>" > /usr/local/nginx/html/info.php
在浏览器访问 http://<服务器IP>/info.php,应显示PHP信息页面。确保Nginx配置处理PHP请求: 编辑Nginx配置文件 /usr/local/nginx/conf/nginx.conf,添加:
nginx
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
include fastcgi_params;
}
重启Nginx:systemctl restart nginx
5. 部署discuz论坛
下载Discuz并解压:
bash
wget https://download.comsenz.com/DiscuzX/3.5/Discuz_X3.5_SC_UTF8.zip
unzip Discuz_X3.5_SC_UTF8.zip -d /usr/local/nginx/html/discuz
设置权限:
bash
chown -R nginx:nginx /usr/local/nginx/html/discuz
在浏览器访问 http://<服务器IP>/discuz,按向导完成安装,配置MySQL数据库信息
二、LNAMP架构部署和实验
LNAMP(Linux + Nginx + Apache + MySQL + PHP)使用Nginx作为反向代理处理静态内容和负载均衡,Apache处理动态内容,实现动静分离
1. Nginx反向代理配置
编辑Nginx配置文件 /usr/local/nginx/conf/nginx.conf:
nginx
server {
listen 80;
server_name example.com;
location / {
proxy_pass http://127.0.0.1:8080; # 代理到Apache
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location ~ \.(jpg|png|css|js)$ {
root /usr/local/nginx/static; # 静态资源目录
expires 30d;
}
}
重启Nginx:systemctl restart nginx
2. Nginx创建静态资源目录
创建目录并设置权限:
bash
mkdir -p /usr/local/nginx/static
chown -R nginx:nginx /usr/local/nginx/static
将静态文件(如图片、CSS)放入此目录
3. 搭建LAMP环境并验证
安装Apache、PHP和MySQL:
bash
dnf install httpd php php-mysqlnd -y
systemctl enable httpd
systemctl start httpd
配置Apache监听8080端口(避免与Nginx冲突): 编辑 /etc/httpd/conf/httpd.conf:
apache
Listen 8080
重启Apache:systemctl restart httpd
4. 编写PHP动态页面
在Apache文档根目录创建测试文件:
bash
echo "<?php echo 'Dynamic content from Apache'; ?>" > /var/www/html/dynamic.php
访问 http://<服务器IP>:8080/dynamic.php 应显示动态内容
5. 创建测试数据库
登录MySQL创建数据库和用户:
sql
CREATE DATABASE testdb;
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'localhost';
FLUSH PRIVILEGES;
6. 验证动静分离效果
静态资源测试:访问 http://<服务器IP>/image.jpg(文件在 /usr/local/nginx/static),应直接从Nginx返回
动态资源测试:访问 http://<服务器IP>/dynamic.php,请求被代理到Apache处理。 使用工具(如curl)检查响应头:
bash
curl -I http://<服务器IP>/image.jpg # 应显示Nginx服务器头
curl -I http://<服务器IP>/dynamic.php # 应显示Apache服务器头