【问题标题】:nginx configuration for a RESTful APIRESTful API 的 nginx 配置
【发布时间】:2015-03-21 14:30:19
【问题描述】:

我是 nginx 和 php 的初学者,所以请原谅我的基本问题。

对于基于 RESTful 的 API(nginx + php),我需要一些有关 nginx 配置的帮助。

这里是 nginx 配置的相关 sn-p(建议 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.

【问题讨论】:

  • $args 仅包含 GET 参数(即查询字符串)。因此,在您的示例中,您将在 try_files 指令中将查询字符串(如果有)附加到后备 uri。
  • 谢谢,看来我错过了。

标签: php nginx


【解决方案1】:

替换这个:

location /api/v1/ {
    try_files $uri $uri/ /apiv1.php?$args;
}

在您的服务器块中包含以下内容:

rewrite ^/api/v1/([^/]+)/([^/]+)/?$ /apiv1.php?class=$1&method=$2? last;

创建一个名为 apiv1.php 的 php 文件,并使用以下代码行将其放置在 Web 服务器的根目录中:

<?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;

通过在浏览器中访问以下链接进行测试:

http://myServer/api/v1/members/getInfo

【讨论】:

  • 太好了,现在我的 _GET 和 _REQUEST 不再为空 :) 好吧,我向前迈了一步,因为你帮助了我,非常感谢! :)
  • 这是一个很好的答案——我最初得到了常见的 File not Found 错误 PHP。然后我跑了:tail /var/log/nginx/error.log 和“无法打开主脚本:/var/www/[myDomain]/html/apiv1.php - 所以将 index.php 重命名为 apiv1.php 和它工作。
【解决方案2】:

如果其他人点击此页面,经过一番研究,我为自己找到了解决方案:

location ~ ^/api/v0/(.*)/?$ {
    try_files $uri $uri/ /v0.php?req=$1&$args;
}

这里我不受类/方法结构的限制,位置似乎比重写更具可读性。

【讨论】:

  • 这应该是公认的答案。好工作。简洁、完整且实用。
猜你喜欢
  • 2018-02-23
  • 1970-01-01
  • 2014-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 2019-05-05
  • 2016-11-28
  • 2015-10-24
相关资源
最近更新 更多