一.LNMP 架构核心组成LNMP 是指Linux操作系统下NginxWeb 服务器、MySQL/MariaDB数据库、PHP脚本语言的组合架构是搭建动态网站的主流方案之一各组件核心作用如下表格组件核心定位关键作用Linux底层操作系统提供稳定的服务器运行环境管理硬件资源NginxWeb 服务器 / 反向代理处理 HTTP 请求、反向代理、负载均衡、静态资源加速MySQL/MariaDB关系型数据库存储网站数据用户信息、文章内容等支持数据增删改查PHP脚本语言处理动态业务逻辑连接 Web 服务器与数据库生成动态页面二.架构工作流程用户通过浏览器发起 HTTP/HTTPS 请求访问目标域名请求首先到达Nginx服务器Nginx 根据请求规则判断若为静态资源HTML、CSS、JS、图片等直接由 Nginx 本地读取并返回若为动态请求如 PHP 接口、动态页面Nginx 将请求转发给 PHP-FPMPHP FastCGI 进程管理器PHP-FPM 接收请求后调用 PHP 解释器执行 PHP 脚本脚本通过 MySQL 接口读取或写入数据库数据执行结果经 PHP 处理后返回给 Nginx再由 Nginx 返回给用户完成一次请求响应三.在LNMP平台中部署Web应用一.编译安装Nginx1安装支持软件Nginx 的配置及运行需要 pcre、zlib 等软件包的支持因此应预先安装这些软件的开发包devel以便提供相应的库和头文件确保 Nginx 的安装顺利完成。2创建运行用户组和日志目录3编译安装Nginx[rootlocalhost ~]# tar zxf nginx-1.26.3.tar.gz [rootlocalhost ~]# cd nginx-1.26.3 [rootlocalhost nginx-1.26.3]# ./configure \ --prefix/usr/local/nginx \ --usernginx \ --groupnginx \ --with-http_ssl_module \ --with-http_v2_module \ --with-http_realip_module \ --with-http_stub_status_module\ --with-http_gzip_static_module \ --with-pcre \ --with-stream [rootlocalhost nginx-1.26.3]# make make install--prefix/usr/local/nginx指定 Nginx 安装的根目录为/usr/local/nginx--usernginx和--groupnginx指定运行 Nginx 进程的用户和用户组为 nginx--with-http_ssl_module启用 HTTP SSL 模块使 Nginx 支持 HTTPS--with-http_v2_module启用 HTTP/2 模块支持 HTTP/2 协议--with-http_realip_module启用 realip 模块用于从请求头中获取真实客户端 IP--with-http_stub_status_module启用 stub_status 模块用于查看 Nginx 的状态信息--with-http_gzip_static_module启用 gzip 静态压缩模块支持预压缩的静态文件发送--with-pcre启用 PCRE 库支持用于正则表达式处理--with-stream启用 stream 模块支持四层代理如 TCP 代理为主程序nginx创建链接文件4添加Nginx系统服务[rootlocalhost ~]# vim /lib/systemd/system/nginx.service [Unit] DescriptionThe NGINX HTTP and reverse proxy server Afternetwork.target [Service] Typeforking ExecStartPre/usr/local/sbin/nginx -t ExecStart/usr/local/sbin/nginx ExecReload/usr/local/sbin/nginx -s reload ExecStop/bin/kill -s QUIT $MAINPID TimeoutStopSec5 KillModeprocess PrivateTmptrue Userroot Grouproot [Install] WantedBymulti-user.target [rootlocalhost ~]# systemctl daemon-reload [rootlocalhost ~]# systemctl start nginx [rootlocalhost ~]# systemctl enable nginx2.安装mysql 服务由于源码编译速度问题本章节实验采用dnf部署方式安装mysql服务3.安装php-fpm服务PHP-FPMPHP FastCGI Process Manager是 PHP 的 FastCGI 进程管理器专为高并发场景设计用于高效处理 PHP 脚本请求。它通过管理 PHP 进程池显著提升 PHP 应用的性能和稳定性是 Nginx 等 Web 服务器处理 PHP 请求的核心组件。本章节采用源码方式安装 php-fpm1依赖环境安装2编译安装php[rootlocalhost ~]# tar xzf php-8.2.20.tar.gz [rootlocalhost ~]# cd php-8.2.20 [rootlocalhost php-8.2.20]# ./configure --prefix/usr/local/php \ --with-openssl \ --with-zlib \ --with-curl \ --enable-mbstring \ --with-mysqlimysqlnd \ --with-pdo-mysqlmysqlnd \ --with-freetype \ --with-jpeg \ --with-zip \ --with-libxml \ --enable-intl \ --enable-gd \ --enable-fpm \ --enable-opcache [rootlocalhost php-8.2.20]# make -j$(nproc) make install修改php-fpm.conf配置文件3编写php-fpm启动脚本输入脚本内容4php-fpm参数优化Nginx 的 PHP 解析功能实现方法如果是交由 FPM 处理的为了提高 PHP 的处理速度可对 FPM 模块进行参数的调整。FPM 进程有两种启动方式由pm参数指定分别是static和dynamic前者将产生固定数量的 fpm 进程后者将以动态的方式产生 fpm 进程。Static的方式可以使用pm.max_children指定启动的进程数量。Dynamic方式的参数要根据服务器的内存与服务负载进行调整。Dynamic 方式的参数选项描述pm.max_children指定启动最大的进程数量pm.start_servers动态方式下初始的 fpm 进程数量pm.min_spare_servers动态方式下最小的 fpm 空闲进程数pm.max_spare_servers动态方式下最大的空闲进程数假设现有云服务器运行了个人论坛内存为 1.5Gfpm 进程数为 20内存消耗近 1G处理比较慢对参数进行优化处理[rootlocalhost ~]# vim /usr/local/php/etc/php-fpm.d/www.conf pmdynamic pm.max_children20 pm.start_servers5 pm.min_spare_servers2 pm.max_spare_servers8FPM启动时有五个进程最小空闲两个进程最大空闲八个进程最多可以有二十个进程存在4.测试LNMP协同工作编写一个 “.php” 格式的网页测试文件使用 PHP 内建的 “phpinfo ()” 函数显示服务器的 PHP 环境信息PHP 代码应包括在 “” 标记之间。将测试网页文件放置到网站根目录下[rootlocalhost ~]# vim /usr/local/nginx/html/index.php ?php phpinfo(); ?配置 Nginx 支持 PHP 解析[rootlocalhost ~]# vim /usr/local/nginx/conf/nginx.conf location / { root html; index index.html index.htm index.php; } location ~ \.php$ { root html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; include fastcgi.conf; }[rootlocalhost ~]# nginx -t [rootlocalhost ~]# nginx -s reload浏览器测试访问index.php测试PHP网页能否访问MySql数据库编译index.php输入以下内容浏览器测试访问index.php部署discuz论坛将下载的 Discuz 源码文件解压找到其中的 upload 文件夹并将其放置到 LNMP 服务器的网站根目录然后适当调整权限若此处不调整也可以参考安装页面的提示再调整以允许 Nginx、php-fpm 程序拥有必要的写入权限。[rootlocalhost ~]# mkdir -p /usr/local/nginx/html/bbs [rootlocalhost ~]# unzip Discuz-X3.5-SC-UTF8-v20231001.zip [rootlocalhost ~]# cp -ra upload/* /usr/local/nginx/html/bbs/更改配置文件[rootlocalhost ~]# cd /usr/local/nginx/html/bbs/config/ [rootlocalhost ~]# cp config_global_default.php config_global.php [rootlocalhost ~]# cp config_ucenter_default.php config_ucenter.php [rootlocalhost ~]# chown php:php /usr/local/nginx/html/bbs/ -R更改 php.ini 防止连接数据库出错添加如下配置[rootlocalhost ~]# vim /usr/local/php/lib/php.ini mysqli.default_socket /var/lib/mysql/mysql.sock pdo_mysql.default_socket /var/lib/mysql/mysql.sock [rootlocalhost ~]# systemctl restart php-fpm创建数据库[rootlocalhost ~]#mysql -uroot -p mysql CREATE USER discuz_userlocalhost IDENTIFIED BY pwd123; Query OK, 0 rows affected (0.01 sec) mysql GRANT ALL PRIVILEGES ON discuz_db.* TO discuz_userlocalhost; Query OK, 0 rows affected (0.01 sec) mysql FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) mysql mysql ALTER USER discuz_userlocalhost IDENTIFIED WITH mysql_native_password BY pwd123; Query OK, 0 rows affected (0.00 sec) mysql FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec) mysql CREATE DATABASE discuz_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; Query OK, 1 row affected (0.01 sec) mysql exit Bye3安装web应用访问地址http://192.168.10.101/bbs/install