nginx、rewrite、fastcgiの設定

nginx、rewrite、fastcgiの設定

この問題はここ数日私を悩ませてきました... 認証を必要とし、さまざまな部分 (CMS、API、フロントエンド) が存在するアプリケーションに取り組んでいるときに、セッション/Cookie/クロスオリジン リクエストの共有に関する問題が発生しました。最終的に、すべてを 1 つのドメインで実装するのが最も簡単だと思いました。

  • フロントエンドの scheme://app/
  • API の場合は scheme://app/api
  • CMS の場合は scheme://app/cms

これにより、PHP での API ビルドに問題が発生しました。API は、/api/users や /api/users ではなく、/users /images のような request_uri を想定しています。単純な書き換えが解決策になると考えましたが、どういうわけか 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 を削除するにはどうすればよいでしょうか?

関連情報