我们有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基本授权