【问题标题】:mod_rewrite not working with reverse proxy in vhostmod_rewrite 不适用于 vhost 中的反向代理
【发布时间】:2012-02-29 10:37:10
【问题描述】:

我要做的就是:

  • 将 /static/styles/min.css 重写为 /static/styles/min.css.gz
  • 将 /static/scripts/min.js 重写为 /static/scripts/min.js.gz

诀窍是这些文件位于我反向代理到的远程(公共)服务器上。 我这样做是为了解决我们的 javascript 的同源问题,并总体上加快交付速度。 .gz 文件已存在。 无论我做什么,我都无法请求 .js 文件并返回 .gz 文件。 我已经尝试了许多不同的 RewriteConds 无济于事。 我也尝试过启用 RequestHeader unset Accept-Encoding 并注释掉。 Google PageSpeed 一直告诉我它没有收到压缩版本,当我请求使用 curl 并手动设置“Accept-Encoding: gzip, deflate”标头时,我继续收到非压缩版本。我不能将重写放在 .htaccess 文件中,因为反向代理是在 .htaccess 之前处理的,并且我需要在反向代理发生时重写已经生效。我完全不知所措。

这是我的非生产设置(我知道它需要保护):

<VirtualHost *:80>
  ServerName  ww.test.com
  DocumentRoot "/htdocs/public"

  Options +MultiViews
  AddEncoding x-gzip .gz
  AddEncoding gzip .gz

  RewriteEngine on

  RewriteCond %{HTTP:Accept-Encoding} gzip
  RewriteRule ^\.js$ $1\.js\.gz [L]

  RewriteCond %{HTTP:Accept-Encoding} gzip
  RewriteRule ^\.css$ $1\.css\.gz [L]

  <FilesMatch .*\.css\.gz>
    ForceType text/css
    Header append Content-Encoding gzip
  </FilesMatch>

  <FilesMatch .*\.js\.gz>
    ForceType text/javascript
    Header append Content-Encoding gzip
  </FilesMatch>

  ProxyRequests off
  ProxyPass /static/ http://www.ourCDN.com/ourAccount/environmentName/

  <Location /static/>
    ProxyPassReverse /
    #RequestHeader    unset  Accept-Encoding
  </Location>   

  <Directory />
    Options FollowSymLinks
    AllowOverride All
    Order deny,allow
  </Directory>
</VirtualHost>

【问题讨论】:

  • 什么同源限制适用于 css 文件:)?对静态内容使用反向代理似乎效率很低 - 为什么不将静态文件部署到您自己的服务器,代理 cdn 只是将所服务的每个资产的请求时间/流量加倍。

标签: apache apache2


【解决方案1】:

FilesMatch 规则仅适用于磁盘上的文件 - 代理请求不是磁盘上的文件,因此不会被 FilesMatch 规则捕获。

你可能想要

<LocationMatch "^/static/.*\.css\.gz$">
    ProxyPassReverse /
    ....
</LocationMatch>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 2014-07-06
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2021-01-01
    • 1970-01-01
    • 2021-12-26
    相关资源
    最近更新 更多