繁体   English   中英

无法使用URL在AWS实例上访问CouchDB

[英]Can't access CouchDB on AWS instance using URL

我已经在AWS Linux实例上安装了CouchDB,并且可以通过SSH成功​​访问它,但是无法使用实例的公共可用URL访问它。

在SSH中,我可以运行curl -X GET http://127.0.0.1:5984/_all_dbs ,它给了我["_replicator","_users","baseball"] ,这正是我所期望的。

如果我尝试在Chrome中使用我的AWS实例URL: http://ec2-xx-xxx-xx-xx.eu-central-1.compute.amazonaws.com:5984/_utils : http://ec2-xx-xxx-xx-xx.eu-central-1.compute.amazonaws.com:5984/_utils : http://ec2-xx-xxx-xx-xx.eu-central-1.compute.amazonaws.com:5984/_utils Chrome说该网站拒绝连接。

我已经编辑了CouchDB local.ini文件以添加CORS。 现在,local.ini如下所示:

 ; CouchDB Configuration Settings ; Custom settings should be made in this file. They will override settings ; in default.ini, but unlike changes made to default.ini, this file won't be ; overwritten on server upgrade. [couchdb] ;max_document_size = 4294967296 ; bytes [httpd] enable_cors = true bind_address = 0.0.0.0 [cors] origins = * ;port = 5984 ;bind_address = 127.0.0.1 ; Options for the MochiWeb HTTP server. ;server_options = [{backlog, 128}, {acceptor_pool_size, 16}] ; For more socket options, consult Erlang's module 'inet' man page. ;socket_options = [{recbuf, 262144}, {sndbuf, 262144}, {nodelay, true}] ; Uncomment next line to trigger basic-auth popup on unauthorized requests. ;WWW-Authenticate = Basic realm="administrator" ; Uncomment next line to set the configuration modification whitelist. Only ; whitelisted values may be changed via the /_config URLs. To allow the admin ; to change this value over HTTP, remember to include {httpd,config_whitelist} ; itself. Excluding it from the list would require editing this file to update ; the whitelist. ;config_whitelist = [{httpd,config_whitelist}, {log,level}, {etc,etc}] [query_servers] ;nodejs = /usr/local/bin/couchjs-node /path/to/couchdb/share/server/main.js [httpd_global_handlers] ;_google = {couch_httpd_proxy, handle_proxy_req, <<"http://www.google.com">>} [couch_httpd_auth] ; If you set this to true, you should also uncomment the WWW-Authenticate line ; above. If you don't configure a WWW-Authenticate header, CouchDB will send ; Basic realm="server" in order to prevent you getting logged out. ; require_valid_user = false [log] ;level = debug [log_level_by_module] ; In this section you can specify any of the four log levels 'none', 'info', ; 'error' or 'debug' on a per-module basis. See src/*/*.erl for various ; modules. ;couch_httpd = error [os_daemons] ; For any commands listed here, CouchDB will attempt to ensure that ; the process remains alive. Daemons should monitor their environment ; to know when to exit. This can most easily be accomplished by exiting ; when stdin is closed. ;foo = /path/to/command -with args [daemons] ; enable SSL support by uncommenting the following line and supply the PEM's below. ; the default ssl port CouchDB listens on is 6984 ; httpsd = {couch_httpd, start_link, [https]} [ssl] ;cert_file = /full/path/to/server_cert.pem ;key_file = /full/path/to/server_key.pem ;password = somepassword ; set to true to validate peer certificates verify_ssl_certificates = false ; Path to file containing PEM encoded CA certificates (trusted ; certificates used for verifying a peer certificate). May be omitted if ; you do not want to verify the peer. ;cacert_file = /full/path/to/cacertf ; The verification fun (optional) if not specified, the default ; verification fun will be used. ;verify_fun = {Module, VerifyFun} ; maximum peer certificate depth ssl_certificate_max_depth = 1 ; To enable Virtual Hosts in CouchDB, add a vhost = path directive. All requests to ; the Virual Host will be redirected to the path. In the example below all requests ; to http://example.com/ are redirected to /database. ; If you run CouchDB on a specific port, include the port number in the vhost: ; example.com:5984 = /database [vhosts] ;example.com = /database/ [update_notification] ;unique notifier name=/full/path/to/exe -with "cmd line arg" ; To create an admin account uncomment the '[admins]' section below and add a ; line in the format 'username = password'. When you next start CouchDB, it ; will change the password to a hash (so that your passwords don't linger ; around in plain-text files). You can add more admin accounts with more ; 'username = password' lines. Don't forget to restart CouchDB after ; changing this. [admins] ;admin = mysecretpassword 

:更新:

运行时:

netstat -a -n | grep 5984

我得到:

tcp        0      0 127.0.0.1:5984              0.0.0.0:*                   LISTEN

127.0.0.1但应为0.0.0.0因为我已将etc/couchdb/local.inietc/couchdb/default.ini的绑定都设置为0.0.0.0。

看起来ouchdb是从其他地方获取设置吗? 当我跑步时:

couchdb -c

我得到:

/usr/local/etc/couchdb/default.ini
/usr/local/etc/couchdb/local.ini

SSH进入AWS实例时,根目录包含两个条目:

apache-couchdb-1.6.1  apache-couchdb-1.6.1.tar.gz

cdapache-couchdb-1.6.1并编辑ini文件:

vim etc/couchdb/local.ini

我认为这与/usr/local/etc/couchdb/local.ini相同吗?

我已经停止并重新启动了ouchdb,并重新启动了AWS实例,但是仍然ouchbeddb没有从配置文件中获取bind_address。

排序

事实证明/usr/local/etc/couchdb/local.inietc/couchdb/local.ini 当我将绑定放入正确的ini时,一切正常!

使它在外部可见只有两件事:您应该在外部ip地址(在EC2实例属性中显示为Public IP)上绑定并在防火墙上打开它。 因此,它必须介于这两者之间。

我看到您将绑定地址更改为0.0.0.0。 这应该通过在所有接口上进行绑定来解决绑定步骤。

但是您仍然使用ssh使用localhost连接。 然后,您不会检查同一件事。 尝试使用curl时,请尝试使用计算机ip地址而不是127.0.0.1。 它应该是在EC2实例属性中显示为“公共IP”的一个。 但是,如果有疑问,请使用ifconfig -a找出您拥有的IP地址。 您还可以通过运行以下命令netstat -a -n | grep 5984检查它实际绑定的接口netstat -a -n | grep 5984 netstat -a -n | grep 5984 它必须显示0.0.0.0:5984(或*:5984)为LISTEN(不是127.0.0.1:5984)。 否则,它不会在正确的端口上绑定,因此您应该检查CouchDb配置文件以了解原因。 它还需要检查CouchDB是否确实在使用您正在编辑的配置。

在防火墙方面-检查是否已在正确的安全组上将其打开。 它必须是EC2实例的“安全组”属性中显示的一个,并且您打开的规则必须是入站的。

有时实例防火墙跳入并也会引起麻烦。 但是我只在Windows机器上有这个问题。 我相信它在AWS Linux计算机上已被禁用(至少我从来不需要在那里进行任何调整-安全组规则总是足够的)。

如果这仍然不起作用。 我只能建议尝试使用telnet测试它是否完全连接。 由于浏览器有时会误报确切的阶段,从而使普通用户更简单。 与telnet连接是一个较低级别的测试,但是请记住,您需要使用telnet而不是冒号来分隔端口,例如telnet 1.2.3.4 5984 ,其中1.2.3.4是服务器的ip地址。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM