如何在Laravel Forge中为除单个路由外的所有路由启用HTTP基础认证
兄弟,我看你在Laravel Forge配置HTTP基础认证时卡壳了——想让/example路由跳过认证,但改了配置后完全没效果,这大概率是踩了几个Nginx配置的小坑,我来帮你一步步搞定:
首先纠正最关键的指令错误
你之前写的basic_auth off;是错的!Nginx里控制HTTP基础认证的正确指令是auth_basic,所以正确写法是auth_basic off;,这是最容易忽略的细节。
找对配置文件的位置
你提到修改了.htpasswd-{ruleId}文件,这个文件其实是存储用户名和加密密码的,不是Nginx的配置文件,改它当然没用!Laravel Forge允许我们在站点的自定义Nginx配置目录添加规则,正确路径是:
/etc/nginx/forge-conf/[你的站点域名]/server/
比如你的站点是example.com,路径就是/etc/nginx/forge-conf/example.com/server/。
编写正确的排除规则
在这个目录下新建一个配置文件(比如skip-basic-auth.conf,文件名随便取,只要后缀是.conf就行),写入以下内容:
# 精确匹配/example路由,跳过基础认证 location = /example { auth_basic off; # 必须加上Laravel路由必需的PHP转发配置,否则会返回404 try_files $uri $uri/ /index.php?$query_string; fastcgi_split_path_info ^(.+\.php)(/.+)$; fastcgi_pass unix:/var/run/php/php8.2-fpm.sock; # 换成你服务器上的PHP版本,比如php8.1 fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; }
这里要注意:必须复制主配置里处理PHP的fastcgi配置,因为Laravel的所有路由最终都要通过index.php解析,只写auth_basic off;的话,Nginx不知道怎么处理这个请求,会直接返回404。
验证并重启Nginx
写完配置后,先测试Nginx配置是否合法:
sudo nginx -t
如果输出test is successful,就可以重启Nginx让配置生效:
sudo systemctl reload nginx
(或者直接用Forge面板里的「重启Nginx」按钮也行)
为什么之前的配置没用?
总结下你踩的坑:
- 用了错误的Nginx指令:
basic_auth不是官方指令,正确的是auth_basic - 修改了错误的文件:
.htpasswd是密码存储文件,不是配置文件 - 缺少Laravel路由必需的PHP转发配置,导致Nginx无法正确解析
/example路由
按照上面的步骤操作后,/example路由应该就能顺利跳过基础认证了!
内容的提问来源于stack exchange,提问作者Darren Murphy

