插件窝 干货文章 部署Nginx+Apache动静分离的方法

部署Nginx+Apache动静分离的方法

Nginx 配置 Apache 静态 279    来源:    2025-04-26

Nginx + Apache 动静分离部署方案

方案概述

动静分离是一种常见的Web服务器优化策略,通过将动态内容和静态内容分别由不同的服务器处理,可以显著提高网站性能。本方案使用Nginx处理静态请求,Apache处理动态请求。

部署步骤

1. 环境准备

确保系统已安装以下组件: - Nginx - Apache (httpd) - PHP (如果需要PHP动态内容)

安装命令示例(CentOS/RHEL):

yum install nginx httpd php php-fpm

2. 配置Nginx

编辑Nginx配置文件(通常位于/etc/nginx/nginx.conf/etc/nginx/conf.d/default.conf):

server {
    listen 80;
    server_name yourdomain.com;

    # 静态文件处理
    location ~* \.(jpg|jpeg|gif|png|css|js|ico|xml|txt|woff|woff2|ttf|svg|eot)$ {
        root /var/www/html/static;
        expires 30d;
        access_log off;
    }

    # 动态内容代理到Apache
    location / {
        proxy_pass http://127.0.0.1:8080;
        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;
    }
}

3. 配置Apache

编辑Apache配置文件(通常位于/etc/httpd/conf/httpd.conf):

Listen 8080
ServerName localhost

<VirtualHost *:8080>
    DocumentRoot "/var/www/html/dynamic"
    ServerName yourdomain.com

    <Directory "/var/www/html/dynamic">
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    </Directory>

    # PHP配置(如果需要)
    <FilesMatch \.php$>
        SetHandler "proxy:unix:/var/run/php-fpm/php-fpm.sock|fcgi://localhost"
    </FilesMatch>
</VirtualHost>

4. 目录结构设置

创建静态和动态内容目录:

mkdir -p /var/www/html/static
mkdir -p /var/www/html/dynamic

5. 配置SELinux(如启用)

setsebool -P httpd_can_network_connect 1

6. 启动服务

systemctl start nginx
systemctl start httpd
systemctl enable nginx
systemctl enable httpd

7. 防火墙配置

firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload

优化建议

  1. 静态文件缓存:

    • 在Nginx中为不同类型的静态文件设置适当的缓存时间
  2. Gzip压缩:

    • 在Nginx中启用Gzip压缩以减小传输文件大小
  3. 负载均衡:

    • 如果有多个Apache后端,可以在Nginx中配置upstream实现负载均衡
  4. HTTPS配置:

    • 在Nginx中配置SSL证书,Apache保持HTTP

验证方法

  1. 访问静态文件(如图片、CSS)应直接由Nginx处理
  2. 访问动态页面(如PHP)应通过Nginx代理到Apache处理
  3. 检查日志确认请求流向:
    • Nginx日志: /var/log/nginx/access.log
    • Apache日志: /var/log/httpd/access_log

常见问题解决

  1. 502 Bad Gateway错误:

    • 检查Apache是否正常运行并监听8080端口
    • 检查Nginx的proxy_pass配置是否正确
  2. 静态文件404错误:

    • 确认静态文件路径与Nginx配置中的root路径一致
    • 检查文件权限
  3. 性能问题:

    • 调整Nginx和Apache的worker_processes和worker_connections
    • 考虑启用Nginx缓存或OPcache(PHP)

通过以上配置,您可以实现高效的Nginx+Apache动静分离架构,充分发挥两者的优势。