【发布时间】:2020-05-17 09:32:52
【问题描述】:
我在我的网络应用程序上遇到了 https 设置问题。看起来我已经成功了。
但是,mongodb与nodejs连接时出现问题。
我猜是 nginx https 反向代理设置会导致这个问题,但是, 我不知道在哪里以及如何接近。
如果你能帮助我,我将非常感谢你。
环境
- Ubuntu 18.04.3 LTS
- Nginx 1.14.0
- MongoDB 4.2.3
- NodeJS + Koa
- AWS EC2
问题
Mongodb 在尝试连接时返回以下错误
-
来自 nodejs 的错误消息
服务器选择在 30000 毫秒后超时
-
来自 nginx 的错误消息
[错误] 14495#14495:*230328 上游过早关闭连接,同时从上游读取响应标头,客户端:210.218.178.27,服务器:songistock.net,请求:“GET /GetGroupPrice?target=UNION&dateOpt=2019-12- 10 HTTP/1.1”,上游:“http://127.0.0.1:3000/GetGroupPrice?target=UNION&dateOpt=2019-12-10”,主机:“www.songistock.net”,引用者:“https://www.songistock.net/”
我试过了
- 在 nginx 中设置上游
- 重新启动 Ubuntu
- 重新安装 Nginx、Mogodb
设置和代码
- /etc/nginx/sites-available
upstream stream_mongo_backend {
server localhost:27017;
}
server {
listen 27017;
location / {
proxy_pass http://stream_mongo_backend;
}
}
server {
listen 80;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name songistock.net www.songistock.net;
ssl_certificate /etc/letsencrypt/live/www.songistock.net/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.songistock.net/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
location / {
proxy_pass http://127.0.0.1:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 120;
proxy_http_version 1.1;
proxy_redirect off;
}
}
- NodeJS 代码
此代码使用 https 设置
const Router = require('koa-router');
const router = new Router();
const mongoose = require('mongoose');
const winston = require('../logger/winston');
var db = mongoose.connection;
db.once('open', function () {
winston.info("db connected");
});
mongoose.connect('mongodb://localhost:27017/songi_stock',
{ useNewUrlParser: true,useUnifiedTopology: true });
如果需要更多信息。请评论。然后我将添加更多信息。 我真的很想解决这个问题。
感谢您的帮助。
【问题讨论】: