Aceitar solicitação GET e reescrever solicitações POST

1

Temos um serviço tranquilo em execução em um de nossos servidores na porta 8916. Decidimos disponibilizar o serviço a partir da porta 80 também. Portanto, todas as solicitações agora são passadas para a porta 8016. No entanto, gostaria de mostrar uma página de ajuda no caso de o usuário acessar o serviço diretamente por um navegador (GET). Como posso enviar apenas as solicitações POST para o serviço, enquanto mostramos o "index.html" quando acessado por GET?

Aqui está nossa configuração atual do NGINX.

server {
        listen 80;
        server_name ourserver.org;

        limit_conn alpha 3;
        limit_req  zone=delta burst=80 nodelay;

        location / {
            proxy_pass http://127.0.0.1:8916/;
            include proxy_params;

            access_log /var/log/nginx/indra-api.access.log;
            error_log /var/log/nginx/indra-api.error.log;

            client_max_body_size 8M;
        }
}
    
por Juliano ENS 06.05.2018 / 19:21

1 resposta

1

Uma solução simples é usar uma condição if na variável $request_method .

Por exemplo:

location / {
    if ($request_method != POST) { rewrite ^ /index.html last; }

    proxy_pass ...;
    ...
}
location = /index.html {
    root /path/to/html/files;
}

Se o seu arquivo index.html exigir recursos (css, imagens e js) do mesmo servidor, convém considerar o uso de um prefixo de URI. Por exemplo:

location / {
    if ($request_method != POST) { rewrite ^ /help/index.html last; }

    proxy_pass ...;
    ...
}
location /help/ {
    root /path/to/html/files;
}

Consulte esta advertência sobre o uso de if

    
por 06.05.2018 / 20:02

Tags