web-dev-qa-db-ja.com

Apache ProxyPassが静的ファイルを無視する

Jettyアプリケーションサーバーに接続するApacheフロントサーバーに問題があります。

ProxyPass !ロケーションブロックでは、アプリケーションサーバーに処理を渡さないはずでしたが、私の場合には発生しない何らかの理由で、Jettyは欠落している静的(js、cssなど)に404を表示します。

これが私の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>
8
virtualeyes

ProxyPassを使用する必要があります! <Location>ブロック内ではなく、パス付きの引数。次に例を示します。

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

これらのルールは、設定に表示される順序で処理されると思います。そのため、最初に除外ルールを指定してください。

13
Kyle Smith

Locationブロック内で機能させる方法は、順序を逆にすることです。つまり、最も具体的なLocationステートメント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>

これは機能します。詳細については https://httpd.Apache.org/docs/2.4/mod/mod_proxy.html#proxypass を参照してください-上記とまったく同じ例が含まれています。

1
Karalga