0%

Another:小锁头的悲惨故事

Another:小锁头的悲惨故事

背景

上次弄ssl的事情还是半年前:http://skelviper.top/?p=172 后来发生了一些事情,比如说当这个服务器上除了wordpress还有git、owncloud和jupyter lab的时候,我自己手动管理nginx.conf有点吃力(因为菜。特别是怎么也装不上owncloud,于是听从610的建议装了个宝塔。虽然会占用一定的系统资源,但是在不同站点的管理方面方便了不少。 然后就是到最近武汉肺炎,我一直在家写个代码什么的有时候就不是很方便,然后就突发奇想在服务器上安一个jupyter这样以后什么时候都不需要在自己的电脑上配环境(毕竟时不时的电脑就会重装一下什么的 环境: 阿里云+centos+lnmp+宝塔面板

正题:配置jupyter并使用ssl加密

安装anaconda之后自带jupyter, 而jupyter远程配置网上有很多相关的文章。这一步比较顺利,然后就是ssl加密的问题,因为我使用的是宝塔面板,这方面的教程似乎不是很多,所以在这里做一个记录。 宝塔面板的逻辑是,一个服务器上你可以建很多个网站,每个网站是一个文件夹,针对任何一个网站都有一份单独的nginx配置文件,并且可以在网页直接修改,这显然方便很多。我曾经挺勤快的,现在……low 就low吧…… 配置好jupyter后呢可以通过http:{your ip}:{your port}的方式来访问,我们的目的是通过https://{your domain}这样的一个方式来访问。 首先是要对新的二级域名添加A记录指向自己服务器的ip,我尝试过通过隐性URL直接指向{ip}:{port},用ie浏览器确实能打开,但是chrome 不行,换了UA也不行,我不太明白这是为什么。 所以还是要老老实实通过nginx反向代理来解决这个问题。 在宝塔面板中新建一个站点,只有php就行。在站点设置中申请一个Let’s encrypt的免费证书,开启强制HTTPS。 由于某种神奇的设定,宝塔不支持ssl和反向代理的共存???不过这里有个trick,可以通过在伪静态一栏中添加如下代码解决这个问题。

location /.well-known/
 {

 }

有一说一,我不太理解这是为什么,但是……它work。 这样我们就可以添加反向代理规则了,在反向代理选项卡点添加,输入你的二级域名和指向的链接({ip}:{port}),确定。 本质上这一步还是在编辑nginx.conf,这里添加的代理规则会被include进本站点的配置文件中。这个步骤操作之后会在站点配置文件中加入这样一行。

include /www/server/panel/vhost/nginx/proxy/work.skelviper.top/*.conf;

一般来说这就成功了, 但是jupyter基于websocket,宝塔自动添加的反代规则无法运行代码,我们可以参考官网对这个反代规则进行一些修改。下面是我的一个示例,仅供参考。

#PROXY-START/

location /
{
    proxy_pass http://skelviper.top:8889;
    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 REMOTE-HOST $remote_addr;

    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_redirect off;

    add_header X-Cache $upstream_cache_status;

    #Set Nginx Cache

        add_header Cache-Control no-cache;
    expires 12h;
}

#PROXY-END/

保存,大功告成,在家停工停课不停学!