使用http身份验证的Django Haystack连接错误

时间:2014-12-28 15:15:07

标签: django elasticsearch django-haystack http-authentication pyelasticsearch

我正在使用Haystack连接并与elasticsearch的安装进行交互。 Elasticsearch安装在与主Web服务器不同的盒子上。

我使用nginx在弹性搜索框上设置了HTTP身份验证。这是为了阻止未经授权访问elasticsearch。

Haystack配置看起来像这样:

HAYSTACK_CONNECTIONS = {
    'default': {
        'ENGINE': 'haystack.backends.elasticsearch_backend.ElasticsearchSearchEngine',
        'URL': 'http://USERNAME:PASSWORD@DOMAIN:PORT/',
        'INDEX_NAME': 'haystack',
    },
}

通过此设置,我收到连接错误:

elasticsearch.exceptions.ConnectionError: ConnectionError(('Connection aborted.',
gaierror(-2, 'Name or service not known'))) caused by: ProtocolError(('Connection
aborted.', gaierror(-2, 'Name or service not known')))

如果我关闭HTTP身份验证并相应地更新了与http://DOMAIN:PORT/相对应的网址,则会毫无问题地连接。

可能是Haystack(或elasticsearch-py(http://www.elasticsearch.org/guide/en/elasticsearch/client/python-api/current/)不允许在URL中使用HTTP身份验证吗?我注意到这是Solr的一个问题 - Solr authentication (using Django Haystack)

1 个答案:

答案 0 :(得分:5)

对于遇到相同问题的其他人,请将kwargs添加到config:

'KWARGS': {
    'port': parsed.port,
    'http_auth': (parsed.username, parsed.password),
}

请参阅:https://github.com/toastdriven/django-haystack/issues/1046