首页 > 解决方案 > 仅在主页上设置基本身份验证 nginx

问题描述

我有以下配置。我只想授权/,因为唯一一个有 UI 的。其他 URL 已经是 api,如、/report/等。/group//delete/

upstream gofastdfs{
    server localhost:8081;
    keepalive 32;
}


server {
    listen 8080;
    server_name         localhost;
    gzip on;
    gzip_types '*';

    location / {
        auth_basic           "Caution";
        auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
        keepalive_timeout 620;
        proxy_redirect off;
        proxy_buffering off;
        proxy_pass      http://gofastdfs;
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

}

但是我的配置授权每个 URL,我只想限制/

标签: nginx

解决方案


location /匹配任何其他块未处理的 URI location- 即它是默认值location

location = /仅匹配单个 URI /

有关详细信息,请参阅此文档

您可以将您的配置拆分为两个location块,一个带有身份验证,另一个不带有身份验证。有些语句需要在两个location块之间复制,但大多数可以移动到外部上下文中。

例如:

keepalive_timeout 620;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;

location = / {
    auth_basic           "Caution";
    auth_basic_user_file /etc/nginx/conf.d/.htpasswd;
    proxy_pass      http://gofastdfs;
}
location / {
    proxy_pass      http://gofastdfs;
}

推荐阅读