LNMP环境部署

一、在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服务器头
相关推荐
gwjcloud37 分钟前
Frp内网穿透
linux·运维·服务器
MwEUwQ3Gx1 小时前
常见Linux权限提升笔记
linux·运维·笔记
ken22321 小时前
安装问题@ ubuntu 24.04 :efi 磁盘分区,挂载
linux·运维·ubuntu
white-persist2 小时前
【vulhub weblogic CVE-2017-10271漏洞复现】vulhub weblogic CVE-2017-10271漏洞复现详细解析
java·运维·服务器·网络·数据库·算法·安全
数据知道2 小时前
claw-code 源码详细分析:`reference_data` JSON 快照——大型移植里「对照底稿」该怎么治理与演进?
linux·python·ubuntu·json·claude code
kvo7f2JTy2 小时前
吃透Linux/C++系统编程:文件与I/O操作从入门到避坑
java·linux·c++
Deitymoon2 小时前
linux——守护进程
linux
Vect__3 小时前
深刻理解虚拟内存机制
linux
maosheng11463 小时前
Linux的第二次作业
linux·运维·服务器
maosheng11463 小时前
Linux
linux·运维·服务器