zoukankan      html  css  js  c++  java
  • 一个里程碑,新网站实现全站https

      本地验证node服务没问题后,上传到阿里云服务器上,发现无法访问。一开始以为是SSL证书有问题,去腾讯云SSL证书重新下载,还是不行。然后改node应用文件代码app.js,猜测是crt证书应该改成pem证书。花了很长时间研究怎么把crt证书改成pem的,没有研究出来。实在没招了,去腾讯云域名解析猜测着改,唉,还是不行。我快绝望了。

      忽然灵光一现,想起了阿里云的安全组。之前访问阿里云的22端口无法访问,发现是阿里云安全组把22端口封掉了,需要自己开启,我去安全组看了下,果然没有开启443端口。开启后,终于可以访问了!

      接下来做完80向443的跳转,无www的向有www的跳转,404和500错误跳转,然后按时写网站内容就可以了。

      80向443的跳转

      app.js里同时写两个express(),app1是访问80端口时的对象,app2是访问443端口时的对象,在访问80时,我们做了301跳转到443。注意,重定向函数要写在设置静态文件夹之前,否则会先直接访问静态文件夹的index.html了。因为路由规则是相同的路由,谁先定义的先访问谁。

    var app1 = express();
    var app2 = express();
    
    app1.get("*", (req, res, next) => {
        var host = req.headers.host;
        host = host.replace(/:d+$/, '');
        res.redirect(301, `https://${host}${req.path}`);
    
    });
    
    app1.use(express.static(path.join(__dirname, 'public')));
    app2.use(express.static(path.join(__dirname, 'public')));
    
    http.createServer(app1).listen(80);
    https.createServer(options, app2).listen(443);

    无www的向有www的跳转

    app1.get("*", (req, res, next) => {
        var host = req.headers.host;
        host = host.replace(/:d+$/, '');
        console.log(host)
        console.log('------')
        if (host.startsWith('www.')) {
            res.redirect(301, `https://${host}${req.path}`);
        } else {
            res.redirect(301, `https://www.${host}${req.path}`);
        }
    });
    
    app2.get("*", (req, res, next) => {
        var host = req.headers.host;
        host = host.replace(/:d+$/, '');
        if (host.startsWith('www.')) {
            next();
        } else {
            res.redirect(301, `https://www.${host}${req.path}`);
        }
    
    });
    
    app1.use(express.static(path.join(__dirname, 'public')));
    app2.use(express.static(path.join(__dirname, 'public')));

    404错误跳转,需要根据hexo的主题再写一个单独的404.html页面

    app2.use(function (req, res, next) {
        res.status(404).sendFile( __dirname + "/public/" + "index.html" );
    });

     

  • 相关阅读:
    Spring Aop表达式以及EL表达式处理
    Java 设计模式-观察者(Observer )
    Java 设计模式-命令模式(Command Pattern)
    Java 设计模式-策略模式(Strategy Pattern)
    隐式使用This 引用逸出
    Java 设计模式-代理模式(Proxy Pattern)
    Java 设计模式-装饰器模式(Decorator)
    单例设计模式
    抽象工厂
    XML
  • 原文地址:https://www.cnblogs.com/zhansu/p/9613362.html
Copyright © 2011-2022 走看看