Laravel + Nginx + Basic Auth:如何让一些路由不受保护?
Laravel + Nginx + Basic Auth: how to leave some routes unprotected?
我们有 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 基本身份验证
我们有 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 基本身份验证