通过apache2代理+Let’s Encrypt实现网站https与wss

一、现实需求

为了能够提供安全的互联网服务,各大浏览器厂商(chrome、fixfox等)都在倡导SSL的应用,Let`s Encrypt应运而生。它是国内外主流浏览器都认可的免费SSL证书,并提供了配套工具,大大方便了证书的申请与部署(工具地址:https://certbot.eff.org/#ubuntutrusty-apache)。

而且,随着html5技术的普及,通过页面调用本地硬件设备(摄像头、耳麦等)的应用越来越来。但浏览器厂商的安全机制,均需要配置SSL的网站才可以调用本地设备。

本文的主要内容分为两部分,一部分是传统http网站升级为https网站;另一部分是复杂部署环境下,需要通过apache的代理与SSL相结合的部署解决方案

以下案例均取材与ubuntu 14/16操作系统下,apache2作为web服务器的配置。

二、配置普通的http网站

1.域名的前期准备

工作开始前,请先注册一个域名,并备案(使用香港或国外服务器的,不用域名备案)。然后把域名解析到目标服务器的公网IP(关于域名解析,网上资料已经很多了,不再多说)。

此文使用的示例域名:lidetao.com

2.安装apache并启用相关模块

通过SSH登录目标服务器,建议先更新下系统库:

sudo apt update
sudo apt dist-upgrade
sudo apt autoremove (卸载过时或者没有被依赖的软件,避免boot满了)

安装apache

sudo apt install apache2

安装需要的模块

cd /etc/apache2/mods-available/

a2enmod rewrite
a2enmod ssl
a2enmode proxy*  (这里把代理相关的模块都安装了,建议根据实际需要有选择的安装)

3.配置域名的绑定

3.1创建文件

cd /var/www

创建域名绑定的文件夹
mkdir lidetao.com

创建一个默认的首页
cd lidetao.com
vim index.html (写入hello world,然后保存)

3.2设置配置

cd /etc/apache2/sites-enabled

vim lidetao.com.conf 内容如下:

<VirtualHost *:80>
    ServerAdmin webmaster@lidetao.com
    DocumentRoot "/var/www/lidetao.com"
    ServerName lidetao.com
    ServerAlias www.lidetao.com

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

3.3启动服务

service apache2 restart

然后访问http://lidetao.com,页面上展示“hello world”

三、普通http网站升级为https

参考文档:https://certbot.eff.org/#ubuntutrusty-apache

执行完成后,会自动创建证书文件,一般在“/etc/letsencrypt/live”路径下。

在“/etc/apache2/sites-enabled”路径下会自动创建相关的ssl配置文件(如:lidetao.com-le-ssl.conf)。

本文https配置成功后,访问http://lidetao.com会自动跳转到https://lidetao.com

注意:生成的证书有效期为3个月,可以设置定时任务,定期自动更新。

四、非80端口网站升级为https

此部分的内容,是在【三、普通http网站升级为https】的基础上,通过代理的方式,实现非80端口的http或者ws升级为https与wss。

此处以8090端口与8080端口作为例子。

目标路径:

http://127.0.0.1:8080

ws://*:8090/ws(*代表本机绑定的任意公网或内网IP)

1.修改配置文件

cd /etc/apache2/sites-enabled

vim lidetao.com-le-ssl.conf

<IfModule mod_ssl.c>
<VirtualHost *:443>
    ServerAdmin webmaster@lidetao.com
    DocumentRoot "/var/www/lidetao.com"
    ServerName lidetao.com
    ServerAlias www.lidetao.com

###############################
#以下内容需要自己结合实际情况配置

ProxyPass /ws ws://127.0.0.1:8090/ws
ProxyPassReverse /ws ws://127.0.0.1:8090/ws

#代理根路径的放在最后
ProxyPass / http://127.0.0.1:8080/
ProxyPassReverse / http://127.0.0.1:8080/
###############################

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
SSLCertificateFile /etc/letsencrypt/live/lidetao.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/lidetao.com/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

2.启动服务

在确定8080与8090启动的情况下,重启apache

lsof -i -n -P (查看8080与8090是否已经启动)
service apache2 restart

© 2018, 李德涛博客. 版权所有.

发表评论

电子邮件地址不会被公开。 必填项已用*标注