带TLS的Nginx反向代理jBPM Business-Central异常排查
解决jBPM通过Nginx反向代理后登录页面空白问题
问题分析
直接访问http://[IP]:8080功能正常,但通过https://my.domain.com登录后页面空白,核心原因是Nginx代理头配置不全,且Wildfly(jBPM底层容器)未正确识别反向代理的请求上下文,导致静态资源加载失败、API请求路径错误或WebSocket连接中断。
修复步骤
1. 修正Nginx站点配置(my.domain.com.conf)
以下是调整后的配置,重点修复了关键问题:
- 替换中文引号为英文引号(
Connection "upgrade") - 添加
X-Forwarded-Host头,让jBPM识别外部访问域名 - 调整
proxy_pass路径匹配逻辑,避免上下文路径冲突 - 优化静态资源代理规则
- 补充WebSocket连接的必要配置
server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name my.domain.com; include /config/nginx/ssl.conf; client_max_body_size 0; location / { return 301 https://$host/business-central/; } location /business-central/ { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app jbpm; set $upstream_port 8080; set $upstream_proto http; # 确保请求上下文完整传递 proxy_pass $upstream_proto://$upstream_app:$upstream_port$request_uri; # 核心代理头,让Wildfly识别反向代理来源 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; proxy_set_header X-Forwarded-Host $host; # 禁用压缩避免静态资源解析异常 proxy_set_header Accept-Encoding ""; # WebSocket支持(修复引号格式问题) proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_http_version 1.1; # 延长超时时间避免连接中断 proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; } # 可选:处理jBPM的kie-server上下文(若需使用相关服务) location /kie-server/ { include /config/nginx/proxy.conf; include /config/nginx/resolver.conf; set $upstream_app jbpm; set $upstream_port 8080; set $upstream_proto http; proxy_pass $upstream_proto://$upstream_app:$upstream_port$request_uri; 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; proxy_set_header X-Forwarded-Host $host; proxy_http_version 1.1; proxy_connect_timeout 300s; proxy_send_timeout 300s; proxy_read_timeout 300s; } } server { listen 80; server_name my.domain.com; location / { return 301 https://$host$request_uri; } location ~ /.well-known/acme-challenge { allow all; root /config/www; } }
2. 配置jBPM/Wildfly信任反向代理
需要让Wildfly识别反向代理为可信来源,避免IP和请求路径识别错误,两种实现方式:
方式1:通过Docker Compose添加环境变量
在jbpm服务的environment节点中添加:
- JAVA_OPTS=-Dorg.jboss.as.web.proxy-address-forwarding=true
方式2:挂载自定义Wildfly配置文件
- 从运行中的jBPM容器复制默认配置:
docker cp jbpm:/opt/jboss/wildfly/standalone/configuration/standalone.xml ./standalone.xml
- 编辑
standalone.xml,找到undertow子系统,给http-listener添加proxy-address-forwarding="true":
<subsystem xmlns="urn:jboss:domain:undertow:12.0" default-server="default-server" default-virtual-host="default-host" default-servlet-container="default" default-security-domain="other"> <server name="default-server"> <http-listener name="default" socket-binding="http" proxy-address-forwarding="true"/> <!-- 其余配置保持不变 --> </server> <!-- 其余配置保持不变 --> </subsystem>
- 在Docker Compose的
jbpm服务中添加挂载:
volumes: - ./standalone.xml:/opt/jboss/wildfly/standalone/configuration/standalone.xml
3. 重启服务
修改配置后,重启所有容器生效:
docker-compose down && docker-compose up -d
验证
访问https://my.domain.com/business-central/,登录后检查浏览器控制台是否存在404/500错误,若无异常则配置生效。
内容的提问来源于stack exchange,提问作者Panagiss
相关产品推荐
相关产品推荐

