RESTful API 的 nginx 配置
nginx configuration for a RESTful API
我是nginx和php的初学者,所以请原谅我的基本问题。
对于基于 RESTful 的 API (nginx + php),我需要一些有关 nginx 配置的帮助。
这里是 nginx 配置的相关片段(建议 here),用于将所有 /api/v1/* 请求重定向到我的 apiv1.php 脚本:
server {
server_name myServer;
root /usr/share/nginx/html;
location /api/v1/ {
try_files $uri $uri/ /apiv1.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
现在的问题是,当我在浏览器中键入 http://myServer//api/v1/resource/GetInfo 时,apiv1.php 脚本似乎没有收到 "resource/GetInfo"。实际上,_GET 和_REQUEST 是空的,但是_SERVER 看起来没问题!
在我的/etc/php5/fpm/php.ini中,启用了以下相关配置:
request_order = "GP"
variables_order = "GPCS"
register_argc_argv = Off
auto_globals_jit = On.
您是否知道为什么 php _GET 和 _REQUEST 为空?这仅与我的 php 配置有关吗?
此致,
M.
替换为:
location /api/v1/ {
try_files $uri $uri/ /apiv1.php?$args;
}
在您的服务器块中包含以下内容:
rewrite ^/api/v1/([^/]+)/([^/]+)/?$ /apiv1.php?class=&method=? last;
使用以下代码行创建一个名为 apiv1.php 的 php 文件并将其放置在您的网络服务器的根目录中:
<?php
$class = filter_input(INPUT_GET, 'class', FILTER_SANITIZE_STRING);
$method = filter_input(INPUT_GET, 'method', FILTER_SANITIZE_STRING);
echo $class;
echo '<br />';
echo $method;
通过在浏览器中访问以下 link 进行测试:
http://myServer/api/v1/members/getInfo
如果其他人点击此页面,我经过一番研究后为自己找到了解决方案:
location ~ ^/api/v0/(.*)/?$ {
try_files $uri $uri/ /v0.php?req=&$args;
}
这里我不受限于 class/method 结构和位置似乎比重写更具可读性。
我是nginx和php的初学者,所以请原谅我的基本问题。
对于基于 RESTful 的 API (nginx + php),我需要一些有关 nginx 配置的帮助。
这里是 nginx 配置的相关片段(建议 here),用于将所有 /api/v1/* 请求重定向到我的 apiv1.php 脚本:
server {
server_name myServer;
root /usr/share/nginx/html;
location /api/v1/ {
try_files $uri $uri/ /apiv1.php?$args;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/var/run/php5-fpm.sock;
}
现在的问题是,当我在浏览器中键入 http://myServer//api/v1/resource/GetInfo 时,apiv1.php 脚本似乎没有收到 "resource/GetInfo"。实际上,_GET 和_REQUEST 是空的,但是_SERVER 看起来没问题!
在我的/etc/php5/fpm/php.ini中,启用了以下相关配置:
request_order = "GP"
variables_order = "GPCS"
register_argc_argv = Off
auto_globals_jit = On.
您是否知道为什么 php _GET 和 _REQUEST 为空?这仅与我的 php 配置有关吗?
此致, M.
替换为:
location /api/v1/ {
try_files $uri $uri/ /apiv1.php?$args;
}
在您的服务器块中包含以下内容:
rewrite ^/api/v1/([^/]+)/([^/]+)/?$ /apiv1.php?class=&method=? last;
使用以下代码行创建一个名为 apiv1.php 的 php 文件并将其放置在您的网络服务器的根目录中:
<?php
$class = filter_input(INPUT_GET, 'class', FILTER_SANITIZE_STRING);
$method = filter_input(INPUT_GET, 'method', FILTER_SANITIZE_STRING);
echo $class;
echo '<br />';
echo $method;
通过在浏览器中访问以下 link 进行测试:
http://myServer/api/v1/members/getInfo
如果其他人点击此页面,我经过一番研究后为自己找到了解决方案:
location ~ ^/api/v0/(.*)/?$ {
try_files $uri $uri/ /v0.php?req=&$args;
}
这里我不受限于 class/method 结构和位置似乎比重写更具可读性。