技术实战:柳州企业网站从零搭建Nginx+PHP+MySQL高性能架构
为什么选择LNMP架构
对于柳州的大多数中小企业网站来说 LNMP(Linux + Nginx + MySQL + PHP)依然是最成熟、最经济、最易维护的技术架构选择。Nginx 以其高并发处理能力和低内存占用著称单机可轻松处理数万个并发连接远超 Apache 在高并发场景下的表现;PHP 作为最流行的 Web 开发语言生态丰富开发效率高人才容易招到;MySQL 作为最广泛使用的关系型数据库稳定可靠工具链完善。三者组合经过了互联网行业十几年的检验 countless 的生产环境验证了其可靠性。
本文将以 Ubuntu 22.04 LTS 为操作系统从一台全新的云服务器开始一步步搭建一套生产就绪的 LNMP 架构。假设服务器配置为:2核CPU、4GB内存、50GB SSD硬盘(阿里云/腾讯云 ECS 的入门配置足够支撑大多数柳州企业官网和中型电商网站的访问量)。
第一步:基础环境准备
拿到一台全新的服务器后首先要做的是基础的安全加固和环境初始化。更新系统(sudo apt update && sudo apt upgrade -y 安装所有安全补丁);创建普通用户(不要直接用 root 操作——sudo adduser deploy && sudo usermod -aG sudo deploy 后续所有操作都用 deploy 用户);配置 SSH 密钥登录(编辑 /etc/ssh/sshd_config 设置 PermitRootLogin no PasswordAuthentication no 然后重启 sshd 服务);配置防火墙(sudo ufw allow OpenSSH && sudo ufw allow Nginx Full && sudo ufw enable 只开放 SSH 和 HTTP/HTTPS 端口);设置时区和自动同步(sudo timedatectl set-timezone Asia/Shanghai 安装 chrony 进行时间同步);安装常用工具(sudo apt install htop vim git curl wget unzip fail2ban -y 这些是日常运维必备的工具 fail2ban 可以防止 SSH 暴力破解)。
做完这些基础准备工作后你的服务器已经有了一个基本的安全底座接下来开始安装 LNMP 各组件。
Nginx安装与基础配置
安装 Nginx(sudo apt install nginx -y 安装完成后 sudo systemctl enable --now nginx 设置开机自启并立即启动);验证安装(浏览器访问服务器 IP 地址应该能看到 Nginx 的欢迎页面或者 curl localhost 返回 200 OK);基础性能配置(编辑 /etc/nginx/nginx.conf 核心优化项如下):worker_processes auto; (自动匹配 CPU 核心数) worker_rlimit_nofile 65535; (最大文件描述符限制) events { worker_connections 4096; use epoll; multi_accept on; } (事件模型优化) http { sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 65; types_hash_max_size 2048; gzip on; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_min_length 1000; } (开启 Gzip 压缩减少传输体积)。
虚拟主机配置(在 /etc/nginx/sites-available/ 下创建站点配置文件然后 soft link 到 sites-enabled/)。一个标准的 PHP 站点配置示例如下:server { listen 80; server_name yourdomain.com www.yourdomain.com; root /var/www/html; index index.php index.html; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/run/php/php8.1-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { expires 30d; add_header Cache-Control "public, immutable"; access_log off; } } 这个配置包含了:URL 重写(支持 Laravel/ThinkPHP 等框架)、PHP-FPM 处理、静态资源缓存和日志关闭等生产环境的必备优化。
MySQL安装与安全配置
安装 MySQL 8.0(sudo apt install mysql-server mysql-client -y 安装完成后 sudo systemctl enable --now mysql);安全初始化(sudo mysql_secure_installation 这一步非常重要它会引导你:设置 root 密码、移除匿名用户、禁止 root 远程登录、移除测试数据库。全部选择 Yes 即可);创建专用数据库和用户(sudo mysql -u root -p 进入 MySQL 控制台后执行:CREATE DATABASE yourdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER youruser@localhost IDENTIFIED BY strong_password_here; GRANT ALL PRIVILEGES ON yourdb.* TO youruser@localhost; FLUSH PRIVILEGES; 注意密码强度要求至少12位包含大小写字母数字和特殊字符);性能调优(编辑 /etc/mysql/mysql.conf.d/mysqld.cnf 关键参数:innodb_buffer_pool_size = 1G (设置为可用内存的50%-70%) max_connections = 200 query_cache_size = 64M slow_query_log = 1 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 开启慢查询日志用于后续的性能排查)。
备份策略(数据库备份是最重要的运维工作没有之一。设置每日自动备份脚本:#!/bin/bash BACKUP_DIR=/data/db_backups DATE=$(date +%Y%m%d_%H%M%S) mysqldump -u youruser -ppassword yourdb | gzip > $BACKUP_DIR/yourdb_$DATE.sql.gz find $BACKUP_DIR -name "*.sql.gz" -mtime +30 -delete 将此脚本放入 crontab -e 中设置每天凌晨3点执行 0 3 * * * /root/scripts/backup.sh 同时建议将备份文件定期同步到 OSS 或异地服务器实现异地容灾)。
PHP-FPM安装与优化
安装 PHP 8.1 及常用扩展(sudo apt install php8.1-fpm php8.1-mysql php8.1-xml php8.1-mbstring php8.1-curl php8.1-zip php8.1-gd php8.1-intl php8.1-bcmath php8.1-imagick -y 这些扩展覆盖了绝大多数 Web 应用的需求);PHP-FPM 性能配置(编辑 /etc/php/8.1/fpm/pool.d/www.conf 关键优化参数):pm = dynamic (动态进程管理模式适合大多数场景) pm.max_children = 20 (最大子进程数 = 总内存 / 每进程占用内存 如4GB内存则设为20左右) pm.start_servers = 5 (启动时的初始进程数) pm.min_spare_servers = 3 (最小空闲进程数) pm.max_spare_servers = 10 (最大空闲进程数) pm.max_requests = 500 (每个进程处理多少请求后重启防止内存泄漏) request_terminate_timeout = 30 (单个脚本最长执行时间超时自动杀死)。
PHP 安全配置(编辑 /etc/php/8.1/fpm/php.ini 关键安全设置):expose_php = Off (隐藏 PHP 版本信息) display_errors = Off (生产环境不显示错误信息) error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT (记录错误但不显示) upload_max_filesize = 20M post_max_size = 20M (根据实际需求调整上传文件大小限制) session.cookie_httponly = 1 session.cookie_secure = 1 session.use_strict_mode = 1 (Session 安全配置) opcache.enable = 1 opcache.memory_consumption = 128 opcache.interned_strings_buffer = 8 opcache.max_accelerated_files = 10000 (开启 OPcache 大幅提升 PHP 执行性能)。
SSL证书与HTTPS配置
最后一步是为网站启用 HTTPS 加密。安装 Certbot(sudo apt install certbot python3-certbot-nginx -y);申请 SSL 证书(sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com Certbot 会自动修改 Nginx 配置添加 SSL 相关指令并设置自动续期任务);验证 HTTPS(用浏览器访问 https://yourdomain.com 应该看到锁形图标也可以用 sslabs.com 测试 SSL 评分目标是 A 或 A+);HTTP 到 HTTPS 重定向(Certbot 通常会自动添加但如果需要手动确保 server 块中有:if ($scheme != "https") { return 301 https://$host$request_uri; } 以及 HSTS 头 add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; )。
至此一套生产级的 LNMP 架构就已经搭建完成了。总结一下最终的检查清单:Nginx 运行正常且配置了 Gzip 和静态资源缓存 ✅;PHP-FPM 进程管理配置合理 OPcache 已开启 ✅;MySQL 已创建专用用户和数据库慢查询日志已开启 ✅;SSL 证书已安装且配置了 HSTS ✅;防火墙只开放了必要端口 ✅;fail2ban 正在运行防暴力破解 ✅;数据库自动备份脚本已加入 crontab ✅;服务器时间已同步 ✅。按照这个流程搭建的 LNMP 环境完全可以支撑日均 PV 在十万级别的柳州企业网站运行。后续如果流量增长还可以通过增加服务器做负载均衡或迁移到云原生架构来应对。希望这篇实战教程能帮助柳州的技术同行们快速搭建起稳定可靠的 Web 服务环境。