Como impedir o nginx de subdiretórios específicos de proxy reverso


11

No Apache, você pode fazer o ProxyPass de tudo, exceto um ou mais subdiretórios (com "!").

    ProxyPass /subdir !
    ProxyPass / http://localhost:9999/

Qual é o equivalente Nginx?

Meu primeiro palpite obviamente não está funcionando:

 location /subdir {
      root /var/www/site/subdir;
  }

 location / {
      proxy_pass http://localhost:9999/ ;
  }

Respostas:


11

Você pode vincular o proxy_pass ao EXATAMENTE o caminho que desejar, assim

location = / {
    proxy_pass http://localhost:9999/;
}

Isso garante que nenhum outro caminho seja passado, mas /

OU

você pode usar esta sintaxe apenas para os subdiretórios a serem correspondidos

location ^~ /subdir {
     alias /var/www/site/subdir;
}

location / {
    proxy_pass http://localhost:9999/ ;
}

A ^~corresponde ao subdir e, em seguida, pára a procura de modo a /não serão executadas. Está descrito aqui .


root / var / www / site / subdir deve ser root / var / www / site no meu caso, caso contrário, o nginx tentará acessar / var / www / site / subdir / subdir.
precisa

Você está certo. Ou isso, ou você pode usar em aliasvez deroot
Christopher Perrin

1
Você poderia explicar isso ^~mais? Eu não conseguia entender o que isso faz. Tentei ler o link que você enviou, mas ainda não o conseguiu. Se o local do prefixo correspondente mais longo tiver o modificador “^ ~”, as expressões regulares não serão verificadas.
Mohammed Noureldin

@MohammedNoureldin significa essencialmente que ele tenta corresponder um prefixo em um caminho e não avalia expressões regulares.
Christopher Perrin

1
@MohammedNoureldin é a primeira parte do caminho que você deseja usar para o local. E sim, é sem regex.
Christopher Perrin
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.