Nginx 重定向 .well-known 端点
Nginx redirects .well-known endpoints
我有一个 Web 应用程序 运行 在 WSGI
服务器上。该应用程序具有 OpenID Connect 身份提供者端点,例如:
/oidc/.well-known/openid-configuration
/oidc/.well-known/simple-web-discovery
/oidc/.well-known/webfinger
对这些端点的请求被映射到我项目中的一些功能,运行 每个端点的必要任务。我可以 运行 我的应用程序,所有请求都已成功映射并由定义的函数处理。
当我在 https 后面的 public IP 上托管我的应用程序时,挑战就开始了。为此,我使用 nginx
代理访问我的应用程序。 nginx
使我的应用程序可以通过 public IP over https 访问。这是我的 nginx
配置文件的关键部分:
server {
listen 80;
listen [::]:80 default_server;
server_name localhost;
root /home/user/myApp;
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://my_app;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-URL-SCHEME https;
}
}
server {
listen 443 ssl;
server_name localhost;
root /home/user/myApp;
ssl_certificate /home/user/cacert.pem;
ssl_certificate_key /home/user/privkey.pem;
include /etc/nginx/default.d/*.conf;
location ~ /\.well-known { allow all; }
location / {
proxy_pass http://my_app;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-URL-SCHEME https;
}
}
每个调用都是 requested/posted 正确的,除了对 /.well-known/*
的请求(实际上配置中的 location ~ /\.well-known { allow all; }
是试图解决它),我得到 404
或 403
错误。
例如,nginx
错误日志中的一条错误消息为:
open() "/home/user/myApp/oidc/.well-known/openid-configuration" failed (13: Permission denied), client: X.X.X.X, server: localhost, request: "GET /oidc/.well-known/openid-configuration HTTP/1.1", host: "X.X.X.X"
(IP 地址被屏蔽)
几点:
- 我运行使用
sudo
权限设置我的应用程序,因此该应用程序可以 r/w 访问所有路径。
- 实际上,路径
/home/user/myApp/oidc/.well-known/openid-configuration
不存在(这就是为什么我也得到 404
错误)。
/oidc/.well-known/openid-configuration
应该映射到一个函数(就像我在没有 nginx
的情况下托管我的应用程序时发生的那样)。所以,我不明白为什么 nginx
试图访问一个不存在的 /oidc/.well-known/*
path/file ?!
问题出在设置 location ~ /\.well-known { allow all; }
上。
这应该被删除。此外,设置 include /etc/nginx/default.d/*.conf;
包括一个默认配置文件,该文件也具有设置 location ~ /\.well-known { allow all; }
。此设置也应从该文件中删除。
我有一个 Web 应用程序 运行 在 WSGI
服务器上。该应用程序具有 OpenID Connect 身份提供者端点,例如:
/oidc/.well-known/openid-configuration
/oidc/.well-known/simple-web-discovery
/oidc/.well-known/webfinger
对这些端点的请求被映射到我项目中的一些功能,运行 每个端点的必要任务。我可以 运行 我的应用程序,所有请求都已成功映射并由定义的函数处理。
当我在 https 后面的 public IP 上托管我的应用程序时,挑战就开始了。为此,我使用 nginx
代理访问我的应用程序。 nginx
使我的应用程序可以通过 public IP over https 访问。这是我的 nginx
配置文件的关键部分:
server {
listen 80;
listen [::]:80 default_server;
server_name localhost;
root /home/user/myApp;
include /etc/nginx/default.d/*.conf;
location / {
proxy_pass http://my_app;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-URL-SCHEME https;
}
}
server {
listen 443 ssl;
server_name localhost;
root /home/user/myApp;
ssl_certificate /home/user/cacert.pem;
ssl_certificate_key /home/user/privkey.pem;
include /etc/nginx/default.d/*.conf;
location ~ /\.well-known { allow all; }
location / {
proxy_pass http://my_app;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-URL-SCHEME https;
}
}
每个调用都是 requested/posted 正确的,除了对 /.well-known/*
的请求(实际上配置中的 location ~ /\.well-known { allow all; }
是试图解决它),我得到 404
或 403
错误。
例如,nginx
错误日志中的一条错误消息为:
open() "/home/user/myApp/oidc/.well-known/openid-configuration" failed (13: Permission denied), client: X.X.X.X, server: localhost, request: "GET /oidc/.well-known/openid-configuration HTTP/1.1", host: "X.X.X.X"
(IP 地址被屏蔽)
几点:
- 我运行使用
sudo
权限设置我的应用程序,因此该应用程序可以 r/w 访问所有路径。 - 实际上,路径
/home/user/myApp/oidc/.well-known/openid-configuration
不存在(这就是为什么我也得到404
错误)。
/oidc/.well-known/openid-configuration
应该映射到一个函数(就像我在没有 nginx
的情况下托管我的应用程序时发生的那样)。所以,我不明白为什么 nginx
试图访问一个不存在的 /oidc/.well-known/*
path/file ?!
问题出在设置 location ~ /\.well-known { allow all; }
上。
这应该被删除。此外,设置 include /etc/nginx/default.d/*.conf;
包括一个默认配置文件,该文件也具有设置 location ~ /\.well-known { allow all; }
。此设置也应从该文件中删除。