通过Krakend API网关访问Django GraphQL端点时出现404错误
通过Krakend API网关访问Django GraphQL端点出现404错误
环境
- Django: 4.2.6
- GraphQL(基于graphene-django)
- Krakend API Gateway
- Docker容器化环境
问题描述
直接请求Django后端的/graphql端点完全正常,但通过Krakend网关转发请求时,会返回404 Not Found错误。
错误日志
Docker后端服务日志显示:
backend_1 | Not Found: /graphql backend_1 | [14/Oct/2023 23:32:52] "POST /graphql HTTP/1.1" 404 2961
说明经Krakend路由到后端的请求,无法匹配到/graphql端点。
Django配置
urls.py 端点定义
from django.urls import path, re_path from graphene_django.views import GraphQLView from django.views.decorators.csrf import csrf_exempt urlpatterns = [ path('graphql/', csrf_exempt(GraphQLView.as_view(graphiql=True, name='graphql'))), # ... 其他路径 ... ]
settings.py 关键配置
ALLOWED_HOSTS = ['backend', 'frontend', 'localhost', ...] INSTALLED_APPS = ['graphene_django', ...] MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'corsheaders.middleware.CorsMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', ] CORS_ORIGIN_WHITELIST = ["http://localhost:3000"]
已尝试的解决方案
- 确认Django的
/graphql端点定义正确,直接访问正常 - 检查Docker网络配置,服务间可正常通信
- 核对Krakend路由规则,确认指向Django后端的配置无误
- 直接请求后端端点验证服务可用性
以上操作均未解决问题。
疑问
- Krakend在请求处理或路由逻辑上可能存在哪些问题,导致
/graphql端点无法被匹配? - Django是否有特定配置会影响来自Krakend的请求路由,但不影响直接请求?
- 有哪些额外的日志或调试手段可以定位问题根源?
内容的提问来源于stack exchange,提问作者MariO
相关产品推荐
相关产品推荐

