2013-09-25 57 views
1

我正嘗試在Ubuntu Server 12.04的實例上使用Apache設置對CouchDB的反向代理。我一直通過端口5984直接訪問CouchDB,但響應缺乏壓縮導致網絡使用率過高,反向代理允許我啓用gzip壓縮。Apache正在向CouchDB報告502反向代理上的錯誤網關

到目前爲止,我已經設置的配置文件爲我的網站像這樣:

# /etc/apache2/sites-available/SITE_NAME 
<VirtualHost *:80> 
    ServerAdmin ***** 
    ServerName ***** 
    ServerAlias ***** 
    RewriteEngine On 
    RewriteOptions Inherit 
    RewriteRule ^/couch/(.*) http://%{HTTP_HOST}:5984/$1 [P] 
    ProxyPass /couch/ http://localhost:5984/ nocanon 
    ProxyPassReverse /couch/ http://localhost:5984/ 
    DocumentRoot /var/www/*****/current/public 
    <Directory /var/www/*****/current/public> 
      Allow from all 
      Options -MultiViews 
    </Directory> 
</VirtualHost> 

在這一點上,我可以使用curl通過反向代理訪問的CouchDB,例如

curl -X GET http://MY_SERVER_ADDRESS/couch/_all_dbs 

我每次都收到成功的回覆。

但是,此代理的主要客戶端是iOS設備,並且每當我使用NSURLConnection運行相同的請求時,我都會收到502 Bad Gateway錯誤。與此響應:

代理錯誤

代理服務器接收到來自上游服務器的無效響應。
代理服務器無法處理請求GET  /couch/DATABASE_NAME/_ changes

原因:DNS查找失敗的:MY_SERVER_ADDRESS


的Apache/2.2.22(Ubuntu的)在MY_SERVER_ADDRESS端口服務器80

到目前爲止,我已經走了,以複製和粘貼確切NSURLRequest URL和頭字段到一個curl請求,但我不能在終端複製錯誤。我也在配置文件中試過changing timeout values,但沒有區別。

N.B.這發生在本地網絡上的iOS設備上以及運行在與服務器相同的機器上的iOS模擬器中(服務器是運行在Virtual Box內的虛擬機)。

回答

2

正如典型的,我發現問題後幾乎立即找到答案。

解決方法是將的Host標頭與服務器地址的值一起傳遞。例如:

Host: 10.0.0.1 

NSURLRequest

[request addValue:[url host] forHTTPHeaderField:@"Host"];