如何配置Apache2与主机,将流量转发至Bitwarden的Nginx Docker容器
没问题,我来一步步帮你搞定这个配置——既要让Bitwarden通过子域名正常访问,又不干扰现有Apache托管的站点,核心就是用Apache的反向代理功能把指定子域名的流量转发到Docker容器的端口上。下面是具体步骤:
首先得确保你的子域名bitwarden.domain.com已经指向服务器的公网IP。登录你的域名服务商后台,添加一条A记录,将bitwarden子域名指向服务器的公网IP即可。这一步是基础,否则域名无法定位到你的服务器。
Bitwarden的Docker镜像默认会占用80/443端口,但你的主机已经跑了Apache2(占用了这两个端口),所以我们需要把容器端口映射到主机的其他闲置端口(比如8081和8443),并且只允许本地访问这些端口,避免直接暴露公网。
- 先创建Bitwarden的数据存储目录(用来持久化数据):
mkdir -p /opt/bitwarden cd /opt/bitwarden
- 运行Docker容器,设置关键环境变量和端口映射:
docker run -d \ --name bitwarden \ -v /opt/bitwarden:/data \ -e WEBSERVER_HOST=bitwarden.domain.com \ -e WEBSERVER_HTTP_PORT=8081 \ -e WEBSERVER_HTTPS_PORT=8443 \ -p 127.0.0.1:8081:8081 \ -p 127.0.0.1:8443:8443 \ bitwardenrs/server:latest
注:如果使用官方Bitwarden云镜像而非
bitwardenrs,命令参数会略有不同,但反向代理逻辑一致,只需调整容器端口映射即可。
为bitwarden.domain.com创建专属的虚拟主机配置,让Apache识别该子域名并转发流量到Docker容器。
- 创建虚拟主机配置文件:
sudo nano /etc/apache2/sites-available/bitwarden.conf
- 粘贴以下配置内容(先配置HTTP重定向,后续通过Certbot自动完善SSL):
<VirtualHost *:80> ServerName bitwarden.domain.com # 强制将HTTP请求重定向到HTTPS(Bitwarden要求必须使用HTTPS) Redirect permanent / https://bitwarden.domain.com/ </VirtualHost> <VirtualHost *:443> ServerName bitwarden.domain.com # 启用反向代理并保留主机头信息 ProxyPreserveHost On ProxyPass / http://127.0.0.1:8081/ ProxyPassReverse / http://127.0.0.1:8081/ # SSL证书路径后续由Certbot自动填充 SSLEngine on SSLCertificateFile /etc/letsencrypt/live/bitwarden.domain.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/bitwarden.domain.com/privkey.pem </VirtualHost>
Apache需要几个模块来支持反向代理和SSL功能,运行以下命令启用:
sudo a2enmod proxy proxy_http ssl rewrite headers
Bitwarden必须通过HTTPS访问,我们用Certbot免费获取Let's Encrypt证书,它还会自动完善Apache的SSL配置。
- 安装Certbot及Apache插件:
sudo apt update && sudo apt install certbot python3-certbot-apache
- 运行Certbot获取证书并自动配置虚拟主机:
sudo certbot --apache -d bitwarden.domain.com
按照提示操作,选择“重定向HTTP到HTTPS”选项,完成后Certbot会自动更新你的bitwarden.conf文件,填充正确的SSL证书路径。
- 启用刚创建的虚拟主机:
sudo a2ensite bitwarden.conf
- 检查Apache配置语法是否正确:
sudo apache2ctl configtest
如果输出Syntax OK,则重启Apache服务:
sudo systemctl restart apache2
- 现在访问
https://bitwarden.domain.com,应该能正常看到Bitwarden的登录/注册页面,同时原有站点和子域名不受任何影响。 - 如果服务器启用了防火墙(如ufw),确保开放80和443端口:
sudo ufw allow 80/tcp && sudo ufw allow 443/tcp - 定期更新Docker容器和Apache以保证安全:
docker pull bitwardenrs/server:latest && docker restart bitwarden,以及sudo apt update && sudo apt upgrade
内容的提问来源于stack exchange,提问作者spcial




