插件窝 干货文章 Linux服务器下Nginx与Apache共存如何实现

Linux服务器下Nginx与Apache共存如何实现

Nginx Apache 端口 处理 224    来源:    2025-04-22

Linux服务器下Nginx与Apache共存实现方案

方案概述

在Linux服务器上同时运行Nginx和Apache是可行的,通常有以下两种主流配置方式:

方案一:Nginx作为前端代理,Apache作为后端应用服务器(推荐)

这是最常见的配置方式,利用Nginx处理静态内容和高并发连接,Apache处理动态内容(如PHP)。

实现步骤

  1. 修改Apache监听端口

    # 编辑Apache配置文件(路径可能因发行版不同)
    sudo nano /etc/apache2/ports.conf
    
    # 修改监听端口为8080(或其他非80端口)
    Listen 8080
    
  2. 配置虚拟主机使用新端口

    sudo nano /etc/apache2/sites-available/000-default.conf
    
    # 修改为
    <VirtualHost *:8080>
       # 您的配置
    </VirtualHost>
    
  3. 重启Apache

    sudo systemctl restart apache2
    
  4. 配置Nginx作为反向代理

    sudo nano /etc/nginx/sites-available/default
    
    # 添加或修改server块
    server {
       listen 80;
       server_name yourdomain.com;
    
       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;
       }
    
       # Nginx直接处理静态文件
       location ~* \.(jpg|jpeg|gif|png|css|js|ico|webp|tiff|woff|woff2)$ {
           root /var/www/html;
           expires 30d;
           access_log off;
       }
    }
    
  5. 测试并重启Nginx

    sudo nginx -t
    sudo systemctl restart nginx
    

方案二:Nginx和Apache分别处理不同服务(基于端口或域名)

基于不同端口

  • Nginx监听80端口
  • Apache监听8080端口
  • 用户访问时根据端口区分服务

基于不同域名

  • Nginx配置处理domain1.com
  • Apache配置处理domain2.com
  • 通过DNS解析将不同域名指向同一服务器

优化建议

  1. 静态文件处理:配置Nginx直接处理静态文件(如图片、CSS、JS),减轻Apache负担

  2. 连接数优化

    • 降低Apache的MaxClients值(因为Nginx会处理大部分连接)
    • 增加Nginx的worker_connections
  3. 缓存配置:在Nginx中配置缓存代理内容

  4. 日志处理:确保正确记录原始客户端IP而非本地代理IP

常见问题解决

  1. 端口冲突:确保Nginx和Apache不监听同一端口

  2. PHP处理问题:如果使用PHP-FPM,可直接由Nginx处理,无需经过Apache

  3. 性能问题:监控服务器资源使用情况,适当调整进程数和连接数

  4. .htaccess问题:Nginx不原生支持.htaccess,需要将规则转换为Nginx格式或保留Apache处理相关目录

验证方法

  1. 检查服务状态:

    systemctl status nginx
    systemctl status apache2
    
  2. 检查监听端口:

    netstat -tulnp | grep -E 'nginx|apache'
    
  3. 测试访问:分别通过不同端口或域名访问验证服务是否正常工作

这种配置结合了Nginx的高性能静态文件处理和Apache的成熟动态内容处理能力,适合大多数Web应用场景。