Laravel + Nginx + Basic Auth:如何让一些路由不受保护?



我们有Nginx并使用它来服务Laravel 8项目

我需要用一个基本的权限来保护这个演示项目。

它工作,使用nginx和auth_basic_file指令

auth_basic            "My DEMO";
location ~ ^/(api|public|images)/.* {
auth_basic off;
try_files   $uri $uri/ /index.php?$query_string;
}

location ~ .php$ {
# Protect access
auth_basic_user_file  /etc/nginx/auth/.htpasswd;
add_header      X-Dovesono-php 1;
fastcgi_pass    unix:/run/php/php7.4-fpm.sock;
fastcgi_index   index.php;
include         fastcgi_params;
fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param   PATH_INFO $fastcgi_path_info;
}

我的目标我需要让/api/<的整个块不受保护>

实际上,使用上面的配置,浏览器要求我在每次ajax调用/api/时进行身份验证。此外,即使插入正确的用户名和密码,它也会无限期地重复

我用这个解决:

server {
....
auth_basic_user_file /etc/nginx/auth/.htpasswd;
location / {
auth_basic   "My DEMO";
try_files    $uri $uri/ /index.php?$query_string;
}
location ~ .php$ {
... ...
}
location /api/ {
auth_basic   off;
try_files    $uri /index.php?$query_string;
}
}

如果首先匹配/api/,则不设置验证,然后导致重新开始解析,将使用location ~ .php$结束。

因此页面被提供,但没有询问http基本授权

对于其他路由,它应用auth_basic,然后导致重新开始解析,将使用location ~ .php$结束

所以页面服务,但询问http基本授权

最新更新