Apache ProxyPass 忽略静态文件

Apache ProxyPass 忽略静态文件

Apache 前端服务器连接到 Jetty 应用程序服务器时出现问题。

我认为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>

答案1

您需要使用带有路径的 ProxyPass ! 参数,而不是<Location>块中的参数,例如:

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

我相信这些规则是按照它们在配置中出现的顺序进行的,因此请务必首先指定排除规则。

答案2

使其在块内工作的方法Location是反转顺序,即使用最具体的Location语句最后的

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有关详细信息 - 它包含一个与上面几乎完全相同的示例。

相关内容