我有一个示例应用程序,可以在没有 nginx 的情况下在本地正确保护其余 api。现在,当我将其放在 nginx 代理后面的生产环境中时,它不起作用。没有错误。它允许所有请求。
带 ssl 的前端服务器是https://frontend.com
带 ssl 的后端服务器是https://backend.com
Keycloak代理转发为true
前端服务器(9000 上的节点服务器) NGINX Keycloak(在 8180 上运行)
nginx 文件示例
upstream keycloak_server {
server localhost:8180;
}
upstream node_server {
server localhost:9000;
}
location /auth/ {
proxy_pass http://keycloak_server;
proxy_http_version 1.1;
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;
}
location / {
proxy_pass http://node_server;
proxy_http_version 1.1;
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;
}
前端服务器使用 Angular 调用后端 api。 REST api 调用看起来像https://backend.com/callTest
后端服务器(在 tomcat 上运行) NGINX Spring Boot(带有 keycloak)
nginx 示例
location / {
proxy_pass http://127.0.0.1:8080/dt-1.0/;
proxy_http_version 1.1;
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;
}
在角度 keycloak.json 中看起来像
{
"realm": "demo",
"auth-server-url": "https://frontend.com/auth",
"ssl-required": "none",
"resource": "tutorial-frontend",
"public-client": true
}
在 Spring Boot 中 keycloak 属性看起来像
keycloak.auth-server-url=https://frontend.com/auth
keycloak.realm=demo
keycloak.resource=tutorial-frontend
keycloak.public-client=true
keycloak.bearer-only = true
keycloak.cors = true
keycloak.security-constraints[0].authRoles[0]=user
keycloak.security-constraints[0].securityCollections[0].patterns[0]=/*
请让我知道如何纠正这个问题。我真的很感激。