nginx: Como adicionar o caminho URI ao host na diretiva proxy_pass?

nginx: Como adicionar o caminho URI ao host na diretiva proxy_pass?

Problema:

  • Eu uso uma proxy_passdiretiva nginx para redirecionar httpssolicitações com um locationcaminho específico no URI, por exemplo, https://domain/path/index.htmlpara http://container_ip:port/index.html.
  • Isso funciona bem para a solicitação inicial.
  • Entretanto, se o arquivo HTML especificar recursos a serem carregados, os clientes pesquisarão esses recursos sem o caminho, usando apenas a URL base; no exemplo https://domain/main.css.

Pergunta:
Como posso configurar o nginx para que tais recursos também sejam pesquisados ​​no caminho original; no exemplo em https://domain/path/main.css?

Configuração incorreta atual do nginx:

server {
    listen 443 ssl;
    server_name domain;

    [...]

    location /path/ {
        proxy_set_header Host $host;
        proxy_pass http://container_ip:port/;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection $connection_upgrade;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Responder1

Os caminhos para os recursos são gerados pelo seu aplicativo. A abordagem adequada e confiável é corrigir seu aplicativo para gerar URLs de recursos com caminhos corretos.

Se você quiser uma solução não confiável, você pode tentar usarhttp://nginx.org/en/docs/http/ngx_http_sub_module.htmlpara substituir URLs de recursos nas respostas dos proxies nginx. No entanto, existe a possibilidade de efeitos colaterais indesejados que podem ser difíceis de diagnosticar.

informação relacionada