簡體   English   中英

使用別名和反向代理時,Apache 2.4壓縮無法正常工作

[英]Apache 2.4 compression not working when using alias and reverse proxy

問題:我有一個用於提取靜態數據的url子路徑的別名目錄。 我可以得到這個gzip壓縮就好了。 但是,當我將代理添加到其他路徑並為我的靜態數據添加例外時,壓縮會停止。

環境

  • Windows x64
  • Apache 2.4

httpd.conf中的密鑰配置

<Directory "${SRVROOT}/static">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

# I have used FilterProvider as well an know this just does javascript at the moment
AddOutputFilterByType DEFLATE text/html text/plain text/xml text/css text/javascript application/javascript
SetOutputFilter DEFLATE

<IfModule alias_module>
    Alias "/static" "${SRVROOT}/static"
    ScriptAlias /cgi-bin/ "${SRVROOT}/cgi-bin/"
</IfModule>

使用此配置和SRVROOT下的“ 靜態 ”文件夾,我放置一個文件bundle.js (3M數據)。 http://localhost/static/bundle.js查詢此文件,可以通過gzip壓縮下載600K。 都好

現在換了。 應用程序的默認路徑需要將代理轉發到另一個應用程序,而apache只是提供靜態內容。

<IfModule proxy_html_module>
    Include conf/extra/proxy-html.conf
</IfModule>

extra / proxy-html.conf文件內容

#default proxy stuff above...
ProxyRequests off
ProxyPass / http://localhost:5000/
#ProxyPass /static/ /
ProxyHTMLURLMap http://localhost:5000/ /

<Location />
        ProxyPassReverse /
        ProxyHTMLEnable On
        ProxyHTMLURLMap  /      /
        RequestHeader    unset  Accept-Encoding
</Location>

<Location /static/ >
    ProxyPass !
</Location>

這仍然允許我點擊我的靜態數據,只是現在沒有發生gzip壓縮。 我不知道這是否是apache中的錯誤,或者是否有更好的方法來配置它。

這是我的要求:

  • 我無法更改url的路徑(靜態就是這樣,root url內容被反向代理
  • 我需要壓縮
  • 部署是一個真正沒有命名為靜態的根文件夾,所以我將路由(在這個例子中) 靜態{some directory} / static它實際上是http:// localhost / static / *到一個dist文件夾現實。

似乎RequestHeader取消設置Accept-Encoding正在流入另一個Location定義。 這似乎應該是預期的行為。 這個問題似乎有兩個解決方案。

  1. 刪除ProxyHTMLURLMapRequestHeader取消設置Accept-Encoding,因為這需要解壓縮內容以進行URL重寫。
  2. 膨脹和收縮內容。 我還沒有確定這會膨脹和縮小服務器上的靜態內容。 我提到這個的唯一原因是因為Accept-Encoding的使用似乎滲透到靜態部分。 - 不知道如何測試這個。

刪除ProxyURLMap的示例

ProxyRequests off
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/

<Location /static/ >
    ProxyPass !
</Location>

#Do not use this anymore
#<Location />
#        ProxyPassReverse /
#        ProxyHTMLEnable On
#        ProxyHTMLURLMap  /      /
#        RequestHeader    unset  Accept-Encoding
#</Location>

使用INFLATE; DEFLATE的示例

ProxyRequests off
ProxyPass / http://localhost:5000/
ProxyPassReverse / http://localhost:5000/

<Location />
        ProxyPassReverse /
        ProxyHTMLEnable On
        ProxyHTMLURLMap  /      /
        SetOutputFilter INFLATE;DEFLATE
</Location>

<Location /static/ >
    ProxyPass !
</Location>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM