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

如何配置Nginx实现单域名下同时托管前端页面与API接口

解决方案

正确配置参考

server {
    listen 80;
    server_name localhost;
    root /var/www/public;

    # 匹配/api前缀的请求,^~ 修饰符确保该规则优先级高于正则匹配的PHP location
    location ^~ /api/ {
        try_files $uri $uri/ /index.php$is_args$args;
    }

    # PHP请求处理逻辑
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_buffer_size 128k;
        fastcgi_buffers 4 256k;
        fastcgi_busy_buffers_size 256k;
    }

    # 所有非/api请求统一返回前端入口文件
    location / {
        # 如果需要支持前端静态资源(js/css/图片等)的直接访问,替换成下方注释的try_files规则即可
        # try_files $uri $uri/ /frontend/index.html$is_args$args;
        rewrite ^ /frontend/index.html last;
    }
}

旧配置失效原因

  • 第一种配置:两个监听相同端口、相同server_name的server块同时存在时,Nginx只会匹配第一个加载的server块,第二个负责返回前端文件的server块完全不会生效
  • 第二种配置:/api/的location没有加优先级修饰符,可能被其他正则规则拦截,同时location /的try_files规则只有遇到不存在的路径时才会返回前端index.html,不符合所有非/api请求都返回该文件的需求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 21:57:01