无法在 uWSGI 的子目录中正确配置 nginx 的 HTTP 身份验证

无法在 uWSGI 的子目录中正确配置 nginx 的 HTTP 身份验证

我有一个nginx.conf看起来像这样:

server {
    server_name subdomain.example.com;

    listen 443 ssl;
    ssl_certificate      /srv/ssl/something.crt;
    ssl_certificate_key  /srv/ssl/something.key;

    access_log /var/log/something-nginx-access.log;
    error_log /var/log/something-nginx-error.log;

    location /private { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3131;

        auth_basic "Restricted";
        auth_basic_user_file /home/ubuntu/something.htpassword;
    }

    location / { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3131;
    }

    keepalive_timeout 70;
}

server {
    listen 80;
    server_name subdomain.example.com;

    access_log /var/log/something-nginx-access.log;
    error_log /var/log/something-nginx-error.log;

    location /private { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3131;

        auth_basic "Restricted";
        auth_basic_user_file /home/ubuntu/something.htpassword;
    }

    location / { try_files $uri @yourapplication; }
    location @yourapplication {
        include uwsgi_params;
        uwsgi_pass 127.0.0.1:3131;
    }
}

也就是说——我通过 http 和 https 运行我的应用程序,并将所有请求转发到正在运行应用程序的 uWSGI Flask

我希望有一个私有路径,/private/其中的所有内容都需要 HTTP AUTH。任何其他路径都不需要身份验证。

我的问题是,无论我在哪里发出请求,nginx 都会要求进行身份验证,例如'/','/cool_page'。

我该如何正确配置 nginx 以便仅在 下要求身份验证/private

最后,配置似乎有很多重复等等,有没有办法进一步减少我的配置?

抱歉,我是 nginx 新手!

答案1

目前,您在一个服务器部分中有两个同名的命名位置。这将导致 nginx 始终采用第一个定义的位置。要解决此问题,请重命名其中一个命名位置。例如,命名一个@private和另一个。@public

相关内容