基于bitnami/nginx:latest的类群晖反向代理Nginx配置求助
正确的Nginx配置方案(适配bitnami/nginx:latest)
前置全局依赖:WebSocket变量定义
首先要在http上下文(可放在bitnami nginx的/opt/bitnami/nginx/conf/vhosts/目录下的任意.conf文件中)添加WebSocket需要的变量映射,否则连接升级逻辑会失效:
# 定义WebSocket连接升级的Connection头规则 map $http_upgrade $connection_upgrade { default upgrade; '' close; }
完整站点配置(直接保存为vhosts目录下的my-example-proxy.conf)
# -------------------------- # 1. HTTP强制跳转HTTPS块(对应bitnami容器内8080端口,映射宿主80端口) # -------------------------- server { listen 8080; listen [::]:8080; server_name ~^(.*)\.my-example\.com$; # 强制301永久跳转HTTPS,不暴露原端口 return 301 https://$host$request_uri; } # 拦截恶意请求的HTTP默认块 server { listen 8080 default_server; listen [::]:8080 default_server; server_name _; return 444; } # -------------------------- # 2. HTTPS反向代理块(对应bitnami容器内8443端口,映射宿主443端口) # -------------------------- server { # bitnami默认HTTPS监听端口为8443,已映射宿主443 listen 8443 ssl; listen [::]:8443 ssl; server_name ~^(.*)\.my-example\.com$; # 证书路径(适配bitnami默认路径,自行替换为实际证书文件) ssl_certificate /opt/bitnami/nginx/conf/bitnami/certs/server.crt; ssl_certificate_key /opt/bitnami/nginx/conf/bitnami/certs/server.key; # 可选:优化SSL配置 ssl_session_cache shared:SSL:10m; ssl_protocols TLSv1.2 TLSv1.3; # 日志路径 access_log /opt/bitnami/nginx/logs/my-example_access.log; error_log /opt/bitnami/nginx/logs/my-example_error.log; location / { # 基础反代头配置 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; # *WebSocket专属核心配置* proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; # 后端转发地址:根据实际后端协议调整,若后端是HTTP则用http://,自签HTTPS证书需加`proxy_ssl_verify off` proxy_pass http://127.0.0.1:30000; # 关闭重定向覆盖,避免后端跳转暴露端口 proxy_redirect off; # 可选:WebSocket超时配置,避免长连接被断开 proxy_read_timeout 86400s; proxy_send_timeout 86400s; } } # 拦截恶意请求的HTTPS默认块 server { listen 8443 ssl default_server; listen [::]:8443 ssl default_server; server_name _; # 恶意请求直接断开连接 return 444; }
原配置的核心错误修正点
- 原HTTP块直接做反代,未实现HTTP强制跳转HTTPS,拆分跳转逻辑和反代逻辑后满足需求
- 缺少
$connection_upgrade的全局map定义,WebSocket握手会直接失败 - 原
proxy_pass https://$host:30000$request_uri/写法错误:末尾加/+拼接$request_uri会导致路径重复拼接为//,正确写法直接写后端地址,Nginx会自动透传完整请求路径 - 未配置对应HTTPS的监听块,所有请求走HTTP不符合安全要求
适配bitnami镜像的注意事项
- bitnami/nginx:latest默认端口映射规则为:宿主80→容器8080,宿主443→容器8443,无需额外修改监听端口
- 自定义配置文件必须放在
/opt/bitnami/nginx/conf/vhosts/目录下,才会被Nginx自动加载 - 若后端服务是独立Docker容器,需把
proxy_pass中的127.0.0.1替换为后端容器的服务名/内网IP - 若后端是HTTPS协议,需把
proxy_pass改为https://后端地址:30000,且添加proxy_ssl_verify off跳过自签证书校验
内容的提问来源于stack exchange,提问作者Fabiansc
相关产品推荐
相关产品推荐

