如何解决用于 keycloak 的 Nginx 反向代理
我已经在 localhost:7070(在 Docker 容器中,它在 8080 上运行)部署了一个 keycloak 服务器,现在我想为它设置一个反向代理。这是我的配置:
server {
listen 11080 ;
location /auth/ {
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Server $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-Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://localhost:7070/auth/;
}
}
当我访问 http://my-ip:11080/auth
时,我可以看到欢迎页面。但是,当我尝试按照欢迎页面上的链接登录时,它显示错误,网址现在是 http://my-ip:auth/admin/
,但我希望 http://my-ip:11080/auth/admin/
的端口为 11080>
当我手动输入 http://my-ip:11080/auth/admin
并按 Enter 时,它重定向到 http://my-ip/auth/admin/master/console/
,但我希望 http://my-ip:11080/auth/admin/master/console/
的端口为 11080
我也尝试了很多我找到的解决方案,但目前没有运气。你能告诉我这里有什么问题吗?
更新: docker-compose.yml
version: "3.7"
services:
keycloak:
volumes:
- keycloak-pgdb:/var/lib/postgresql/data
build:
context: .
dockerfile: Dockerfile
ports:
- "7070:8080"
environment:
- KEYCLOAK_USER=admin
- KEYCLOAK_PASSWORD=password
- DB_VENDOR=postgres
- POSTGRES_PASSWORD=root
- POSTGRES_DB=keycloak
- DB_ADDR=localhost
- DB_USER=postgres
- DB_PASSWORD=root
- PROXY_ADDRESS_FORWARDING=true
volumes:
keycloak-pgdb:
Docker ps:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
30ad65460a0c pic-keycloak_keycloak "entrypoint.sh" 38 minutes ago Up 38 minutes 5432/tcp,0.0.0.0:7070->8080/tcp pic-keycloak_keycloak_1
解决方法
容器中的应用程序不知道您正在转发端口 11080
,因此当应用程序呈现响应时,如果它跟随 X-Forwarded-xxxxx
标头,它将使用 X-Forwarded-Poroto
确定应该将重定向发送到哪里。
根据您的应用程序,您有 2 个选项可以处理这种情况:
- 识别
X-Forwarded-Port
标头的应用程序可以被告知重定向到特定端口,例如:proxy_set_header X-Forwarded-Port 11080
- 不遵守标头中提供的规则的遗留应用程序可以通过响应重写传递来处理。以下是 sub_filter 的示例:
要使 sub_filter 正常工作,应安装并启用该模块sub_filter 'http:/my-ip/auth' 'http:/my-ip:11080/auth';
--with-http_sub_module
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。