介绍Nginx 反向代理是一种将客户端请求转发到后端服务器的技术，隐藏了真实服务器的细节，同时提供负载均衡、缓存加速、SSL 终止等功能。快速安装Nginx若已经安装nginx可忽略此步骤 复制 # 更新源+安装 sudo apt update -y && sudo apt install -y nginx # 启动并设置开机自启 sudo systemctl start nginx sudo systemctl enable nginx # 验证安装（输出版本即成功） nginx -v # 防火墙开放 80/443 端口 sudo ufw allow 80/tcp sudo ufw allow 443/tcp sudo ufw reload Nginx 配置文件结构（关键路径） 复制 # 主配置文件 /etc/nginx/nginx.conf # 虚拟主机配置目录（推荐在此创建配置） /etc/nginx/sites-available/ # 启用的虚拟主机（软链接指向 sites-available 中的配置） /etc/nginx/sites-enabled/ # 日志目录 /var/log/nginx/ 基础反向代理实战需求：http://proxy.example.com 转发至后端服务 http://192.168.1.100:8080创建配置文件 复制 sudo vim /etc/nginx/sites-available/proxy-single.conf 写入配置 复制 server { listen 80; server_name proxy.example.com; # 替换为你的域名/服务器IP # 日志配置 access_log /var/log/nginx/proxy-single-access.log main; error_log /var/log/nginx/proxy-single-error.log warn; location / { proxy_pass http://192.168.1.100:8080; # 后端服务地址 # 传递客户端真实IP和请求信息（后端必须配置） proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # 超时优化 proxy_connect_timeout 30s; # 连接后端超时 proxy_send_timeout 30s; # 发送请求超时 proxy_read_timeout 60s; # 读取响应超时 # 缓冲区配置（处理大响应） proxy_buffering on; proxy_buffer_size 4k; proxy_buffers 4 16k; proxy_busy_buffers_size 32k; } } 启用配置并验证 复制 # 创建软链接启用配置 sudo ln -s /etc/nginx/sites-available/proxy-single.conf /etc/nginx/sites-enabled/ # 验证配置语法 sudo nginx -t # 重载 Nginx（不中断服务） sudo systemctl reload nginx # 测试代理效果（返回后端服务响应即成功） curl http://proxy.example.com 负载均衡实战需求：将请求分发至 3 台后端服务器，支持权重分配、故障自动切换创建配置文件 复制 sudo vim /etc/nginx/sites-available/proxy-lb.conf 写入配置 复制 # 定义后端服务器集群（名称自定义） upstream backend_cluster { server 192.168.1.100:8080 weight=3; # 权重3，分发概率最高 server 192.168.1.101:8080 weight=2; # 权重2 server 192.168.1.102:8080 max_fails=3 fail_timeout=30s; # 3次失败标记不可用，30秒后重试 server 192.168.1.103:8080 backup; # 备用服务器（主服务全挂时启用） # 负载均衡算法（默认轮询，可选以下） # ip_hash; # 基于客户端IP哈希，保持会话一致性 # least_conn; # 最少连接数优先（适合后端性能不均） } server { listen 80; server_name proxy.example.com; access_log /var/log/nginx/proxy-lb-access.log main; error_log /var/log/nginx/proxy-lb-error.log warn; location / { proxy_pass http://backend_cluster; # 转发至集群 # 复用基础代理的请求头和超时配置 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 后端故障自动切换 proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; } } 启用配置并验证负载效果 复制 sudo ln -s /etc/nginx/sites-available/proxy-lb.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx # 连续发送10个请求，观察后端分发情况 for i in {1..10}; do curl -I http://proxy.example.com | grep "Server" || echo "请求失败"; done HTTPS反向代理需求：Nginx 处理 HTTPS 加密，后端服务走 HTTP（减轻后端 CPU 负载）申请免费 SSL 证书（Let's Encrypt） 复制 # 安装 Certbot sudo apt install -y certbot python3-certbot-nginx # 申请证书（自动验证域名并配置） sudo certbot --nginx -d proxy.example.com # 替换为你的域名 优化 SSL 配置（替换自动生成的配置） 复制 sudo vim /etc/nginx/sites-available/proxy-ssl.conf 写入优化配置： 复制 # HTTP 强制跳转 HTTPS server { listen 80; server_name proxy.example.com; return 301 https://$host$request_uri; } # HTTPS 核心配置 server { listen 443 ssl http2; # 启用 HTTP/2，提升并发 server_name proxy.example.com; # SSL 证书路径（Certbot 自动生成，无需修改） ssl_certificate /etc/letsencrypt/live/proxy.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/proxy.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/proxy.example.com/chain.pem; # SSL 安全+性能优化 ssl_protocols TLSv1.2 TLSv1.3; # 禁用不安全协议（TLSv1.0/TLSv1.1） ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; # 会话缓存，提升重连速度 ssl_session_timeout 1d; ssl_stapling on; # OCSP 装订，减少 SSL 握手时间 ssl_stapling_verify on; resolver 8.8.8.8 1.1.1.1 valid=300s; # DNS 解析器 # 反向代理配置（可对接单后端或负载均衡集群） location / { proxy_pass http://backend_cluster; # 替换为你的后端/集群地址 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } } 启用配置并验证 复制 sudo ln -s /etc/nginx/sites-available/proxy-ssl.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx # 测试 HTTPS 访问 curl -v https://proxy.example.com # 在线验证 SSL 安全性（浏览器打开） # https://www.ssllabs.com/ssltest/analyze.html?d=proxy.example.com 反向代理缓存需求：缓存图片、CSS、JS 等静态资源，减少后端请求压力配置全局缓存（修改主配置） 复制 sudo vim /etc/nginx/nginx.conf 在 http 块中添加： 复制 http { # 其他默认配置... # 反向代理缓存全局配置 proxy_cache_path /var/cache/nginx/proxy_cache levels=1:2 # 缓存目录层级（1级+2级子目录） keys_zone=proxy_cache_zone:10m # 共享内存区（名称+大小） max_size=20g # 最大缓存磁盘空间（超出LRU淘汰） inactive=7d # 7天未访问自动清理 use_temp_path=off; # 禁用临时目录，避免I/O竞争 proxy_cache_key "$scheme$request_method$host$request_uri$args"; # 缓存唯一标识 } 配置虚拟主机缓存规则 复制 sudo vim /etc/nginx/sites-available/proxy-cache.conf 写入配置： 复制 server { listen 443 ssl http2; server_name proxy.example.com; # SSL 配置（复用场景3的SSL部分） ssl_certificate /etc/letsencrypt/live/proxy.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/proxy.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/proxy.example.com/chain.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"; ssl_prefer_server_ciphers on; # 静态资源缓存（匹配后缀） location ~* \.(jpg|jpeg|png|gif|css|js|pdf|ico|svg|woff2)$ { proxy_pass http://backend_cluster; proxy_cache proxy_cache_zone; # 启用缓存 proxy_cache_valid 200 304 7d; # 200/304状态码缓存7天 proxy_cache_valid any 1m; # 其他状态码缓存1分钟 proxy_cache_use_stale error timeout; # 后端故障时使用过期缓存 add_header X-Proxy-Cache $upstream_cache_status; # 响应头显示缓存状态（HIT/MISS） expires 30d; # 客户端本地缓存30天 } # 动态请求（如API）不缓存 location / { proxy_pass http://backend_cluster; proxy_cache off; # 禁用缓存 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } 创建缓存目录并启用配置 复制 # 创建缓存目录并授权 sudo mkdir -p /var/cache/nginx/proxy_cache sudo chown -R nginx:nginx /var/cache/nginx/proxy_cache # 启用配置 sudo ln -s /etc/nginx/sites-available/proxy-cache.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx # 验证缓存：首次 MISS，二次 HIT curl -I https://proxy.example.com/test.jpg 反向代理路径转发需求：/api 转发至 API 服务，/web 转发至 Web 服务，/admin 转发至管理后台 复制 sudo vim /etc/nginx/sites-available/proxy-path.conf 写入配置： 复制 # 定义不同后端集群 upstream api_server { server 192.168.1.104:8081; # API服务 } upstream web_server { server 192.168.1.105:8082; # Web服务 } upstream admin_server { server 192.168.1.106:8083; # 管理后台 } server { listen 443 ssl http2; server_name proxy.example.com; # SSL配置（复用场景3） ssl_certificate /etc/letsencrypt/live/proxy.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/proxy.example.com/privkey.pem; # /api 路径转发 location /api/ { proxy_pass http://api_server/; # 末尾/保持路径一致性（如/api/user → /user） proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # /web 路径转发 location /web/ { proxy_pass http://web_server/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } # /admin 路径转发 location /admin/ { proxy_pass http://admin_server/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } 启用配置： 复制 sudo ln -s /etc/nginx/sites-available/proxy-path.conf /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx # 测试不同路径 curl https://proxy.example.com/api/health curl https://proxy.example.com/web/index 运维核心命令 复制 # 验证配置语法 sudo nginx -t # 重载配置（不中断服务） sudo systemctl reload nginx # 重启 Nginx sudo systemctl restart nginx # 查看实时访问日志 sudo tail -f /var/log/nginx/proxy-access.log # 查看错误日志 sudo tail -f /var/log/nginx/proxy-error.log # 清理缓存 sudo rm -rf /var/cache/nginx/proxy_cache/* && sudo systemctl reload nginx # 续签 SSL 证书（Let's Encrypt 有效期90天） sudo certbot renew # 查看证书状态 sudo certbot certificates # 禁用某个虚拟主机配置 sudo unlink /etc/nginx/sites-enabled/xxx.conf && sudo systemctl reload nginx
前言LNMP 作为 Linux + Nginx + MySQL + PHP 的经典 Web 架构组合，凭借轻量、高效、稳定的特性，成为中小企业及个人开发者搭建 Web 服务的首选方案。本文将基于 Ubuntu 22.04 LTS 系统，从环境准备、组件编译安装、配置优化、安全加固到项目部署，提供一套生产级别的 LNMP 部署教程，全程附详细代码及专业配置说明。环境准备系统初始化首先确保系统处于最新状态，同时安装部署所需的依赖工具： 复制 # 更新系统软件包索引 sudo apt update -y # 升级已安装软件包（避免依赖冲突） sudo apt upgrade -y # 安装基础依赖工具（编译、依赖库、网络工具等） sudo apt install -y build-essential libpcre3 libpcre3-dev zlib1g zlib1g-dev \ libssl-dev openssl wget curl vim git unzip zip libxml2-dev libcurl4-openssl-dev \ libjpeg-dev libpng-dev libfreetype6-dev libzip-dev libonig-dev 关闭不必要服务（优化系统资源） 复制 # 停止并禁用 avahi-daemon（局域网服务发现，生产环境无用） sudo systemctl stop avahi-daemon sudo systemctl disable avahi-daemon # 停止并禁用 cups（打印机服务） sudo systemctl stop cups sudo systemctl disable cups # 查看系统运行状态 sudo systemctl status 配置防火墙（UFW）仅开放 80（HTTP）、443（HTTPS）、22（SSH）端口，增强系统安全性： 复制 # 启用 UFW 防火墙 sudo ufw enable # 允许 SSH 连接（远程管理必备） sudo ufw allow 22/tcp # 允许 HTTP/HTTPS 服务 sudo ufw allow 80/tcp sudo ufw allow 443/tcp # 查看防火墙规则 sudo ufw status numbered 编译安装Nginx1.26.2采用编译安装方式，可自定义模块（如 SSL、Gzip 等），相比 apt 安装更灵活可控。下载并解压 Nginx 源码 复制 # 创建源码存放目录 sudo mkdir -p /usr/local/src/nginx cd /usr/local/src/nginx # 下载 Nginx 稳定版（当前最新稳定版 1.26.2） sudo wget https://nginx.org/download/nginx-1.26.2.tar.gz # 解压源码包 sudo tar -zxvf nginx-1.26.2.tar.gz cd nginx-1.26.2 配置编译参数（启用核心模块） 复制 # 创建 Nginx 运行用户和组（避免使用 root 运行） sudo groupadd -r nginx sudo useradd -r -g nginx -s /sbin/nologin nginx # 配置编译选项（启用 SSL、Gzip、Rewrite 等核心模块） sudo ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --with-http_ssl_module \ --with-http_gzip_static_module \ --with-http_stub_status_module \ --with-http_realip_module \ --with-http_flv_module \ --with-http_mp4_module \ --with-pcre \ --with-stream \ --with-stream_ssl_module \ --with-http_v2_module # 编译并安装（-j4 表示使用 4 线程编译，根据 CPU 核心数调整） sudo make -j4 && sudo make install 配置 Nginx 系统服务（systemd）方便通过 systemctl 管理 Nginx 启停： 复制 # 创建服务配置文件 sudo vim /usr/lib/systemd/system/nginx.service 写入以下内容： 复制 [Unit] Description=Nginx High Performance Web Server After=network.target remote-fs.target nss-lookup.target [Service] Type=forking PIDFile=/usr/local/nginx/logs/nginx.pid ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf ExecReload=/bin/kill -s HUP $MAINPID ExecStop=/bin/kill -s QUIT $MAINPID PrivateTmp=true [Install] WantedBy=multi-user.target Nginx 基础配置优化 复制 # 备份默认配置文件 sudo cp /usr/local/nginx/conf/nginx.conf /usr/local/nginx/conf/nginx.conf.bak # 编辑主配置文件 sudo vim /usr/local/nginx/conf/nginx.conf 替换为以下优化后的配置： 复制 user nginx nginx; worker_processes auto; # 自动匹配 CPU 核心数 worker_cpu_affinity auto; # CPU 亲和性绑定 error_log /var/log/nginx/error.log warn; pid /usr/local/nginx/logs/nginx.pid; # 事件模块配置 events { worker_connections 10240; # 每个 worker 最大连接数 use epoll; # 使用 epoll 事件驱动模型（Linux 高性能首选） multi_accept on; # 允许一个 worker 同时接受多个连接 } # HTTP 核心配置 http { include mime.types; default_type application/octet-stream; # 日志格式（添加 $request_time 记录请求耗时） log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for" "$request_time"'; access_log /var/log/nginx/access.log main; # 性能优化参数 sendfile on; # 启用零拷贝发送文件 tcp_nopush on; # 合并 TCP 数据包，减少网络开销 tcp_nodelay on; # 禁用 Nagle 算法，降低延迟 keepalive_timeout 65; # 长连接超时时间 types_hash_max_size 2048; # 类型哈希表大小 client_header_buffer_size 4k; # 客户端请求头缓冲区大小 large_client_header_buffers 4 16k; # 大请求头缓冲区 # Gzip 压缩（减少传输带宽） gzip on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_comp_level 6; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; gzip_vary on; gzip_disable "MSIE [1-6]\."; # 兼容 IE 低版本 # 虚拟主机配置（后续项目部署用） include /usr/local/nginx/conf/conf.d/*.conf; } 启动并验证 Nginx 复制 # 创建 Nginx 日志目录并授权 sudo mkdir -p /var/log/nginx sudo chown -R nginx:nginx /var/log/nginx # 重载 systemd 配置 sudo systemctl daemon-reload # 启动 Nginx 并设置开机自启 sudo systemctl start nginx sudo systemctl enable nginx # 验证 Nginx 状态 sudo systemctl status nginx # 测试 Nginx 配置是否正确 /usr/local/nginx/sbin/nginx -t # 访问测试（本地或远程浏览器访问服务器 IP） curl http://localhost 若出现 Welcome to nginx! 页面，说明 Nginx 安装配置成功。编译安装Mysql8.0MySQL 8.0 相比 5.7 性能提升显著，支持 JSON 增强、窗口函数等新特性，此处采用编译安装保证稳定性。安装依赖与系统配置 复制 # 安装 MySQL 依赖 sudo apt install -y cmake libncurses5-dev libncursesw5-dev libaio-dev # 创建 MySQL 数据目录和运行用户 sudo groupadd -r mysql sudo useradd -r -g mysql -s /sbin/nologin mysql sudo mkdir -p /data/mysql sudo chown -R mysql:mysql /data/mysql # 关闭 SELinux（Ubuntu 默认未启用，若启用则执行） sudo setenforce 0 sudo sed -i 's/^SELINUX=enforcing$/SELINUX=disabled/' /etc/selinux/config 下载并编译 MySQL 源码 复制 # 进入源码目录 cd /usr/local/src sudo wget https://cdn.mysql.com/Downloads/MySQL-8.0/mysql-8.0.39.tar.gz sudo tar -zxvf mysql-8.0.39.tar.gz cd mysql-8.0.39 # 创建编译目录 sudo mkdir build && cd build # CMake 配置编译参数 sudo cmake .. \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/data/mysql \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_READLINE=1 \ -DWITH_SSL=system \ -DWITH_ZLIB=system \ -DWITH_LIBWRAP=0 \ -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_unicode_ci \ -DENABLED_LOCAL_INFILE=1 \ -DFORCE_INSOURCE_BUILD=1 # 编译安装（-j4 线程数根据 CPU 调整，编译时间较长） sudo make -j4 && sudo make install 初始化 MySQL 数据库 复制 # 授权安装目录 sudo chown -R mysql:mysql /usr/local/mysql # 初始化数据库（生成临时 root 密码，记录在日志中） sudo /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql # 查看临时密码（关键！后续登录需要） sudo grep 'temporary password' /var/log/mysqld.log 配置 MySQL 系统服务 复制 # 复制服务脚本 sudo cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld sudo chmod +x /etc/init.d/mysqld # 配置 systemd 服务 sudo vim /usr/lib/systemd/system/mysqld.service 写入以下内容： 复制 [Unit] Description=MySQL Server After=network.target [Service] Type=forking ExecStart=/etc/init.d/mysqld start ExecStop=/etc/init.d/mysqld stop ExecReload=/etc/init.d/mysqld restart PIDFile=/data/mysql/localhost.localdomain.pid User=mysql Group=mysql Restart=on-failure [Install] WantedBy=multi-user.target MySQL 配置优化（my.cnf） 复制 # 创建 MySQL 配置文件 sudo vim /etc/my.cnf 写入以下优化配置（适配 4GB 内存服务器，可根据实际调整）： 复制 [mysqld] basedir = /usr/local/mysql datadir = /data/mysql socket = /tmp/mysql.sock pid-file = /data/mysql/localhost.localdomain.pid user = mysql port = 3306 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci # 性能优化参数 max_connections = 1000 max_user_connections = 800 wait_timeout = 600 interactive_timeout = 600 table_open_cache = 2048 table_definition_cache = 2048 sort_buffer_size = 2M join_buffer_size = 2M read_buffer_size = 1M read_rnd_buffer_size = 4M key_buffer_size = 64M innodb_buffer_pool_size = 2G # 建议设置为物理内存的 50%-70% innodb_log_file_size = 512M innodb_log_buffer_size = 64M innodb_flush_log_at_trx_commit = 1 innodb_file_per_table = 1 innodb_flush_method = O_DIRECT # 安全参数 skip-name-resolve # 禁用 DNS 解析，加快连接速度 sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION [mysqld_safe] log-error = /var/log/mysqld.log pid-file = /data/mysql/localhost.localdomain.pid [mysql] default-character-set = utf8mb4 启动 MySQL 并初始化配置 复制 # 启动 MySQL 并设置开机自启 sudo systemctl daemon-reload sudo systemctl start mysqld sudo systemctl enable mysqld # 验证 MySQL 状态 sudo systemctl status mysqld # 登录 MySQL（使用之前记录的临时密码） /usr/local/mysql/bin/mysql -u root -p # 登录后修改 root 密码（必须包含大小写字母、数字、特殊字符） ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword123!'; # 授权 root 远程访问（生产环境建议限制 IP，此处为演示） CREATE USER 'root'@'%' IDENTIFIED BY 'YourStrongPassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; # 退出 MySQL exit 编译安装PHP8.3PHP 8.3 是当前稳定版，性能较 7.x 提升 30%+，支持 JIT 编译，此处编译安装并启用常用扩展（MySQL、Redis、GD 等）。下载并解压 PHP 源码 复制 cd /usr/local/src sudo wget https://www.php.net/distributions/php-8.3.11.tar.gz sudo tar -zxvf php-8.3.11.tar.gz cd php-8.3.11 配置编译参数（启用核心扩展） 复制 # 配置编译选项 sudo ./configure \ --prefix=/usr/local/php \ --with-config-file-path=/usr/local/php/etc \ --with-config-file-scan-dir=/usr/local/php/etc/php.d \ --with-mysql-sock=/tmp/mysql.sock \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-openssl \ --with-zlib \ --with-curl \ --with-gd \ --with-jpeg \ --with-png \ --with-freetype \ --with-iconv \ --with-mhash \ --with-libxml-dir \ --with-zip \ --with-onig \ --enable-mbstring \ --enable-fpm \ --enable-cli \ --enable-gd \ --enable-xml \ --enable-session \ --enable-opcache \ --enable-pcntl \ --enable-exif \ --disable-debug # 编译安装 sudo make -j4 && sudo make install 配置 PHP-FPM 复制 # 复制配置文件模板 sudo cp php.ini-production /usr/local/php/etc/php.ini sudo cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf sudo cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf # 编辑 PHP 核心配置（php.ini） sudo vim /usr/local/php/etc/php.ini 修改以下关键参数： 复制 # 时区配置 date.timezone = Asia/Shanghai # 内存限制 memory_limit = 512M # 上传文件大小限制 upload_max_filesize = 100M post_max_size = 100M # 脚本执行时间限制 max_execution_time = 300 # 错误日志 error_log = /var/log/php/error.log log_errors = On display_errors = Off # 生产环境禁用错误显示 # OPCache 优化（开启 JIT 编译） [opcache] zend_extension=opcache.so opcache.enable=1 opcache.enable_cli=1 opcache.memory_consumption=128 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.revalidate_freq=60 opcache.jit=1255 opcache.jit_buffer_size=64M 配置 PHP-FPM 系统服务 复制 sudo vim /usr/lib/systemd/system/php-fpm.service 写入以下内容： 复制 [Unit] Description=PHP FastCGI Process Manager After=network.target [Service] Type=forking PIDFile=/usr/local/php/var/run/php-fpm.pid ExecStart=/usr/local/php/sbin/php-fpm ExecReload=/bin/kill -USR2 $MAINPID ExecStop=/bin/kill -SIGINT $MAINPID User=nginx Group=nginx PrivateTmp=true [Install] WantedBy=multi-user.target 启动 PHP-FPM 并验证 复制 # 创建 PHP 日志目录并授权 sudo mkdir -p /var/log/php sudo chown -R nginx:nginx /var/log/php # 启动 PHP-FPM 并设置开机自启 sudo systemctl daemon-reload sudo systemctl start php-fpm sudo systemctl enable php-fpm # 验证 PHP-FPM 状态 sudo systemctl status php-fpm # 查看 PHP 版本及扩展 /usr/local/php/bin/php -v /usr/local/php/bin/php -m | grep -E 'mysqli|pdo_mysql|gd|curl|zip' 若输出 PHP 版本（8.3.11）及相关扩展名称，说明 PHP 安装成功。安全加固MySQL 安全加固 复制 # 运行 MySQL 安全脚本 /usr/local/mysql/bin/mysql_secure_installation 按照提示完成以下操作：输入 root 密码启用密码强度验证（推荐）修改 root 密码（若之前设置的密码强度不够）禁用匿名用户禁止 root 本地以外的登录（生产环境建议）删除 test 数据库刷新权限表PHP 安全加固 复制 sudo vim /usr/local/php/etc/php.ini 添加 / 修改以下参数： 复制 # 禁用危险函数 disable_functions = eval,assert,popen,passthru,exec,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source # 禁止暴露 PHP 版本 expose_php = Off # 限制 PHP 可访问的目录 open_basedir = /var/www/:/tmp/:/var/tmp/ # 禁用远程代码执行 allow_url_fopen = Off allow_url_include = Off Nginx 安全加固 复制 sudo vim /usr/local/nginx/conf/nginx.conf 在 http 块中添加以下安全头： 复制 # 防止 XSS 攻击 add_header X-XSS-Protection "1; mode=block"; # 防止点击劫持 add_header X-Frame-Options "SAMEORIGIN"; # 限制 MIME 类型嗅探 add_header X-Content-Type-Options "nosniff"; # 启用 HSTS（强制 HTTPS） add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; 配置 HTTPS（Let's Encrypt 免费证书） 复制 # 安装 Certbot sudo apt install -y certbot python3-certbot-nginx # 申请免费 SSL 证书（替换为你的域名） sudo certbot --nginx -d yourdomain.com -d www.yourdomain.com 按照提示完成证书申请，Certbot 会自动修改 Nginx 配置，启用 HTTPS。总结本文基于 Ubuntu 22.04 LTS 系统，通过编译安装方式部署了 Nginx 1.26 + MySQL 8.0 + PHP 8.3 的高性能 LNMP 环境，包含了详细的编译参数、配置优化和安全加固步骤。相比 apt 一键安装，编译安装更灵活可控，可根据业务需求自定义模块和优化参数，适用于生产环境。后续可根据实际业务需求，扩展 Redis 缓存、Elasticsearch 搜索引擎等组件，进一步提升架构性能和扩展性。
备份初始镜像源 复制 mv /etc/apt/sources.list /etc/apt/sources.list.bak 编辑镜像源 复制 vim /etc/apt/sources.list 根据系统版本信息输入阿里云网络镜像源：ubuntu 24.04 (noble) 配置如下： 复制 deb https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ noble main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ noble-security main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ noble-updates main restricted universe multiverse # deb https://mirrors.aliyun.com/ubuntu/ noble-proposed main restricted universe multiverse # deb-src https://mirrors.aliyun.com/ubuntu/ noble-proposed main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ noble-backports main restricted universe multiverse ubuntu 23.04 (lunar) 配置如下： 复制 deb https://mirrors.aliyun.com/ubuntu/ lunar main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ lunar main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ lunar-security main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ lunar-security main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ lunar-updates main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ lunar-updates main restricted universe multiverse # deb https://mirrors.aliyun.com/ubuntu/ lunar-proposed main restricted universe multiverse # deb-src https://mirrors.aliyun.com/ubuntu/ lunar-proposed main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ lunar-backports main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ lunar-backports main restricted universe multiverse ubuntu 22.04 LTS (jammy) 配置如下： 复制 deb https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse # deb https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse # deb-src https://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse deb https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse deb-src https://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse 更新apt镜像源 复制 apt update && apt upgrade -y