centos nginx搭建lnmp 实现动静分离
时间: 2025-07-20 22:21:38 浏览: 2
<think>我们正在配置LNMP环境(Linux, Nginx, MySQL, PHP)并实现动静分离。动静分离指的是将静态请求(如HTML、CSS、JavaScript、图片等)和动态请求(如PHP脚本)分开处理,静态请求由Nginx直接处理,动态请求则通过FastCGI协议转发给PHP-FPM处理。
步骤概述:
1. 安装必要的软件:Nginx, MySQL, PHP-FPM及PHP相关模块。
2. 配置Nginx,设置静态文件和动态请求的处理方式。
3. 配置PHP-FPM,确保Nginx能够正确转发动态请求。
4. 测试静态资源和PHP脚本的访问。
详细步骤:
### 1. 安装软件
在CentOS上,我们可以使用yum进行安装。首先更新系统:
```bash
sudo yum update -y
```
安装Nginx:
```bash
sudo yum install epel-release -y
sudo yum install nginx -y
```
安装MySQL(这里以MariaDB为例,它是MySQL的一个分支):
```bash
sudo yum install mariadb-server mariadb -y
```
安装PHP和PHP-FPM(这里以PHP7.4为例,CentOS7默认仓库可能没有PHP7.4,需要先启用EPEL和Remi仓库):
```bash
# 启用Remi仓库(CentOS7)
sudo yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm -y
sudo yum install yum-utils -y
sudo yum-config-manager --enable remi-php74
# 安装PHP和PHP-FPM
sudo yum install php php-fpm php-mysqlnd php-opcache php-gd php-xml php-mbstring -y
```
### 2. 启动服务并设置开机自启
```bash
sudo systemctl start nginx
sudo systemctl enable nginx
sudo systemctl start mariadb
sudo systemctl enable mariadb
sudo systemctl start php-fpm
sudo systemctl enable php-fpm
```
### 3. 配置MySQL
运行安全安装脚本:
```bash
sudo mysql_secure_installation
```
按照提示设置root密码,并移除匿名用户、禁止root远程登录等。
### 4. 配置Nginx实现动静分离
我们需要编辑Nginx的配置文件。通常主配置文件在`/etc/nginx/nginx.conf`,但为了模块化,我们可以在`/etc/nginx/conf.d/`目录下创建新的配置文件,例如`default.conf`。
编辑配置文件(这里以默认的server块配置为例):
```bash
sudo vi /etc/nginx/conf.d/default.conf
```
添加以下内容:
```nginx
server {
listen 80;
server_name localhost;
# 设置默认首页
index index.php index.html index.htm;
# 静态文件直接由Nginx处理
location ~* \.(js|css|png|jpg|jpeg|gif|ico|html|txt|woff|woff2|ttf|svg|eot)$ {
root /usr/share/nginx/html;
expires 30d; # 设置缓存时间
}
# 动态请求(PHP文件)转发给PHP-FPM处理
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000; # PHP-FPM监听的地址
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 根目录配置
location / {
root /usr/share/nginx/html;
try_files $uri $uri/ /index.php?$query_string;
}
# 错误页面
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
```
注意:
- 静态文件扩展名列表可以根据需要调整。
- `root`指令指定了网站根目录,这里使用Nginx默认的`/usr/share/nginx/html`,你可以根据实际情况修改。
- 动态请求(PHP)通过`fastcgi_pass`转发到PHP-FPM(默认监听在127.0.0.1:9000)。
### 5. 配置PHP-FPM
PHP-FPM的配置文件通常位于`/etc/php-fpm.d/www.conf`。我们需要确保其监听方式与Nginx配置中的`fastcgi_pass`一致。
打开配置文件:
```bash
sudo vi /etc/php-fpm.d/www.conf
```
检查以下配置:
```ini
; 监听方式:套接字或IP:端口
; 这里使用IP:端口,确保与Nginx配置中的fastcgi_pass一致
listen = 127.0.0.1:9000
; 用户和组,建议设置为与Nginx运行用户一致(通常为nginx)
user = nginx
group = nginx
; 其他配置保持默认,或根据需求调整
```
### 6. 重启服务
修改配置后,重启Nginx和PHP-FPM使配置生效:
```bash
sudo systemctl restart nginx
sudo systemctl restart php-fpm
```
### 7. 测试
在网站根目录(如`/usr/share/nginx/html`)创建测试文件:
静态文件测试:创建一个`test.html`文件:
```bash
echo "Hello, this is static content!" > /usr/share/nginx/html/test.html
```
动态请求测试:创建一个`info.php`文件:
```bash
echo "<?php phpinfo(); ?>" > /usr/share/nginx/html/info.php
```
在浏览器中访问:
- 静态文件:http://服务器IP/test.html
- PHP信息:http://服务器IP/info.php
如果静态文件直接显示内容,PHP页面显示PHP信息页面,则配置成功。
### 注意事项
1. 防火墙:确保80端口开放(如果是生产环境,可能还需要配置安全组)。
```bash
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
```
2. SELinux:如果遇到权限问题,可能需要调整SELinux策略或临时禁用(生产环境谨慎操作)。
```bash
# 临时禁用
sudo setenforce 0
# 永久禁用(需重启)
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
```
或者,为Nginx和PHP-FPM设置合适的SELinux上下文:
```bash
sudo chcon -R -t httpd_sys_content_t /usr/share/nginx/html/
```
通过以上步骤,我们就在CentOS系统上使用Nginx搭建了LNMP环境并实现了动静分离。
§§相关问题§§
1. 如何优化Nginx的静态文件处理性能?
2. PHP-FPM的进程管理有哪些模式?如何配置?
3. 在LNMP环境中,如何配置MySQL以支持高并发?
4. 如何为Nginx配置SSL证书以实现HTTPS?
5. 动静分离架构中,如何处理静态资源的CDN加速?</think>### CentOS 7 下配置 LNMP 动静分离详解
#### 1. 环境安装
```bash
# 安装 Nginx
sudo yum install epel-release -y
sudo yum install nginx -y
# 安装 MySQL (MariaDB)
sudo yum install mariadb-server mariadb -y
# 安装 PHP 和 PHP-FPM
sudo yum install php php-fpm php-mysqlnd -y
```
#### 2. 配置动静分离
编辑 Nginx 配置文件 `/etc/nginx/nginx.conf`:
```nginx
http {
server {
listen 80;
server_name your_domain.com;
root /usr/share/nginx/html;
# 静态资源处理 (图片/CSS/JS等)
location ~* \.(jpg|jpeg|gif|png|css|js|ico|woff|ttf)$ {
expires 30d; # 缓存30天
add_header Cache-Control "public";
try_files $uri =404;
}
# 动态请求转发到 PHP-FPM
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 首页请求处理
location / {
try_files $uri $uri/ /index.php?$query_string;
}
}
}
```
#### 3. 配置 PHP-FPM
修改 `/etc/php-fpm.d/www.conf`:
```ini
user = nginx # 与Nginx用户一致
group = nginx
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic # 动态进程管理
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
```
#### 4. 启动服务并设置开机自启
```bash
sudo systemctl start nginx mariadb php-fpm
sudo systemctl enable nginx mariadb php-fpm
```
#### 5. 验证测试
- 静态资源测试:在 `/usr/share/nginx/html` 放置 `test.jpg`,访问 `http://服务器IP/test.jpg`
- 动态请求测试:创建 `info.php`:
```php
<?php phpinfo(); ?>
```
访问 `http://服务器IP/info.php` 应显示PHP信息页
#### 6. 性能优化建议
1. 静态资源缓存:Nginx 配置中 `expires` 指令可减少重复请求
2. Gzip 压缩:在 `nginx.conf` 中添加:
```nginx
gzip on;
gzip_types text/plain text/css application/json application/javascript;
```
3. PHP-FPM 进程优化:根据服务器内存调整 `pm.max_children`(建议每进程按 20-30MB 内存估算)
---
###
阅读全文
相关推荐

















