PUT para o arquivo estático no nginx

1

Eu estou tentando descobrir como permitir PUT para um arquivo estático no nginx, o pedido de put será proxied para um script php. Um exemplo da solicitação que estou tentando usar usando o curl é:

curl -X PUT  -d "tags=abc,def" cp.local/api/Image/myimage.jpg

Isso gera um 405 não permitido no nginx. Outras URLs funcionam, por exemplo:

curl -X PUT  -d "tags=abc,def" cp.local/api/Image/myimage.pdf

Eu li um tópico do fórum em que alguém teve um problema semelhante, mas com POST, mas está desatualizado e não parece haver uma correção real no tópico.

A diretiva relevante de configuração do nginx é:

location ~* ^/api/.*$ {
    root           /my/path/public;
    fastcgi_param  SCRIPT_FILENAME  /my/path/public/Api.php;
    fastcgi_pass   127.0.0.1:9000;
    include        fastcgi_params;
}
    
por MitMaro 18.05.2011 / 21:05

2 respostas

4

Você não pode fazer nada além de OBTER um arquivo estático. Se você quiser POST, PUT, DELETE, etc, você precisa ter certeza de que você tem um bloco de localização manipulando o URI e que este bloco de localização manipula o pedido de uma forma que permita tais pedidos.

Por exemplo, por proxy_passing para o Apache ou fastcgi_passing para o PHP.

Com a configuração que você forneceu, teoricamente, isso deve ser permitido. Mas você removeu muitas informações e provavelmente tem um bloco de localização para capturar arquivos estáticos. Quando você estiver lidando com locais de regex, o primeiro correspondente será usado, portanto, é necessário certificar-se de que o local de sua API esteja definido antes de qualquer outro local correspondente.

    
por 18.05.2011 / 21:51
0

Intercepte o status HTTP 405 e processe a solicitação com seu script:

error_page 405 = /api/Api.php;
    
por 18.05.2011 / 22:04

Tags