我使用的是vaultwarden坞容器,它基本上需要一个反向代理来提供SSL。
容器为Websockets运行单独的web服务器,因为Rust的火箭不支持同一端口上的web套接字。
关于VaultWarden的说明说:
我如何配置我的nginx反向代理来支持这个设置?
我的配置如下所示:
docker-compose.yml
version: '3'
services:
vaultwarden:
image: vaultwarden/server:1.25.2
volumes:
- /srv/vaultwarden/vaultwarden:/data/
restart: always
environment:
- WEBSOCKET_ENABLED=true
nginx:
image: nginx:1.23.1
volumes:
- /srv/vaultwarden/nginx/templates:/etc/nginx/templates
- /srv/vaultwarden/nginx/ssl:/etc/nginx/ssl
ports:
- "443:443"
environment:
- NGINX_PORT=443nginx:
server {
listen ${NGINX_PORT} ssl http2 default;
server_name _;
# SSL
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
# Web sockets
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
location / {
proxy_pass http://vaultwarden;
}
}我是否应该:
发布于 2022-08-30 15:20:03
我建议在nginx中公开端口3012:
nginx:
image: nginx:1.23.1
volumes:
- /srv/vaultwarden/nginx/templates:/etc/nginx/templates
- /srv/vaultwarden/nginx/ssl:/etc/nginx/ssl
ports:
- "443:443"
- "3012:3012"
environment:
- NGINX_PORT=443在nginx上传递WebSockets的代理可能有点棘手。我曾经很难正确地设置它(参见这个职位) --我还为WebSockets提供了一个自定义的URL/端点。
通常,WS代理可以工作的选项有几个:(1)您有用于WebSocket连接的自定义端点,或者(2) WS通过根/,但是在一个与D2不同的端口,或者(3)它更适合于socket.io (即每个端点/URL也是WS连接的一个单独的端点)。文件上说:
默认情况下,在端口3012处将/Notification/hub端点路由到WebSocket服务器,确保将连接和升级报头路由所有其他内容,包括/Notification/hub/ the,默认情况下在端口80处将其传递到标准火箭服务器
所以我想在nginx配置中应该是这样的:
# WebSocket support
location ~ ^/notifications/hub/ {
proxy_pass http://vaultwarden:3012;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
}
# HTTP proxy
location / {
proxy_pass http://vaultwarden;
}但它需要一些测试。
我希望这能对你有所帮助。
发布于 2022-08-31 14:31:55
经过一番挖掘,我发现:
如果您像上面在我的WEBSOCKET_ENABLED=true文件中那样将D0环境变量传递给vaultwarden容器,容器将启动2台服务器:
客户端没有任何关于连接到端口3012的信息。客户端尝试在/notifications/hub上设置websocket。与您的常规web服务器相同的端口。
您不需要在docker-compose.yml文件中的两个容器上公开端口3012。您所需要的只是nginx配置文件中的以下内容:
location = /notifications/hub {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Host $host;
proxy_pass http://vaultwarden:3012;
}这将透明地使nginx将所有请求重定向到/notifications/hub上的vaultwarden容器上的端口3012。
因为nginx和vaultwarden都位于相同的docker-compose.yml文件中,所以它们位于同一个内部网络上,并且nginx容器已经可以访问vaultwarden容器上的所有端口。你不需要允许这个港口在任何地方。
客户端不知道在内部,web套接字使用的是不同的端口。端口转换都发生在服务器端.
https://serverfault.com/questions/1109479
复制相似问题