nginx REST

Maxim Dounin mdounin на mdounin.ru
Ср Май 23 07:30:28 UTC 2012


Hello!

On Tue, May 22, 2012 at 03:57:37PM -0400, x00xer wrote:

> возникла так же нобходимость сделать
> RESTfull сервис. 
> nginx настроен  отправлять все запросы к
> PHP в php-fpm сокет:
> 
> 
> location ~ \.php$ {
>    include /etc/nginx/fastcgi_params;
>    fastcgi_pass unix:/tmp/php5-fpm.sock;
>    fastcgi_param SCRIPT_FILENAME /htdocs$fastcgi_script_name;
>    fastcgi_param PATH_INFO $fastcgi_script_name;
>    fastcgi_param DOCUMENT_ROOT /htdocs;
> }
> 
> если с клиента делаю PUT или DELETE в ответ
> получаю:
> 
> спасибо.
> <html>
> <head><title>405 Not Allowed</title></head>
> <body bgcolor="white">
> <center><h1>405 Not Allowed</h1></center>
> <hr><center>nginx</center>
> </body>
> </html>
> 
> 
> каким образом разрешить данные методы
> в nginx'e ?

Отправить таки на обработку в fastcgi.  Для передаваемых на бекенд 
запросов nginx разрешает любые методы, кроме TRACE.  У вас, судя 
по ответу, запрос попадает не на бекенд, а на статический файл.  
Что, в общем, логично: если сервис действительно restfull, то 
привёдённая выше обработка *.php явно недостаточна, надо делать 
как-то так:

   location / {
       fastcgi_pass unix:/tmp/php5-fpm.sock;
       fastcgi_param SCRIPT_FILENAME /htdocs/index.php;
       ...
   }

Maxim Dounin 



Подробная информация о списке рассылки nginx-ru