在Nginx和NodeJS上配置HTTPS

8

我正在使用Nginx在端口80上发布静态内容,并使用433重定向(带SSL)到NodeJS。 Nginx的配置如下:

server {
    listen 443 ssl;

    ssl_certificate /opt/projetos/nodejs-project-ssl/vectortowns-cert.pem;
    ssl_certificate_key /opt/projetos/nodejs-project-ssl/vectortowns-key.pem;
    ssl_protocols        SSLv3 TLSv1;
    ssl_ciphers HIGH:!aNULL:!MD5;

    server_name 127.0.0.1:443;

    location / {
            proxy_pass  https://127.0.0.1:8443;
            proxy_redirect off;
            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 https;
    }

使用NodeJS、Express和EJS,我将动态内容发布到端口8443,并配置为使用HTTPS。请参见以下JavaScript代码(仅包含问题所需的部分)。

// other codes...
/* Enable https */
var privateKey = fs.readFileSync('/opt/projetos/nodejs-project-ssl/vectortowns-key.pem');
var certificate = fs.readFileSync('/opt/projetos/nodejs-project-ssl/vectortowns-cert.pem');
var credentials = {
    key: privateKey,
    cert: certificate
};
// other codes...
/* Controllers */
app.use(require('./controllers'));
https.createServer(credentials, app).listen(
    configuration.server.port,
    configuration.server.address,
    function(){
        logger.info('Server started: ' + configuration.server.address + ':' + configuration.server.port);
});

我的问题是:
  1. 我需要在Nginx和NodeJS中配置SSL证书和密钥吗,还是只需要在其中一个中配置?
  2. 如果只需要一个,哪个选项最好(NodeJS或Nginx)?
谢谢!
1个回答

13

使用Nginx(仅限Nginx)进行SSL,这是标准做法。正如您设置的那样,Nginx作为反向代理工作,因此它将使用本地未加密数据为给定端口443上的加密数据提供给程序,因此如果您在节点程序上也使用SSL,则它将无法工作。


谢谢,我做错了。我现在会调整 :) - lgapontes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接