Se você quiser apontar /api/path/
para a raiz do seu destino de redirecionamento, será necessário usar:
proxy_redirect http://localhost:1337 https://domain.tld/api/path/
Estou tentando mover meu proxy de nó da porta 8080
para 80
e atingir paredes.
Eu quero que minha API RESTful esteja por trás de um proxy reverso nginx ouvindo na porta 80 no local /api/path
.
(a porta 8080
não era acessível para alguns usuários corporativos por trás de firewalls com excesso de zelo).
Eu costumava direcionar solicitações para o link para link . Sem problemas via:
server {
listen 8080;
server_name domain.tld;
ssl on; #some other SSL config removed for clarity
location / {
proxy_redirect off;
proxy_pass_header Server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 5;
proxy_read_timeout 240;
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:1337;
}
}
Agora estou tentando movê-lo para o local api/path/
e para longe da porta 8080
via:
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name domain.tld;
root /path/to/html/;
ssl on; #some other SSL config removed for clarity
location /api/path/ {
proxy_redirect off;
proxy_pass_header Server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 5;
proxy_read_timeout 240;
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:1337;
}
}
Isso resulta em:
$ curl -i -H "Content-Type: application/json" -H "Accept: application/json" -X POST -d '{}' https://domain.tld/api/path
TTP/1.1 404 Not Found
Date: Thu, 08 Sep 2016 01:29:35 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 25
Connection: keep-alive
X-Powered-By: Express
X-Content-Type-Options: nosniff
Strict-Transport-Security: max-age=31536000; includeSubDomains;
Cannot POST /api/path
Agora eu li que você não pode postar em páginas estáticas, o que significa que você faz algo como:
error_page 405 @405;
location = @405 {
root /path/to/html/;
}
Mas, como não consigo encontrar informações suficientes sobre isso, não está funcionando. GET funciona normalmente, mas o POST irá cometer erros com Cannot POST api/path
. O que posso fazer aqui?
Aprecie qualquer ajuda.
Eu precisava ativar o proxy_redirect
como @techraf apontou para que minha configuração bem-sucedida seja assim agora. Espero que ajude alguém.
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name domain.tld;
root /path/to/html/;
ssl on; #some other SSL config removed for clarity
location /api/path/ {
proxy_redirect http://localhost:1337/ /api/path/; #<-- change
proxy_pass_header Server;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Scheme $scheme;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
proxy_connect_timeout 5;
proxy_read_timeout 240;
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:1337;
}
}
Tags nginx reverse-proxy