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/ ;
  }
Falken
fonte

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 .

Christopher Perrin
fonte
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