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

Docker Swarm单节点环境下Nginx配置问题:解决WordPress抢占/api路径无法访问FastAPI文档

修复Nginx配置让FastAPI /api路径正确转发

嘿,我懂你现在碰到的麻烦——WordPress把所有请求都给接管了,连你想留给FastAPI的/api路径也没放过。问题根源出在Nginx的代理转发配置上,咱们一步步来搞定它:

核心问题拆解

你当前location /api里写的proxy_pass http://backend:8888/api;会导致路径重复拼接:当你访问localhost/api/docs时,Nginx会把请求转发到http://backend:8888/api/api/docs,但FastAPI的文档页面是在根路径/docs下,这个拼接后的地址根本不存在,返回404之后,Nginx又 fallback 到了WordPress的首页规则,这就是为啥你看到的是WordPress页面。

修改后的完整Nginx配置

把你原来的Nginx配置里的location /api部分替换成下面的内容,其他规则保持顺序不变就行:

upstream php {
    server unix:/tmp/php-cgi.socket;
    server php:9000;
}

server {
    listen 80;
    server_name _;

    # 处理FastAPI的/api路径请求
    location /api {
        # 关键:去掉proxy_pass后面的/api,用斜杠结尾,避免路径重复拼接
        proxy_pass http://backend:8888/;
        # 配置必要的代理头,确保FastAPI能正确识别请求来源
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        # 关闭代理重定向和缓冲,提升API响应速度
        proxy_redirect off;
        proxy_buffering off;
    }

    location / {
        root /var/www/html;
        index index.php index.html;
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
        fastcgi_intercept_errors on;
        if ($uri !~ "^/images/") {
            fastcgi_pass php;
        }
    }

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        root /var/www/html;
        expires max;
        log_not_found off;
    }
}

额外要注意的点

  • 验证FastAPI路由:确保你的FastAPI应用的路由是基于根路径/的(比如/docs、/openapi.json),如果你的FastAPI本身挂载在/api路径下,那你需要把proxy_pass改成http://backend:8888/api/,但根据你访问/api/docs的需求,上面的配置是完全匹配的。
  • 重启Nginx服务:修改配置后,记得在Docker Swarm里更新Nginx服务让新配置生效:
    docker service update --force <你的nginx服务名称>
    
  • 检查WordPress固定链接:如果之后还是有问题,去WordPress后台的「设置-固定链接」里确认一下,有没有自定义规则把/api路径映射到了WordPress的页面或帖子上。

这样修改之后,访问localhost/api/docs就会正确跳转到FastAPI的文档页面,其他路径则正常由WordPress处理啦。

内容的提问来源于stack exchange,提问作者O. Altun

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 22:07:37