Apache正在向反向代理向CouchDB报告502坏网关

时间:2013-09-25 12:48:46

标签: ios apache couchdb nsurlconnection reverse-proxy

我正在尝试使用Apache在Ubuntu Server 12.04的实例上为CouchDB设置反向代理。我一直通过端口5984访问CouchDB,但响应压缩不足导致网络使用过多,反向代理允许我启用gzip压缩。

到目前为止,我已经为我的网站设置了配置文件:

# /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

     

<小时/>

     位于MY_SERVER_ADDRESS端口80的Apache / 2.2.22(Ubuntu)服务器

我已经将NSURLRequest中的完全网址和标题字段复制并粘贴到curl请求中,但我无法在终端中复制错误。我也在配置文件中尝试了changing timeout values,但没有区别。

N.B。这种情况发生在本地网络上的iOS设备上,以及与服务器在同一台机器上运行的iOS模拟器中(服务器是在虚拟机箱内运行的虚拟机)。

1 个答案:

答案 0 :(得分:2)

通常情况下,我在发布问题后几乎立即找到答案。

解决方法是从Host传递NSURLRequest标头,其中包含服务器地址的值。例如:

Host: 10.0.0.1

NSURLRequest

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