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

Nginx反向代理下Passbolt容器多域名部署配置求助(端口冲突问题)

Nginx反向代理下Passbolt容器多域名部署配置求助(端口冲突问题)

我现在遇到个棘手的问题,想请教下各位大佬:我打算在自己的服务器上用容器部署Passbolt密码管理器,但这台服务器还要同时托管好几个不同域名的网站,所以我计划用Nginx做反向代理——这玩意儿肯定得占80和443端口对吧?结果问题来了,这俩端口被Nginx占了之后,Passbolt容器直接启动失败了。我想着把Passbolt容器转到其他端口运行,但不知道怎么同时正确配置Nginx的配置文件和Passbolt的docker-compose.yml,有没有懂行的朋友能给指点指点?

我目前的Passbolt YAML配置是这样的:

version: "3.9"
services:
  db:
    image: mariadb:10.11
    restart: unless-stopped
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "true"
      MYSQL_DATABASE: "passbolt"
      MYSQL_USER: "passbolt"
      MYSQL_PASSWORD: "P4ssb0lt"
    volumes:
      - database_volume:/var/lib/mysql

  passbolt:
    #image: passbolt/passbolt:latest-ce
    #Alternatively you can use rootless image at passbolt/passbolt:latest-ce-non-root
    restart: unless-stopped
    depends_on:
      - db
    environment:
      APP_FULL_BASE_URL: https://your-passbolt-domain.com
      DATASOURCES_DEFAULT_HOST: db
      DATASOURCES_DEFAULT_USERNAME: passbolt
      DATASOURCES_DEFAULT_PASSWORD: "P4ssb0lt"
      DATASOURCES_DEFAULT_DATABASE: passbolt
    volumes:
      - passbolt_volume:/var/www/passbolt/webroot/img/public

给你整理的解决方案步骤:

1. 修改Passbolt的docker-compose.yml

核心是把Passbolt容器的端口映射从默认的80/443改成主机上未被占用的端口(比如8080和8443),同时配置Passbolt信任反向代理并正确识别外部域名:

version: "3.9"
services:
  db:
    image: mariadb:10.11
    restart: unless-stopped
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: "true"
      MYSQL_DATABASE: "passbolt"
      MYSQL_USER: "passbolt"
      MYSQL_PASSWORD: "P4ssb0lt"
    volumes:
      - database_volume:/var/lib/mysql

  passbolt:
    image: passbolt/passbolt:latest-ce
    restart: unless-stopped
    depends_on:
      - db
    environment:
      # 替换成你的Passbolt实际域名
      APP_FULL_BASE_URL: https://passbolt.yourdomain.com
      DATASOURCES_DEFAULT_HOST: db
      DATASOURCES_DEFAULT_USERNAME: passbolt
      DATASOURCES_DEFAULT_PASSWORD: "P4ssb0lt"
      DATASOURCES_DEFAULT_DATABASE: passbolt
      # 信任Nginx反向代理,允许容器识别真实客户端IP和协议
      TRUSTED_PROXIES: "127.0.0.1,localhost"
    ports:
      # 把容器的80端口映射到主机的8080,443映射到8443
      - "8080:80"
      - "8443:443"
    volumes:
      - passbolt_volume:/var/www/passbolt/webroot/img/public

volumes:
  database_volume:
  passbolt_volume:

2. 配置Nginx反向代理规则

针对你的Passbolt域名,新建一个Nginx配置文件(比如/etc/nginx/sites-available/passbolt.conf),内容如下:

# HTTP跳转HTTPS
server {
    listen 80;
    server_name passbolt.yourdomain.com;
    return 301 https://$host$request_uri;
}

# HTTPS反向代理到Passbolt容器
server {
    listen 443 ssl;
    server_name passbolt.yourdomain.com;

    # 替换成你的SSL证书路径
    ssl_certificate /path/to/your/fullchain.pem;
    ssl_certificate_key /path/to/your/privkey.pem;

    # 基础SSL配置(可选但推荐)
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_ciphers HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

    location / {
        # 反向代理到Passbolt容器映射的主机端口
        proxy_pass http://localhost:8080;
        # 传递必要的请求头,保证Passbolt能正确识别请求
        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;
    }
}

配置完后,启用这个站点并重启Nginx:

sudo ln -s /etc/nginx/sites-available/passbolt.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx

3. 启动Passbolt容器

执行以下命令启动容器:

docker-compose up -d

这样配置后,Nginx会接管80/443端口,把针对Passbolt域名的请求转发到容器的8080端口,既解决了端口冲突,也能正常实现多域名托管。

备注:内容来源于stack exchange,提问作者mic f

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 08:53:18