2012-02-07 103 views
0

所有我試圖做反向代理的工作是:mod_rewrite的不是虛擬主機

  • 重寫/static/styles/min.css到/static/styles/min.css.gz
  • 重寫/ static/scripts/min.js to /static/scripts/min.js.gz

訣竅是這些文件位於我反向代理的遠程(公共)服務器上。 我這樣做,所以我可以解決與我們的JavaScript相同的問題,並加快一般交付。 .gz文件已經存在。 無論我做什麼,我都無法請求.js文件並返回.gz文件。 我已經嘗試過這與許多不同的RewriteConds無濟於事。 我也嘗試過使用RequestHeader未啓用Accept-Encoding,並將其註釋掉。 谷歌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> 
+0

什麼相同來源的限制適用於CSS文件:)?對靜態內容使用反向代理似乎相當低效 - 爲什麼不將靜態文件部署到您自己的服務器上,代理cdn只是將所服務的每個資產的請求時間/流量加倍。 – AD7six 2012-02-09 08:55:53

回答

1

FilesMatch規則僅適用於磁盤上的文件 - 一個代理請求不磁盤上的文件,因此不會被FilesMatch規則捕獲。

你可能想

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