Nginx
nginx反向代理到mongodb rest介面
我正在嘗試使用代理 MongoDB 的 REST 介面的 HTTP 身份驗證設置反向代理。到目前為止,我有這個:
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 介面。我究竟做錯了什麼?
鑑於有效的事實
curl localhost:28017
,我假設 REST 介面使用 HTTP 而不是 HTTPS。更改以下行
proxy_pass https://127.0.0.1:28017;
有了這個
proxy_pass http://127.0.0.1:28017;
要從 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 是必要的,因為我使用自簽名證書進行測試。