2013-09-25 58 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"];