設定 nginx、rewrite 和 fastcgi

設定 nginx、rewrite 和 fastcgi

在過去的幾天裡,這個問題一直讓我抓狂……在開發一個需要身份驗證並存在不同部分(CMS、API、前端)的應用程式時,我們在共享會話/cookies/跨域時遇到了一些問題要求。最後,我認為在一個網域下實現所有內容是最簡單的;

  • 前端的scheme://app/
  • API 的 schema://app/api
  • CMS 的方案://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 呢?

相關內容