广告位

美国云服务器LNMP环境搭建详解:在CentOS上配置Nginx, PHP, MySQL

频道: 日期: 浏览:70

在当今的美国云服务器Web服务器领域,LNMP(Linux, Nginx, MySQL, PHP)栈以其出色的性能和资源效率赢得了广泛青睐。相比传统的LAMP架构,LNMP在处理高并发请求时表现更为出色,特别适合现代Web应用的需求。本文将详细指导你在CentOS系统上从零开始搭建完整的LNMP环境。

一、环境规划与准备工作

系统版本选择

  • CentOS 7.x(稳定可靠,兼容性好)

  • CentOS 8 Stream(更新特性,长期支持)

  • Rocky Linux 8.x(CentOS替代选择)

组件版本策略

  • Nginx 1.20+:高性能Web服务器和反向代理

  • MySQL 8.0MariaDB 10.5+:现代关系型数据库

  • PHP 8.0+:最新特性支持,性能显著提升

资源需求评估

  • 最小配置:1核CPU,1GB内存,10GB存储

  • 推荐配置:2核CPU,2GB内存,20GB存储

  • 生产环境:根据业务负载动态调整

二、系统基础配置

更新系统与安装基础工具

bash

# 更新系统到最新版本sudo yum update -y# 安装常用工具sudo yum install -y wget curl vim git unzip epel-release# 安装额外的软件源sudo yum install -y epel-release

配置防火墙

bash

# 启动防火墙并设置开机自启sudo systemctl start firewalldsudo systemctl enable firewalld# 开放必要端口sudo firewall-cmd --permanent --add-service=httpsudo firewall-cmd --permanent --add-service=httpssudo firewall-cmd --permanent --add-service=sshsudo firewall-cmd --reload# 验证防火墙规则sudo firewall-cmd --list-all

配置SELinux(可选,生产环境建议开启)

bash

# 临时设置为宽容模式(测试用)sudo setenforce 0# 永久禁用(不推荐生产环境)sudo sed -i 's/SELINUX=enforcing/SELINUX=permissive/g' /etc/selinux/config

三、Nginx安装与配置

添加Nginx官方仓库

bash

