设置 nginx、rewrite 和 fastcgi

设置 nginx、rewrite 和 fastcgi

这几天这个问题让我很抓狂...在开发一个需要身份验证且由不同部分(CMS、API、前端)组成的应用程序时,我们遇到了一些共享会话/cookie/跨域请求的问题。最后,我认为最简单的方法是将所有内容都放在一个域下实现;

  • 前端的 scheme://app/
  • scheme://app/api 用于 API
  • CMS 的 scheme://app/cms

这给 php 中的 API 构建带来了一些麻烦。API 需要的 request_uri 类似于 /users /images,而不是 /api/users 和 /api/users。我们以为简单的重写就可以解决问题,但不知何故 request_uri 并没有被重写。

以下是服务器设置:

server {
    listen 9090;
    server_name coda.dev;

    access_log      /usr/local/var/log/nginx/coda.access.log;
    error_log       /usr/local/var/log/nginx/coda.debug.log notice;
    charset         utf-8;

    rewrite ^/(.*)/$ /$1 permanent;

    location / {
        proxy_pass       http://localhost:9000;
    }

    location /api {
        root /Volumes/HDD/Sites/opdrachten/CODAapi/laravel/public;
        try_files $uri /index.php;
    }

    location ~/cms {
        proxy_pass       http://localhost:9000;
    }

    location ~ \.php {            
        fastcgi_pass  127.0.0.1:9091;
        fastcgi_index index.php;
        include       /usr/local/etc/nginx/fastcgi.conf;
        fastcgi_param DOCUMENT_ROOT /Volumes/HDD/Sites/opdrachten/CODAapi/laravel/public;
        fastcgi_param SCRIPT_FILENAME /Volumes/HDD/Sites/opdrachten/CODAapi/laravel/public/index.php;
        break;
    }
}

我还尝试添加这个来覆盖 request_uri:

fastcgi_param REQUEST_URI $uri?$args;

但这导致每个请求都获得 request_uri index.php

那么我如何将所有以 /api 开头的请求发送到我的 API 目录并重写 request_uri 以从 uri 中删除 /api?

相关内容