You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel+Nginx配置Basic Auth时如何设置/api等路由免除验证?

问题原因分析
  • 路由重写后验证规则继承:/api开头的请求匹配到第一个location块时已经关闭了身份验证,但经过try_files重写到index.php后,请求会重新匹配到.php后缀的location块,该块继承了全局开启的auth_basic规则,依然会触发身份验证。
  • 验证配置不配对:全局作用域开启了auth_basic但未配置对应的auth_basic_user_file,仅在php处理块中配置了验证文件,导致Nginx验证逻辑异常,出现输入正确账号也反复弹出验证框的问题。
修复后的完整配置
auth_basic            "My DEMO";
# 全局统一配置验证文件,和auth_basic配对
auth_basic_user_file  /etc/nginx/auth/.htpasswd;

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

location ~ \.php$ {
    # 针对/api开头的请求关闭身份验证
    if ($request_uri ~ ^/api/) {
        set $auth_basic off;
    }
    auth_basic $auth_basic;

    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;
}
配置修改说明
  • 将原本仅存在于php块中的auth_basic_user_file提升到全局server作用域,和全局的auth_basic配置配对,解决验证逻辑混乱的问题。
  • 在php处理块中增加请求路径判断,只要原始请求路径是/api开头,就直接关闭身份验证,避免重写后的php请求重复触发验证。
生效步骤
  1. 执行nginx -t测试配置语法是否正确,提示syntax is ok、test is successful再进行下一步。
  2. 执行systemctl reload nginx重载Nginx配置即可生效。

内容的提问来源于stack exchange,提问作者realtebo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:21:04