自托管Supabase的Nginx代理配置问题:登录后出现404错误
解决自托管Supabase子目录代理登录404的问题
一、修正Nginx配置
当前Nginx配置只是把/supabase开头的请求转发到8000端口,但Supabase的所有服务(Kong、Auth、Realtime等)都是基于根路径设计的,不会处理带/supabase前缀的请求,这就是登录后404的核心原因。
修改后的Nginx配置要帮Supabase去掉路径前缀,同时处理WebSocket(Realtime功能需要):
server { listen 80; listen [::]:80; server_name example.com; location / { proxy_pass http://127.0.0.1; include proxy_params; } location /supabase/ { # 注意两端的斜杠:Nginx会把/supabase/后面的内容直接拼到8000的根路径 proxy_pass http://127.0.0.1:8000/; include proxy_params; # 支持WebSocket连接 proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; # 传递正确的外部域名信息给Supabase服务 proxy_set_header Host $host; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-Proto $scheme; } location /websurvey { proxy_pass http://127.0.0.1:1200; include proxy_params; } }
改完后执行sudo nginx -s reload生效。
二、更新Supabase的.env配置
所有涉及外部访问地址的配置都要换成你的域名(不要用公网IP),让Supabase知道自己的对外访问路径:
1. Auth(GoTrue)模块
# 替换成你的域名 API_EXTERNAL_URL=http://example.com/supabase # SITE_URL要指向你的Flutter Web应用地址 SITE_URL=http://example.com/websurvey # 加上Studio的回调地址,避免Studio登录跳转出错 ADDITIONAL_REDIRECT_URLS=http://example.com/supabase/studio
2. Studio模块
# 替换成域名 SUPABASE_PUBLIC_URL=http://example.com/supabase
3. Kong代理补充
如果你的Supabase用docker-compose部署,还需要给Kong加环境变量,让它识别外部路径:
打开docker-compose.yml,找到kong服务的environment部分,添加:
- KONG_SERVER_NAME=example.com - KONG_PROXY_URI=http://example.com/supabase
或者直接在.env里加这两行,重启容器时会自动加载。
三、Flutter Web应用初始化配置
初始化Supabase客户端时,要指定正确的子路径地址:
import 'package:supabase_flutter/supabase_flutter.dart'; void main() async { await Supabase.initialize( url: 'http://example.com/supabase', anonKey: '你的ANON_KEY', // 从.env里复制ANON_KEY authCallbackUrlHostname: 'example.com', authUrl: 'http://example.com/supabase/auth/v1', ); runApp(MyApp()); }
四、重启所有服务
- 重启Nginx:
sudo nginx -s reload - 重启Supabase容器:进入Supabase目录执行
docker-compose down && docker-compose up -d
这样调整后,登录请求会被正确转发,Supabase生成的回调URL也会匹配域名路径,不会再出现404。
内容的提问来源于stack exchange,提问作者Sheenergizer
相关产品推荐
相关产品推荐

