Nginx 反向代理后面的 Tomcat - 收件人终结点与 SAML 响应不匹配



组件如下:

  1. tomcat上的Spring MVC web应用
  2. Azure AD IdP
  3. Nginx反向代理

SSO在没有Nginx反向代理的情况下工作,因此我认为我的应用程序和AzureID的配置是正确的。然而,当nginx反向代理开始发挥作用时,我遇到了一个错误。下面是日志错误

2021-02-17 19:05:14 690 172.18.0.2/saml/SSO/alias/my_app [ERROR] org.opensaml.com .binding.decoding. basesamlmessagedecoder - saml消息预期的目的端点https://myapp.example.com/saml/SSO/alias/my_app与接收端点http://myapp.example.com/saml/SSO/alias/my_app不匹配;

不知道为什么上游传递给tomcat的是http而不是https。我遵循了为nginix设置SSL的最佳实践。下面是myapp

的配置
server {
listen 80;
server_name   _;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name myapp.example.com;
access_log logs/myapp.access;
error_log logs/myapp.error error;
location / {
proxy_set_header    X-Forwarded-Host    $host;
proxy_set_header    X-Forwarded-Server  $host;
proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;
proxy_set_header    X-Forwarded-Proto   https;
proxy_set_header    X-Real-IP           $remote_addr;
proxy_set_header    Host                $host;
proxy_pass          http://myapp:8180/;
}
}

有遗漏什么吗?如有任何意见,我将不胜感激。

编辑:快速解决问题是tomcat不处理向servlet发送的x - forward - proto。解决这个问题的方法很少。最简单的方法是将scheme属性添加到Connector>在server.xml

您可以参考tomcat配置文档中的属性定义。https://tomcat.apache.org/tomcat - 9.0 - doc/config/http.html

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" 
proxyName="myapp.example.com"
proxyPort="443"
**scheme="https"** />

问题是tomcat不处理向servlet发送的x - forward - proto。解决这个问题的方法很少。最简单的方法是将scheme属性添加到server.xml

中的Connector标记中您可以参考tomcat配置文档中的属性定义。https://tomcat.apache.org/tomcat - 9.0 - doc/config/http.html

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" 
proxyName="myapp.example.com"
proxyPort="443"
**scheme="https"** />

最新更新