这几天这个问题让我很抓狂...在开发一个需要身份验证且由不同部分(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?