nginx proxy reverso para mongodb rest interface

4

Estou tentando configurar um proxy reverso com autenticação HTTP que procura a interface REST do MongoDB. Até agora, eu tenho isso:

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;
}

Isso não funciona (obviamente) e resulta em um tempo limite do gateway. Caso contrário, posso acessar a interface REST localmente a partir do servidor com curl localhost:28017 e similar.

O que estou fazendo de errado?

    
por hayavuk 16.08.2012 / 14:51

2 respostas

5

Dado o fato de que curl localhost:28017 funciona, presumo que a interface REST fala HTTP e não HTTPS.

Altere a linha a seguir

proxy_pass https://127.0.0.1:28017;

Com esse aqui

proxy_pass http://127.0.0.1:28017;
    
por 16.08.2012 / 14:54
1

Para oferecer uma solução alternativa do lado do MongoDB (se você quiser usar o HTTPS de ponta a ponta), é possível ativar o SSL no MongoDB:

link

Você também pode ver minha resposta anterior aqui sobre o uso de SSL com o MongoDB para mais alguns detalhes:

link

Ativar o SSL também permite isso na interface REST. Só para ter certeza de que eu testei usando um build SSL ativado nas portas padrão:

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

O -k é necessário porque estou usando um certificado auto-assinado para o teste.

    
por 16.08.2012 / 19:04