2 LEMP环境搭建

138 次浏览

LEMP 环境(Linux、Nginx、MySQL/MariaDB、PHP)是搭建动态网站和 Web 应用的高性能基础平台,因其轻量级高性能被广泛青睐。以下是搭建的详细步骤。

1、准备工作

更新软件包

sudo apt update && sudo apt upgrade -y

配置防火墙

sudo ufw allow 'Nginx Full' # 允许80和443端口
sudo ufw allow OpenSSH # 允许SSH
sudo ufw enable # 启用防火墙
sudo ufw status # 验证规则

2、安装与配置Nginx

sudo apt install nginx -y

启动并设置开机自启

sudo systemctl start nginx
sudo systemctl enable nginx  # 设置开机自启
sudo systemctl status nginx  # 检查运行状态

此时在浏览器输入你的服务器IP,应能看到Nginx欢迎页。

3、安装与配置数据库 MySQL

sudo apt install mysql-server -y

启动并设置开机自启

sudo systemctl start mysqld
sudo systemctl enable mysqld

运行安全配置脚本

这是一个关键的安全步骤,用于设置 root 密码、移除匿名用户、禁用远程 root 登录等。

sudo mysql_secure_installation

根据提示依次进行安全设置。

(可选)创建专用数据库和用户

为你的应用程序创建独立的数据库和用户,而不是使用 root 账户。

sudo mysql -u root -p

在 MySQL shell 中执行:

-- 创建新数据库
CREATE DATABASE myappdb;
-- 创建新用户并设置密码
CREATE USER 'myappuser'@'localhost' IDENTIFIED BY 'your_strong_password';
-- 授予用户对数据库的所有权限
GRANT ALL PRIVILEGES ON myappdb.* TO 'myappuser'@'localhost';
-- 刷新权限使更改生效
FLUSH PRIVILEGES;
-- 退出
EXIT;

4、安装与配置PHP

PHP 负责处理动态内容,PHP-FPM(FastCGI Process Manager)则管理 PHP 进程并与 Nginx 通信

sudo apt install php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip -y

配置 PHP-FPM

主要配置文件通常是 /etc/php/{version}/fpm/php.ini一个常见的安全调整是:

sudo sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/' /etc/php/7.4/fpm/php.ini # 请根据实际版本修改路径

此设置可防止 PHP 尝试执行不存在的文件。

启动并启用 PHP-FPM

sudo systemctl start php7.4-fpm # 名称可能因版本而异 php8.1-fpm, php-fpm
sudo systemctl enable php7.4-fpm

配置 Nginx 使用 PHP-FPM

sudo nano /etc/nginx/conf.d/wordpress.conf

内容如下:

erver {
    listen 443 ssl http2;         # 启用 HTTP/2 可以提供更好的性能
    listen [::]:443 ssl http2;    # 启用 IPv6 支持
    server_name your-domain.com;  # 自己的域名

    #避免413报错
    client_max_body_size 64M;

    # SSL 证书路径使用Let's Encrypt生成
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    # 网站根目录指向 WordPress
    root /var/www/html;
    # 定义默认索引文件按优先级顺序查找
    index index.php index.html index.htm;

    #  location 处理所有请求
    location / {
        # try_files 指令尝试按顺序服务文件
        # 1. 首先尝试直接访问请求的 URI文件
        # 2. 如果找不到尝试访问以 URI 命名的目录
        # 3. 如果都找不到将请求转发给 index.php并附带查询参数
        try_files $uri $uri/ /index.php?$args;
    }

    # 处理静态文件缓存 - 提高性能
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
        # 设置较长的过期时间(1年),利用浏览器缓存
        expires 1y;
        # 关闭访问日志,减少磁盘写入
        access_log off;
        # 添加缓存控制头
        add_header Cache-Control "public, immutable";
        # 尝试直接访问文件,如果找不到则返回 404
        try_files $uri =404;
    }

    # 处理PHP请求
    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; # 请根据实际 PHP 版本调整
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
    
    # 保护敏感文件不被访问
    location ~ /\. {
        # 拒绝访问所有以点开头的隐藏文件(如 .htaccess, .git, .env 等)
        deny all;
        # 关闭访问日志
        access_log off;
        # 关闭错误日志
        log_not_found off;
    }

    # 特别保护 wp-config.php 文件
    location = /wp-config.php {
        deny all;
        access_log off;
        log_not_found off;
    }
}

# 重定向所有HTTP(80)请求到HTTPS(443)
server {
    listen 80;
    listen [::]:80;                # 启用IPv6支持
    server_name your-domain.com;   # 自己的域名
    
    # 告诉搜索引擎和浏览器这是一个永久重定向
    return 301 https://$server_name$request_uri;
}

测试配置并重载 Nginx

sudo nginx -t # 检查配置文件语法是否正确
sudo systemctl reload nginx # 重载配置不会中断服务

5、测试 LEMP 环境

创建一个 PHP 信息页来验证所有组件是否协同工作。

创建测试文件

sudo echo "" > /var/www/html/info.php

在浏览器中访问

打开浏览器,访问 http://your_server_ip/info.php。
你应该能看到一个显示 PHP 配置详细信息的页面,其中包含 MySQL/MariaDB 和 PHP-FPM 的相关信息。

移除测试文件(安全重要!)

测试成功后,务必删除此测试文件,以免泄露服务器信息。

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

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部