Nginx - reescreva e pass_proxy para outra porta porque 404 não foi encontrado

3

Tentando deixar a reescrita da URL funcionar em conjunto com o encaminhamento de porta, mas parece que não funciona.

Meu servidor de aplicativos é executado em :8080 port enquanto o nginx trabalha no padrão 80 one. Então, eu sou forçado não apenas a reescrever os URLs, mas também encaminhar o pedido para outra porta.

Na verdade, o único que estou tentando fazer é consultar o recurso existente http://localhost:8080/#/cat/tom por meio do atalho http://localhost/tom sem nenhum redirecionamento.

Veja o que eu fiz com base no nginx doc e outras perguntas:

server {
    listen       80;
    server_name  localhost;
    root /;

    #charset koi8-r;

    #access_log  logs/host.access.log  main;

    location / {
        rewrite ^/([a-z]+)$ /#/cat/$1 break;
        proxy_pass http://localhost:8080;
        proxy_redirect off;
    }

    ...
}

Já tentou outras configurações, mas também não funciona. Quando eu acesso o http://localhost/tom ele diz 404 not found enquanto o http://localhost:8080/#/cat/tom funciona como esperado.

Os logs não têm qualquer menção de erro.

Como forçar este trabalho como esperado?

    
por WildDev 02.10.2016 / 13:05

2 respostas

2

O problema é que #/cat/tom é uma instrução para o aplicativo do lado do cliente e não para o aplicativo do lado do servidor. O que significa que ele precisa ser enviado para o cliente (por meio de um redirecionamento).

Por exemplo:

location = /tom {
    return 302 /#/cat/tom;
}
location / {
    proxy_pass http://localhost:8080;
    ...
}

Você menciona na sua pergunta que está tentando fazer isso sem um redirecionamento, mas infelizmente, se observar a estrutura de um URL, você notará que qualquer coisa após o # não é enviado para o servidor. Veja este documento para mais.

    
por 02.10.2016 / 13:27
2

O nginx reescreve o trabalho apenas na parte do caminho do URL. Ele não funciona na parte da consulta, que é separada por ? nem funciona na parte separada por # , que é o fragmento.

Na verdade, ao inserir sua URL http://localhost:8080/#/cat/tom em seu navegador, seu navegador envia uma solicitação para obter http://localhost:8080/ e seu navegador processa a peça depois de # por si só.

Então, você precisa descobrir exatamente como o seu software aplicativo funciona com essas partes de fragmento e fazer uma configuração com base nisso.

    
por 02.10.2016 / 13:30