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服务器头
相关推荐
qq_393060472 小时前
在 WSL2 的 Ubuntu 中安装中文字体
linux·运维·ubuntu
Rsun045512 小时前
Docker部署项目
运维·docker·容器
jnrjian2 小时前
Offending ECDSA key in /home/oracle/.ssh/known_hosts:16
运维·ssh
yqzyy2 小时前
如何安装配置Goland并使用固定公网地址SSH远程连接本地服务器
运维·服务器·ssh
AMoon丶2 小时前
C++新特性-智能指针
linux·服务器·c语言·开发语言·c++·后端·tcp/ip
蜕变的小白2 小时前
Linux系统编程-->高效并发服务器:IO多路复用详解
linux·运维·服务器
Johnstons2 小时前
AnaTraf 网络流量分析免费版:给运维多一双“眼睛”
运维·服务器·网络
峥嵘life2 小时前
Android16 EDLA更新25-12补丁导致【CTS】CtsWindowManagerDeviceAnimations存在fail项
android·linux·学习
草莓熊Lotso2 小时前
手搓简易 Linux 进程池:从 0 到 1 实现基于管道的任务分发系统
linux·运维·服务器·数据库·c++·人工智能