# 创建Nginx仓库文件sudo tee /etc/yum.repos.d/nginx.repo << EOF
[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/\$releasever/\$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
EOF

安装Nginx

bash

# 安装Nginxsudo yum install -y nginx# 启动并设置开机自启sudo systemctl start nginxsudo systemctl enable nginx# 验证安装nginx -vsudo systemctl status nginx

基础Nginx配置

bash

# 创建网站目录sudo mkdir -p /var/www/htmlsudo chown -R nginx:nginx /var/www/htmlsudo chmod -R 755 /var/www/html# 备份默认配置sudo cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.backup

优化Nginx主配置
编辑 /etc/nginx/nginx.conf

nginx

user nginx;worker_processes auto;error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events {
    worker_connections 1024;
    use epoll;
    multi_accept on;}http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';
    
    access_log /var/log/nginx/access.log main;
    
    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    
    # Gzip压缩配置
    gzip on;
    gzip_vary on;
    gzip_min_length 1024;
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    include /etc/nginx/conf.d/*.conf;}

四、MySQL数据库安装

添加MySQL官方仓库

bash

# 下载MySQL仓库配置sudo wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm# 安装MySQL仓库sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm# 导入GPG密钥sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

安装MySQL服务器

bash

# 安装MySQLsudo yum install -y mysql-community-server# 启动并设置开机自启sudo systemctl start mysqldsudo systemctl enable mysqld# 查看临时root密码sudo grep 'temporary password' /var/log/mysqld.log

MySQL安全配置

bash

# 运行安全配置脚本sudo mysql_secure_installation# 登录MySQLmysql -u root -p

创建应用数据库和用户

sql

-- 创建数据库CREATE DATABASE webapp DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;-- 创建专用用户CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';-- 授予权限GRANT ALL PRIVILEGES ON webapp.* TO 'appuser'@'localhost';-- 刷新权限FLUSH PRIVILEGES;EXIT;

五、PHP安装与配置

安装Remi仓库(提供更新的PHP版本)

bash

# CentOS 7sudo yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm# CentOS 8sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm

启用PHP 8.1仓库并安装

bash

# 启用Remi PHP 8.1仓库sudo yum-config-manager --enable remi-php81# 安装PHP及常用扩展sudo yum install -y php php-fpm php-mysqlnd php-opcache php-gd php-xml php-mbstring php-curl php-zip php-json php-bcmath php-intl# 验证安装php -v

配置PHP-FPM
编辑 /etc/php-fpm.d/www.conf

ini

[www]user = nginxgroup = nginxlisten = /var/run/php-fpm/php-fpm.socklisten.owner = nginxlisten.group = nginxlisten.mode = 0660pm = dynamicpm.max_children = 50pm.start_servers = 5pm.min_spare_servers = 5pm.max_spare_servers = 35php_admin_value[error_log] = /var/log/php-fpm/www-error.logphp_admin_flag[log_errors] = on

启动PHP-FPM服务

bash

sudo systemctl start php-fpmsudo systemctl enable php-fpmsudo systemctl status php-fpm

六、配置Nginx支持PHP

创建虚拟主机配置

bash

sudo tee /etc/nginx/conf.d/default.conf << 'EOF'
server {
    listen 80;
    server_name _;
    root /var/www/html;
    index index.php index.html index.htm;

    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        
        # 安全增强
        fastcgi_hide_header X-Powered-By;
    }

    # 禁止访问敏感文件
    location ~ /\.(ht|git|svn) {
        deny all;
    }

    location ~ /\.env {
        deny all;
    }

    # 静态文件缓存
    location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
        expires 1y;
        add_header Cache-Control "public, immutable";
    }
}
EOF

验证配置并重启服务

bash

# 测试Nginx配置sudo nginx -t# 重启服务sudo systemctl reload nginxsudo systemctl restart php-fpm

七、环境验证与测试

创建测试文件

bash

# 创建PHP信息页sudo tee /var/www/html/info.php << 'EOF'
<?php
phpinfo();
?>
EOF# 创建数据库连接测试sudo tee /var/www/html/dbtest.php << 'EOF'
<?php
$servername = "localhost";
$username = "appuser";
$password = "StrongPassword123!";
$dbname = "webapp";

try {
    $conn = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "数据库连接成功!";
    
    // 创建测试表
    $sql = "CREATE TABLE IF NOT EXISTS test_table (
        id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(30) NOT NULL,
        email VARCHAR(50),
        reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    )";
    
    $conn->exec($sql);
    echo "测试表创建成功!";
    
} catch(PDOException $e) {
    echo "连接失败: " . $e->getMessage();
}
?>
EOF

访问测试页面
在浏览器中访问:

  • http://你的服务器IP/info.php - 查看PHP信息

  • http://你的服务器IP/dbtest.php - 测试数据库连接

删除测试文件(安全考虑)

bash

sudo rm /var/www/html/info.phpsudo rm /var/www/html/dbtest.php

八、性能优化配置

Nginx性能调优
编辑 /etc/nginx/nginx.conf 中的events和http部分:

nginx

events {
    worker_connections 4096;
    use epoll;
    multi_accept on;}http {
    # 其他配置...
    
    # 缓冲区优化
    client_body_buffer_size 128k;
    client_max_body_size 20m;
    client_header_buffer_size 1k;
    large_client_header_buffers 4 4k;
    
    # 超时设置
    client_body_timeout 12;
    client_header_timeout 12;
    send_timeout 10;
    
    # 静态文件缓存
    open_file_cache max=200000 inactive=20s;
    open_file_cache_valid 30s;
    open_file_cache_min_uses 2;
    open_file_cache_errors on;}

PHP-FPM性能优化
编辑 /etc/php-fpm.d/www.conf

ini

pm.max_children = 80pm.start_servers = 20pm.min_spare_servers = 10pm.max_spare_servers = 30pm.max_requests = 500; PHP内存限制php_admin_value[memory_limit] = 256M

OPcache配置优化
编辑 /etc/php.d/10-opcache.ini

ini

opcache.enable=1opcache.memory_consumption=256opcache.interned_strings_buffer=20opcache.max_accelerated_files=20000opcache.revalidate_freq=2opcache.fast_shutdown=1

九、安全加固措施

文件权限设置

bash

# 设置正确的文件权限sudo chown -R nginx:nginx /var/www/htmlsudo find /var/www/html -type f -exec chmod 644 {} \;sudo find /var/www/html -type d -exec chmod 755 {} \;# 保护配置文件sudo chmod 600 /etc/my.cnf

Nginx安全头配置
在虚拟主机配置中添加:

nginx

add_header X-Frame-Options "SAMEORIGIN" always;add_header X-XSS-Protection "1; mode=block" always;add_header X-Content-Type-Options "nosniff" always;add_header Referrer-Policy "no-referrer-when-downgrade" always;add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;

PHP安全配置
编辑 /etc/php.ini

ini

expose_php = Offdisplay_errors = Offlog_errors = Onallow_url_fopen = Offallow_url_include = Offdisable_functions = exec,passthru,shell_exec,system,proc_open,popen

十、故障排查与维护

服务状态检查

bash

# 检查所有服务状态sudo systemctl status nginxsudo systemctl status php-fpmsudo systemctl status mysqld# 检查端口监听sudo netstat -tulpn | grep -E '(:80|:3306)'

日志文件监控

bash

# 实时查看日志sudo tail -f /var/log/nginx/error.logsudo tail -f /var/log/php-fpm/error.logsudo tail -f /var/log/mysqld.log

性能监控命令

bash

# 查看系统资源htop# 监控MySQL进程mysqladmin -u root -p processlist# 检查Nginx连接状态nginx -tcurl -I http://localhost/server-status

十一、备份与恢复策略

数据库备份脚本

bash

sudo tee /usr/local/bin/backup_mysql.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
MYSQL_USER="root"
MYSQL_PASSWORD="你的密码"

mkdir -p $BACKUP_DIR
mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --all-databases | gzip > $BACKUP_DIR/full_backup_$DATE.sql.gz

# 删除7天前的备份
find $BACKUP_DIR -name "*.sql.gz" -mtime +7 -delete
EOFsudo chmod +x /usr/local/bin/backup_mysql.sh

网站文件备份

bash

sudo tee /usr/local/bin/backup_website.sh << 'EOF'
#!/bin/bash
BACKUP_DIR="/backup/website"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR
tar -czf $BACKUP_DIR/website_backup_$DATE.tar.gz /var/www/html

# 删除30天前的备份
find $BACKUP_DIR -name "*.tar.gz" -mtime +30 -delete
EOFsudo chmod +x /usr/local/bin/backup_website.sh

结语

通过以上详细的步骤,你已经成功在CentOS系统上搭建了一个完整、安全且经过优化的LNMP环境。这个环境不仅具备了现代Web应用所需的所有组件,还通过各项优化配置确保了出色的性能和稳定性。

LNMP环境的真正价值在于它为你的应用程序提供了一个可靠的基础平台。无论是运行WordPress、Laravel、ThinkPHP还是其他PHP框架,这个环境都能提供良好的支持。

记住,服务器环境的搭建只是开始,持续的维护和优化同样重要。定期更新软件版本、监控系统性能、实施安全加固,这些都是确保服务长期稳定运行的关键。

现在,你的LNMP服务器已经准备就绪,可以开始部署你的第一个应用了。这个坚实的基础将支撑你的业务在数字世界中稳定运行和持续成长。

*提示:在生产环境中,建议在部署前进行全面测试,并建立完善的监控和备份机制。安全配置应根据具体业务需求进行调整,在安全性和便利性之间找到合适的平衡点。

生成文章图片 - 2025-11-04T225153.147.jpg

关键词: