如何配置Nginx与Apache共用80端口实现多项目访问?
当然可以实现!两种方向的配置都可行,我来分别给你详细说明:
方案一:Apache作为前端(80端口),转发/nginx1、/nginx2请求到Nginx(8000端口)
这种方案不需要改动现有Apache的80端口配置,只需要给Apache添加反向代理规则,把指定路径的请求转发到Nginx的8000端口即可。
步骤1:启用Apache的代理模块
首先要确保Apache的mod_proxy和mod_proxy_http模块已经启用,在终端执行:
a2enmod proxy proxy_http
执行完成后重启Apache生效:
systemctl restart apache2 # 或者根据你的系统用 service apache2 restart
步骤2:修改Apache虚拟主机配置
找到你的Apache虚拟主机配置文件(通常在/etc/apache2/sites-available/myserver.conf这类路径),添加以下规则:
<VirtualHost *:80> ServerName myserver.com # 保留原有Apache项目的配置 Alias /apache1 /path/to/your/apache1/project <Directory /path/to/your/apache1/project> AllowOverride All Require all granted </Directory> Alias /apache2 /path/to/your/apache2/project <Directory /path/to/your/apache2/project> AllowOverride All Require all granted </Directory> # 添加反向代理规则,转发Nginx项目请求 ProxyPass /nginx1 http://localhost:8000/nginx1 ProxyPassReverse /nginx1 http://localhost:8000/nginx1 ProxyPass /nginx2 http://localhost:8000/nginx2 ProxyPassReverse /nginx2 http://localhost:8000/nginx2 </VirtualHost>
ProxyPass:将/nginx1路径的请求转发到Nginx的对应路径ProxyPassReverse:修改响应头中的地址,避免客户端收到localhost:8000的地址,保证跳转和资源路径正确
步骤3:重启Apache
配置修改后重启Apache,让规则生效:
systemctl restart apache2
方案二:Nginx作为前端(80端口),转发/apache1、/apache2请求到Apache
如果更倾向让Nginx作为统一的流量入口(80端口),可以把Apache的监听端口改成8080,然后让Nginx转发对应路径到Apache。
步骤1:修改Apache的监听端口
找到Apache的主配置文件(比如/etc/apache2/httpd.conf或/etc/apache2/ports.conf),把Listen 80改成:
Listen 8080
重启Apache生效:
systemctl restart apache2
步骤2:修改Nginx配置
找到Nginx的站点配置文件(比如/etc/nginx/sites-available/myserver.conf),添加以下规则:
server { listen 80; server_name myserver.com; # 保留原有Nginx项目的配置 location /nginx1 { root /path/to/your/nginx1/project; index index.html index.php; # 根据你的项目类型调整索引文件 } location /nginx2 { root /path/to/your/nginx2/project; index index.html index.php; } # 添加反向代理规则,转发Apache项目请求 location /apache1 { proxy_pass http://localhost:8080/apache1; # 设置必要的请求头,保证Apache能正确识别请求来源 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /apache2 { proxy_pass http://localhost:8080/apache2; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
步骤3:验证Nginx配置并重启
先验证配置是否正确:
nginx -t
如果提示test is successful,就重启Nginx:
systemctl restart nginx
总结
两种方案都能实现你的需求:
- 方案一适合不想改动现有Apache端口的场景,直接在Apache上添加代理规则即可
- 方案二更适合希望用Nginx作为统一流量入口的场景,需要调整Apache的监听端口
测试的时候直接访问myserver.com/apache1、myserver.com/apache2、myserver.com/nginx1、myserver.com/nginx2就能分别对应到各自的项目了。
内容的提问来源于stack exchange,提问作者JMY
相关产品推荐
相关产品推荐

