Я пытаюсь настроить обратный прокси-сервер с HTTP-аутентификацией, который проксирует интерфейс REST MongoDB. Пока что у меня есть это:
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;
}
Это не работает (очевидно) и приводит к тайм-ауту шлюза. В противном случае я могу получить доступ к интерфейсу REST локально с сервера с помощью curl localhost:28017
и тому подобное.
Что я делаю не так?
Учитывая то что curl localhost:28017
работает, я предполагаю, что интерфейс REST говорит HTTP, а не HTTPS.
Измените следующую строку
proxy_pass https://127.0.0.1:28017;
С этим
proxy_pass http://127.0.0.1:28017;
Чтобы предложить альтернативное решение со стороны MongoDB (если вы хотите использовать HTTPS из конца в конец), вы можете включить SSL в MongoDB:
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 необходим, поскольку для тестирования я использую самозаверяющий сертификат.