Nginx重定向.well-已知端点

时间:2017-05-11 19:42:22

标签: nginx web-applications request openid-connect endpoint

我有一个在WSGI服务器上运行的Web应用程序。该应用程序具有OpenID Connect身份提供程序端点,例如:

/oidc/.well-known/openid-configuration
/oidc/.well-known/simple-web-discovery
/oidc/.well-known/webfinger

对这些端点的请求被映射到我的项目中的某些函数,这些函数为每个端点运行必要的任务。我可以运行我的应用程序,所有请求都由已定义的函数成功映射和处理。

当我将应用程序托管在https后面的公共IP上时,挑战就开始了。为此,我使用nginx来代理对我的应用程序的访问。 nginx使我的应用程序可以通过https通过公共IP访问。以下是我的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;
    }
}

正确请求/发布每个呼叫,除了对/.well-known/*的请求(配置中的实际location ~ /\.well-known { allow all; }是尝试解决它),我得到404403个错误。

例如,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权限运行我的应用程序,因此应用程序可以访问所有路径。
  • 实际上,路径/home/user/myApp/oidc/.well-known/openid-configuration不存在(这就是为什么我也会得到404错误)。

/oidc/.well-known/openid-configuration应该映射到一个函数(就像我在没有nginx的情况下托管应用程序时那样)。所以,我不明白为什么nginx尝试访问不存在的/oidc/.well-known/*路径/文件?!

1 个答案:

答案 0 :(得分:0)

问题是设置location ~ /\.well-known { allow all; }

这应该删除。此外,设置include /etc/nginx/default.d/*.conf;包含默认配置文件,该文件的设置也为location ~ /\.well-known { allow all; }。此设置也应该从该文件中删除。