我有一个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