对 Apache2 不是很熟悉,配置的时候走了不少弯路,特此记录。
前置条件
本文所有操作是在 Ubuntu 16.04 LTS 和 Apache2 环境下,以 root 权限进行执行的。Jupyter Lab 服务默认运行在 8888
端口。SSL 证书使用了由阿里云签发的免费证书。
配置主域名 SSL 证书
注意这一节配置的主域名的 SSL 证书,若只需配置二级域名,则跳过这一节
编辑文件 /etc/apache2/sites-available/default-ssl.conf
,在 ServerAdmin
下方新增一行 ServerName domain_name
,注意这里的 domain_name
替换成你自己的主域名。
然后找到找到 SSLEngine
, SSLCertificateFile
,SSLCertificateKeyFile
并修改成以下内容:
SSLEngine on
SSLCertificateFile (填写 public 证书路径 一般以 public.crt 结尾)
SSLCertificateChainFile (填写 chain 证书路径 一般以 chain.crt 结尾)
SSLCertificateKeyFile (填写 key 文件路径一般以 .key 结尾)
然后保存退出即可。
配置全局 https 访问
打开 /etc/apache2/sites-available/000-default.conf
,
在<VirtualHost *:80></VirtualHost>
标签内任意区域加入以下三行代码:
RewriteEngine on
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*) https://%{SERVER_NAME}$1 [L,R]
保存退出。执行以下命令使配置生效:
#启动 rewrite mod
a2enmod rewrite
#重启 apache
service apache2 restart
即可实现全局 https 访问。
反向代理 Jupyter Lab 服务器
因为需要能持续访问,因此新建一个名为“Jupyter”的 screen
:
screen -S Jupyter
在新的 screen 内开启 Jupyter Lab:
jupyter lab
然后按下 Ctrl + A + D
回到主窗口。
在 /etc/apache2/sites-available/
下新建配置文件:
vim /etc/apache2/sites-available/jupyter.conf
在 jupyter.conf
里面输入以下内容:
<VirtualHost *:443>
ServerAdmin 填写自己的管理员
ServerName 填写自己的域名
#SSL
SSLEngine on
SSLCertificateFile (填写 public 证书路径 一般以 public.crt 结尾)
SSLCertificateChainFile (填写 chain 证书路径 一般以 chain.crt 结尾)
SSLCertificateKeyFile (填写 key 文件路径一般以 .key 结尾)
#Lab
<location / >
ProxyPass http://localhost:8888/
ProxyPassReverse http://localhost:8888/
ProxyPassReverseCookieDomain localhost 填写二级域名
RequestHeader set Origin "http://localhost:8888"
</location>
#kernels
<Location /api/kernels/>
ProxyPass ws://localhost:8888/api/kernels/
ProxyPassReverse ws://localhost:8888/api/kernels/
</Location>
#terminals
<location /terminals/websocket/>
ProxyPass ws://localhost:8888/terminals/websocket/
ProxyPassReverse ws://localhost:8888/terminals/websocket/
</Location>
Redirect permanent / https://填写二级域名
</VirtualHost>
填写完成后保存退出,执行以下命令激活配置:
#激活配置
a2ensite jupyter.conf
#重启 Apache
service apache2 reload
service apache2 restart
此时即可使用 https://二级域名
访问 Jupyter Lab 了。