Apache-2.2

將 Apache 設置為具有記憶體的正向代理

  • March 25, 2018

我想用記憶體配置 apache 轉發代理。我有一些客戶端必須不時從網際網路上下載一些大文件,我希望通過這個 apache 代理來完成,以便將這些大文件記憶體在磁碟上並從記憶體中返回它們。

我已經設法配置代理,但記憶體不起作用。我啟用了cachemem_cachefile_cache模組。我的記憶體代理虛擬主機有以下配置:

<VirtualHost *:80>
ProxyRequests On
ProxyVia On

<Proxy *>
Order deny,allow
Deny from all
Allow from all
</Proxy>

CacheEnable disk /
CacheMaxFileSize 10000000000
CacheMinFileSize 1000000
CacheRoot "/var/cache/apache2/mod_disk_cache/"
CacheMaxExpire 24
CacheLastModifiedFactor 0.1
CacheIgnoreQueryString On
EnableSendfile On
CacheDefaultExpire 7200

CacheIgnoreNoLastMod On
CacheStorePrivate On
CacheStoreNoStore On

ServerName my-proxy

ErrorLog "/var/log/apache2/proxy-error.log"
CustomLog "/var/log/apache2/proxy-access.log" common
</VirtualHost>

出於測試目的,我將 Firefox 配置為使用此代理。我從http://download.java.net/jdk8/archive/b128/binaries/jdk-8-fcs-bin-b128-linux-i586-01_feb_2014.tar.gz下載了一個 zip 文件 ,大約需要 5 分鐘。我在這個事件的proxy-access.log中得到的唯一一行是:

"GET http://download.java.net/jdk8/archive/b128/binaries/jdk-8-fcs-bin-b128-linux-i586-01_feb_2014.tar.gz HTTP/1.1" 200 115883719

當我稍後檢查*/var/cache/apache2/mod_disk_cache*文件夾時,那裡什麼都沒有。下次我下載相同的文件時,它也需要同樣的 5 分鐘,儘管在我們的本地網路中速度要快得多 - 這意味著它會再次從網際網路重新下載。

我怎樣才能讓它記憶體?

我已經看到這個將 Apache 設置為帶有記憶體的正向代理問題,請閱讀What Can be Cached? - 請求或響應中沒有“授權”標頭(使用wireshark檢查)。所以在我看來它應該被記憶體。它也不應該受到這個錯誤的影響,因為 apache 版本是2.2.22-1ubuntu1不是2.4.3。

它最初沒有正確記錄,但 CacheEnable 不再隱式應用於轉發代理。現在有一個註釋和更新的範例。

http://httpd.apache.org/docs/2.4/mod/mod_cache.html#cacheenable

編輯以不在連結中隱藏答案:如CacheEnable disk http://

我不得不特意去做CacheQuickHandler off,因為ProxyPass裡面的Location。在正確之前不會開始記憶體。例子:

CacheQuickHandler off                      
CacheRoot /var/cache/apache2

<Location "/wp-content/uploads/_papaya">
   CacheEnable disk
   ProxyPass "https://remote.papaya/wp-content/uploads"
</LocationMatch>

引用自:https://serverfault.com/questions/574964