Apache ProxyPass ignora arquivos estáticos

6

Ter um problema com o servidor da frente do Apache se conectando a um servidor de aplicativos do Jetty.

Eu pensei que ProxyPass ! em um bloco de localização deveria passar o processamento para o servidor de aplicativos, mas por alguma razão que não está acontecendo no meu caso, o Jetty mostra um erro 404 na estática ausente (js, css, etc)

Aqui está meu bloco de host virtual do Apache (v 2.4, BTW):

DocumentRoot /path/to/foo
  ServerName foo.com
  ServerAdmin [email protected]

  RewriteEngine On

  <Directory /path/to/foo>
    AllowOverride  None
    Require all granted
  </Directory>

  ProxyRequests Off
  ProxyVia Off
  ProxyPreserveHost On

  <Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all
  </Proxy>

  # don't pass through requests for statics (image,js,css, etc.)
  <Location /static/>
    ProxyPass !
  </Location>

  <Location />
    ProxyPass           http://localhost:8081/
    ProxyPassReverse    http://localhost:8081/
    SetEnv              proxy-sendchunks 1
  </Location>
    
por virtualeyes 15.04.2012 / 18:11

2 respostas

12

Você precisa usar o ProxyPass! argumento com um caminho, não em um bloco <Location> , por exemplo:

ProxyPass /static !
ProxyPass / http://localhost:8081/
ProxyPassReverse / http://localhost:8081/

Acredito que essas regras são processadas na ordem em que aparecem na configuração, por isso, especifique primeiro as regras de exclusão.

    
por 15.04.2012 / 18:32
1

A maneira de fazê-lo funcionar dentro de Location blocks é inverter a ordem, ou seja, ter a declaração Location mais específica last :

DocumentRoot /path/to/foo
  ServerName foo.com
  ServerAdmin [email protected]

  RewriteEngine On

  <Directory /path/to/foo>
    AllowOverride  None
    Require all granted
  </Directory>

  ProxyRequests Off
  ProxyVia Off
  ProxyPreserveHost On

  <Proxy *>
    AddDefaultCharset off
    Order deny,allow
    Allow from all
  </Proxy>

  <Location />
    ProxyPass           http://localhost:8081/
    ProxyPassReverse    http://localhost:8081/
    SetEnv              proxy-sendchunks 1
  </Location>

  # don't pass through requests for statics (image,js,css, etc.)
  <Location /static/>
    ProxyPass !
  </Location>

Isso funciona. Consulte o link para obter mais detalhes. Ele contém um exemplo exatamente como acima.

    
por 05.04.2016 / 16:28