我正在尝试在 Ubuntu Server 12.04 实例上使用 Apache 设置 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
Apache/2.2.22 (Ubuntu) 服务器在 MY_SERVER_ADDRESS 端口 80
我已经将确切的URL 和标头字段从复制并粘贴NSURLRequest
到 curl 请求中,但我无法在终端中复制错误。我也尝试过更改配置文件中的超时值,但没有区别。
注意 这发生在本地网络上的 iOS 设备上,以及与服务器在同一台机器上运行的 iOS 模拟器中(服务器是在 Virtual Box 中运行的虚拟机)。