ios - Apache 向 CouchDB 报告反向代理上的 502 错误网关

标签 ios apache couchdb nsurlconnection reverse-proxy

我正在尝试在 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 错误。有了这个回应:

Proxy Error

The proxy server received an invalid response from an upstream server.
The proxy server could not handle the request GET /couch/DATABASE_NAME/_changes.

Reason: DNS lookup failure for: MY_SERVER_ADDRESS


Apache/2.2.22 (Ubuntu) Server at MY_SERVER_ADDRESS Port 80

我已经将 NSURLRequest 中的 exact URL 和 header 字段复制并粘贴到 curl 请求中,但我无法复制错误终点站。我也试过 changing timeout values在配置文件中,但没有区别。

注意这既发生在本地网络上的 iOS 设备上,也发生在与服务器运行在同一台机器上的 iOS 模拟器中(服务器是在 Virtual Box 中运行的虚拟机)。

最佳答案

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

这个问题的解决方案是从 NSURLRequest 传递一个 Host header ,其中包含服务器地址的值。例如:

Host: 10.0.0.1

或者对于NSURLRequest:

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

关于ios - Apache 向 CouchDB 报告反向代理上的 502 错误网关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19005381/

相关文章:

android - 我们可以为 Android 和 iOS 应用程序使用 Square Checkout 流程吗?

regex - 如何使用 htaccess 将 %20 或空白自动重定向到 + 或 - ?

database - 是否有轻量级、可嵌入的键/值数据库? (类似于 diet couchdb)

ios - 图像没有被发送到下一个 View Controller

ios - 无法从 Storyboard 中显式加载 View Controller

apache - Netbeans 7.1.2 和 6.7.1,SoapUI 都停止在 OS X Mavericks 上工作

apache - 在 xampp apache server v-3.2.1 on windows-10 上创建多个虚拟主机

linux - Bash - curl 命令行执行不佳

couchdb - 使用 PHPillow 连接到 Cloudant (CouchDB)

ios - 如何使用 IQKeyboardManager 跳过隐藏的 UITextField?