WSO2 AM 4.1.0配Nginx后无法登录Publisher/Devportal
WSO2 APIM 4.1.0 反向代理后authenticationendpoint 404修复方案
核心问题点
故障由两处配置错误共同导致:
- deployment.toml缺少反向代理必填配置,后端服务生成的认证跳转路径携带内部管理端口、错误上下文前缀,触发重定向异常
- Nginx规则存在逻辑错误:根路径强制跳转认证页、location路径匹配规则不严谨、缺少HTTPS协议标识头,导致请求转发到后端时路径丢失或协议识别错误
故障现象为访问Publisher/Devportal时浏览器控制台报404错误:
修复步骤
1. 修改deployment.toml配置
替换原有配置为以下内容,将<mydomain>替换为实际对外域名:
[server] hostname = "<mydomain>" # 移除原配置中带内部管理端口的base_path,直接指向代理后的对外HTTPS地址 base_path = "https://${carbon.host}" server_role = "default" web_context_root = "/" [transport.https.properties] proxyPort = 443 proxiedHost = "<mydomain>" # 开启反向代理模式 [reverse_proxy] enabled = true # 显式指定OAuth相关端点的对外地址,避免后端生成内部跳转路径 [oauth] auth_endpoint = "https://<mydomain>/authenticationendpoint" token_endpoint = "https://<mydomain>/oauth2/token" revoke_endpoint = "https://<mydomain>/oauth2/revoke" introspect_endpoint = "https://<mydomain>/oauth2/introspect" userinfo_endpoint = "https://<mydomain>/oauth2/userinfo"
配置修改完成后重启WSO2 APIM服务,确认服务9443端口正常监听后再操作Nginx配置。
2. 修改Nginx配置
原Nginx配置存在三个明确错误:
- 根路径
/直接301跳转到/authenticationendpoint/,拦截了publisher、devportal等正常应用路径的访问 - location匹配未处理斜杠拼接规则,转发到后端时容易出现路径重复、前缀丢失问题
- 缺少
X-Forwarded-Proto头,后端无法识别前端HTTPS协议,会生成HTTP开头的跳转链接触发异常
替换443对应的server块配置为以下内容,替换其中的后端IP、证书路径、域名为实际值:
server { listen 80; server_name <MY_DOMAIN>; return 301 https://<MY_DOMAIN>$request_uri; } server { listen 443 ssl; ssl_certificate /etc/nginx/ssl/<MY_CER>.cer; ssl_certificate_key /etc/nginx/ssl/<MY_KEY>.key; access_log /var/log/nginx/<CONF>.access.log; error_log /var/log/nginx/<CONF>.error.log; server_name <MY_DOMAIN>; add_header X-Frame-Options "SAMEORIGIN"; add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload"; add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; add_header X-XSS-Protection "1; mode=block"; add_header 'Referrer-Policy' 'origin'; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; # 移除原根路径强制跳转认证页的错误规则,默认转发所有请求到后端 location / { limit_except GET HEAD POST PUT DELETE OPTIONS { deny all; } proxy_pass https://xx.x.x.x:9443; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; # 传递HTTPS协议标识给后端 proxy_set_header X-Forwarded-Proto https; proxy_redirect off; } # 核心业务路径规则,可按需限制请求方法 location ~ ^/(authenticationendpoint|logincontext|oidc|oauth2|commonauth|publisher|devportal|admin|carbon|services) { limit_except GET HEAD POST PUT DELETE OPTIONS { deny all; } proxy_pass https://xx.x.x.x:9443; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto https; proxy_redirect off; } }
3. 生效验证
- 执行
nginx -t检查配置语法,确认无报错后执行nginx -s reload重载配置 - 清空浏览器缓存(或用无痕模式)访问
https://<你的域名>/publisher,会自动跳转至认证登录页,不再报404错误 - 登录完成后自动跳转回Publisher控制台即为配置生效,Devportal、Admin控制台访问逻辑一致
注意:如果之前手动修改过carbon.xml、web.xml等WSO2内部配置文件中的主机名、端口参数,需要全部回滚,WSO2 4.x版本所有配置统一以deployment.toml为准,避免配置覆盖导致不生效。
内容的提问来源于stack exchange,提问作者Lilan Mihiranga
相关产品推荐
相关产品推荐

