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
相关产品推荐
相关产品推荐

