带有 vhost 和 greenlock-express 的 NodeJS 子域

Posted

技术标签:

【中文标题】带有 vhost 和 greenlock-express 的 NodeJS 子域【英文标题】:NodeJS Subdomain w/ vhost and greenlock-express 【发布时间】:2019-02-13 21:57:59 【问题描述】:

我是 Node 新手,我希望我的网站 dacio.app 使用 vhost 为我的大学项目处理子域。

但是,由于 .app 域的要求,我需要对其进行保护,所以我使用 greenlock-express 来自动化它。

别太在意了,哟! TLS SNI 'giphy.dacio.app' 不匹配'主机: 土豆.dacio.app'

我尝试在repo 中使用vhost example,但看起来server-static 不支持express 应用程序。


关于如何使它工作的任何提示?我不断听到有关反向代理的消息,但我不确定是否值得付出努力,因为我什至不知道它是否会起作用 - 会有帮助吗?

server.js

#!/usr/bin/env node
'use strict';

// DEPENDENCIES
const express = require('express');
const vhost   = require('vhost');
const path    = require('path');
const glx     = require('greenlock-express');

// MIDDLEWARE
const app = express();
const giphyApp = require('../giphy-search');
const potatoesApp = require('../rotten-potatoes');
const portfolioApp = require('../dacio.app');

// ROUTES
app.use(vhost('giphy.dacio.app', giphyApp));
app.use(vhost('potatoes.dacio.app', potatoesApp));
app.use(portfolioApp);

// GREENLOCK for HTTPS
glx.create(
    version: 'draft-11',
    server: 'https://acme-v02.api.letsencrypt.org/directory',
    email: 'dacioromero@gmail.com',
    agreeTos: true,
    approveDomains: [ 'dacio.app', 'giphy.dacio.app', 'potatoes.dacio.app' ],
    configDir: '~/.config/acme/',
    app: app,
    communityMember: false
).listen(80, 443);

【问题讨论】:

当执行称为“域前端”的特定类型的攻击时,会出现该错误消息。攻击方式是用一个域名连接到 tls 服务器,然后在 http 层切换域。您知道您的情况会如何发生吗? 这是一个演示如何执行攻击的视频:youtu.be/aZgVqPzoZTY?list=PLZaEVINf2Bq_lrS-OOzTUJB4q3HxarlXk @CoolAJ86 我认为这可能是与 Firefox 和 Chrome 有关的问题,因为它在 Safari 上运行良好。我认为这可能是一种优化,因为我的 DNS 设置中的 A 记录是相同的。 这对我来说听起来很奇怪。默认情况下,Google App Engine 和 AWS 会阻止域前端 IIRC,所以我不明白为什么浏览器会这样做以进行优化。你还有其他细节可以分享吗?你搞定了吗? 整件事只是我自己都不相信的猜测。所有 A 记录都指向同一个 IP,我的服务器运行的是 CentOS 7,/etc/hosts 未修改,子域的源位于 my GitHub。感谢您花时间尝试解决这个问题,我真的很感激。 【参考方案1】:

我已改用redbird,这似乎可以完成我希望做的所有事情。

const path = require('path')

const proxy = require('redbird')(
    port: 80,
    letsencrypt: 
        path: path.join(__dirname, '/certs'),
        port: 9999
    ,
    ssl: 
        http2: true,
        port: 443
    
);

proxy.register('dacio.app', 'http://localhost:8080', 
    ssl: 
        letsencrypt: 
            email: 'dacioromero@gmail.com',
            production: true,
        
    
);

proxy.register('giphy.dacio.app', 'http://localhost:8081', 
    ssl: 
        letsencrypt: 
            email: 'dacioromero@gmail.com',
            production: true
        
    
)

proxy.register('potatoes.dacio.app', 'http://localhost:8082', 
    ssl: 
        letsencrypt: 
            email: 'dacioromero@gmail.com',
            production: true
        
    
);

【讨论】:

以上是关于带有 vhost 和 greenlock-express 的 NodeJS 子域的主要内容,如果未能解决你的问题,请参考以下文章

在 mamp 免费版上使用 nginx 设置 vhost

带有 WAMP 的虚拟主机

带有 plesk 的 linux Ubuntu 上的多个 svn 存储库

重定向时的 Apache vhost 双斜杠

cname vhosts 将 cname 设置为动态子域 laravel

Apache 2.4 忽略 httpd-vhosts.conf 文件