
Tenho DNS dinâmico configurado e quero poder acessar diferentes computadores de fora da minha casa. Atualmente tenho um raspberry pi rodando nginx em 192.168.1.2, com meu roteador em 192.168.1.1. Eu também tenho a porta 80 encaminhada do roteador para o raspberry pi, então simplesmente clicar no URL DNS dinâmico mostra a página phpinfo() na minha página inicial do pi.
Em seguida, quero poder mydns.com/device1
manter esse URL enquanto redireciono internamente para o outro dispositivo.
Ou seja, verei http://mydns.com/device1
, mas terei acesso http://192.168.1.3
internamente. Além disso, se eu digitar, mydns.com/device1/login
ele será redirecionado internamente para http://192.168.1.3/login
.
Estou tentando usar sub_filter
assim:
sub_filter_once off;
sub_filter_types text/html;
sub_filter ""http://192.168.1.3" "http://192.168.1.2"
proxy_pass http://192.168.1.3/;
proxy_set_header Host $host;
Isso está funcionando até certo ponto, mas não totalmente. Os caminhos não estão redirecionando, por exemplo, arquivos em subpastas. Por exemplo:
Eu quero isso:
http://mydns.com/device1/style/basic.css
Mas veja só:
http://mydns.com/style/basic.css
Isso causa um erro 404, como pode ser visto na visualização do Console no Chrome. Eu recebo este erro:
Failed to load resource: the server responded with a status of 404 (Not Found)
Isso está no caminho: http://mydns.com/style/basic.css
mas eu preciso http://mydns.com/device1/style/basic.css
.
Posso acessar o arquivo CSS na barra de endereço digitando http://mydns.com/device1/style/basic.css
. então eu sei que é acessível, simplesmente não consigo fazer com que o NGINX encaminhe/reescreva essas pastas.
Alguém pode ajudar? Obrigado
Responder1
Pode ter vários motivos:
- algo reescreve seu URI antes de entrar no local com proxy_pass;
- ou é fornecido como sub-URI correspondente em alguns locais processados anteriormente;
- ou (na sua versão nginx) a barra
/
após IP na diretiva proxy_pass faz com que o nginx pegue a barra como um URI de proxy e a reescreva antes de enviar.
Não se pode ver exatamente o que acontece do seu lado sem ver toda a sua configuração. Ou você pode tentar ativar o log de depuração (para ver o que causa isso).
De qualquer forma, relacionado aos motivos mencionados acima, você tem três maneiras de resolver isso:
- você evitaria reescrever ou teria que adicionar mais
rewrite ... break
antes de proxy_pass para estender o URI; - ou você pode tentar defini-lo como
proxy_pass http://192.168.1.3/device1/;
ou com alguma variável (mapeamento) semelhanteproxy_pass http://192.168.1.3/$device/;
ou até mesmo com URI originado completo comoproxy_pass http://192.168.1.3$request_uri;
(observe que não há/
aqui). - ou você pode tentar remover a barra final, então
proxy_pass http://192.168.1.3;
(sem barra) em vez deproxy_pass http://192.168.1.3**/**;
(com barra).
Neste caso "o URI da solicitação é passado para o servidor na mesma forma que foi enviado por um cliente quando a solicitação original é processada" (se nenhuma reescrita ocorre) ou "o URI de solicitação normalizado completo é passado ao processar o URI alterado" (se algumas reescritas acontecerem ou se você tiver alguns locais provisórios com alias etry_files ... @proxy
passados).
Dê uma olhadaproxy_passdocumentação para todas as variantes possíveis de uso do proxy_pass.