You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署Laravel项目:服务器是否需装Nginx?多站点端口问题

问题解答

1. 服务器是否需要单独安装Nginx?

不需要。当前你的Docker容器已经通过80:80的端口映射,将容器内Nginx的80端口绑定到了服务器主机的80端口,外部请求会直接转发到容器中的Nginx处理。注意:确保服务器主机上没有其他程序(如已安装的Nginx、Apache)占用80端口,否则容器启动会失败。

2. 同一服务器部署另一站点直接暴露80端口会冲突吗?

会冲突。服务器主机的端口是全局唯一的,同一端口只能被一个进程(或容器端口映射)占用。如果第二个项目也配置80:80的端口映射,Docker会直接报错提示端口已被占用。

解决方案

推荐两种生产环境常用的方式:

方式一:用主机Nginx做反向代理(首选)

在服务器上安装Nginx,将主机的80/443端口留给这个Nginx,由它统一处理所有外部请求,再根据域名转发到对应的Docker容器:

  1. 修改现有项目的docker-compose.yml,去掉80:80的端口映射(或改为内部端口,如8080:80),让容器仅在内部网络提供服务:
    services:
      nginx:
        # 其他配置不变
        # 注释或删除ports行
        # ports:
        #   - 80:80      
        networks:
          - laravel
    networks:
      laravel:
        name: laravel-shared # 自定义共享网络,让多个项目容器和主机Nginx互通
    
  2. 在主机Nginx中添加站点配置,比如针对第一个站点:
    server {
        listen 80;
        server_name site1.example.com;
    
        location / {
            proxy_pass http://nginx-site1; # 替换为你的容器名称或服务名
            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. 第二个项目同理,创建对应的容器和主机Nginx配置,通过不同域名区分站点。这种方式可以统一管理SSL证书,更灵活且用户体验更好。

方式二:修改端口映射(仅适合测试场景)

将第二个项目的端口映射改为不同的主机端口,比如:

ports:
  - 8080:80

但用户访问时需要手动添加端口号(如http://example.com:8080),生产环境不推荐这种方式。

内容的提问来源于stack exchange,提问作者DeveloperX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:12:37