nginx 反向代理到 mongodb rest 接口

nginx 反向代理到 mongodb rest 接口

我正在尝试设置一个具有 HTTP 身份验证的反向代理,以代理 MongoDB 的 REST 接口。到目前为止,我得到了以下内容:

server {
        listen 80;
        server_name tld.example.com;
        charset utf-8;
        access_log /home/jill/logs/nginx.access.log main;

        # Redirect all HTTP traffic to HTTPS URL
        rewrite ^(.*) https://tld.example.com$1 permanent;
}

server {
        listen 443;
        server_name tld.example.com;

        ssl on;
        ssl_prefer_server_ciphers on;
        ssl_protocols           TLSv1 SSLv3;
        ssl_ciphers             HIGH:!ADH:!MD5:@STRENGTH;
        ssl_session_cache       shared:TLSSL:16m;
        ssl_session_timeout     10m;
        ssl_certificate /path/to/cert/tld.example.com.bundle.crt;
        ssl_certificate_key /path/to/cert/tld.example.com.key;

        gzip on;
        gzip_vary on;
        gzip_comp_level 6;

        keepalive_timeout 300;
        keepalive_requests 500;

        location / {
                proxy_pass https://127.0.0.1:28017;

                proxy_redirect     off;

                proxy_max_temp_file_size 0;

                proxy_connect_timeout      90;
                proxy_send_timeout         90;
                proxy_read_timeout         90;

                proxy_buffer_size          4k;
                proxy_buffers              4 32k;
                proxy_busy_buffers_size    64k;
                proxy_temp_file_write_size 64k;

                add_header Cache-Control no-cache;

        }

        auth_basic "Restricted area";
        auth_basic_user_file /path/to/password/file;
}

这显然不起作用,并导致网关超时。否则,我可以使用curl localhost:28017类似方法从服务器内部本地访问 REST 接口。

我究竟做错了什么?

答案1

鉴于其有效性curl localhost:28017,我假设 REST 接口使用 HTTP 而不是 HTTPS。

更改以下行

proxy_pass https://127.0.0.1:28017;

有了这个

proxy_pass http://127.0.0.1:28017;

答案2

为了从 MongoDB 方面提供替代解决方案(如果您想要端到端使用 HTTPS),您可以在 MongoDB 中启用 SSL:

http://docs.mongodb.org/manual/administration/ssl/

您还可以在此处查看我之前的回答,有关使用 SSL 和 MongoDB 的更多详细信息:

https://serverfault.com/a/376598/108132

启用 SSL 也会在 REST 接口上启用它。为了确保万无一失,我在默认端口上使用启用了 SSL 的版本进行了测试:

curl -I -k https://127.0.0.1:28017
HTTP/1.0 200 OK
Content-Type: text/html;charset=utf-8
Connection: close
Content-Length: 21343

-k 是必要的,因为我在测试中使用自签名证书。

相关内容