2015-01-22 6 views
9

Я начинаю с nginx и php, поэтому, пожалуйста, извините мой основной вопрос.Конфигурация nginx для API RESTful

Для API на основе RESTful (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?

С наилучшими пожеланиями, М.

+0

[$ args] (http://wiki.nginx.org/HttpCoreModule#.24args) содержит только параметры GET (т. Е. Строки запроса). Таким образом, в вашем примере вы добавляете строки запроса (если они есть) к резервному uri в вашей директиве try_files. – PhearOfRayne

+0

Спасибо, похоже, я пропустил этот. –

ответ

9

Replace это:

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

С следующих внутри сервера блока:

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

Создать файл PHP под названием apiv1.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; 

Test, посетив следующую ссылку в браузере:

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

Отлично, теперь мои _GET и _REQUEST уже не пустые :) Ну, я на шаг вперед, потому что ты помог мне, поэтому большое спасибо! :) –

+0

Это хороший ответ - изначально я получил общую ошибку File Not Found PHP. Затем я запустил: tail /var/log/nginx/error.log и «Не удалось открыть первичный скрипт: /var/www/[myDomain]/html/apiv1.php - так переименован index.php в apiv1.php, и он работал. –

1

Если кто-то попали на эту страницу, есть решение, которое я получил для себя после битного исследования:

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

Здесь я m не ограничивается структурой и расположением класса/метода, представляется более читаемым, чем переписывание.

Смежные вопросы