现在各大浏览器都大力倡导https协议的网页传输,使用SSL证书对网页内容加密避免数据在传输时被恶意拦截修改等等。
在个人服务器上实现的web应用也应该尽可能使用HTTPS协议传输网页数据。RedBit配置https的过程颇为坎坷,因此开题方便一样在尝试https的难兄难弟们
准备工作
你需要:
- 一个有公网ip的服务器,RedBit的服务器系统是Ubuntu Server 20.04 LTS
- 一个已经备案的域名
1. 申请SSL证书
服务器需要使用SSL证书对传输数据加密,达到HTTPS的要求。网络上可以很容易地找到免费的SSL证书颁发网站,一般的云服务器供应商(阿里、腾讯云等)也会提供免费的SSL证书申请,如果需要也可以付费购买证书。申请通过后可将证书下载到本地。RedBit通过腾讯云申请、获取的SSL证书,包含了以下内容:
可以看到,证书已经涵盖了几种常见的HTTP服务器,下面还有3个通用的证书文件。先将SSL证书解压,等待上传服务器。2. 服务器Nginx配置
2.1 Nginx的安装
为了让多条域名解析到同一个服务器ip,仍可以提供多个网页的服务,RedBit采用的方式是使用Nginx作为反向代理的服务器。首先在服务器安装Nginx
# 普通用户下 sudo apt install nginx # 或 sudo apt-get install nginx
等待安装完成
2.2 上传SSL证书
将先前保存在本地的SSL证书通过SFTP等方式上传到服务器上,建立文件夹妥善保存。
RedBit将SSL证书存放于/root/SSL/
目录下,后续过程也以此目录为例
此目录下应该有: - xxx.crt
- xxx.key
两个文件,xxx可自定,记住备用
2.3 Nginx配置文件修改
nginx安装完成后,我们需要对配置文件做修改。
1. 修改默认端口
按照RedBit的习惯,修改nginx默认监听端口从80到8088
cd /etc/nginx/sites-enabled
vim default
将default的配置从
listen 80 default_server;
listen [::]:80 default_server;
修改为
listen 8088 default_server;
按ESC + :wq
+ ENTER保存
2. 添加站点配置文件
对于每一个网站,nginx都需要一个配置文件。这个文件让nginx知道该如何反向代理来自不同子域名的http请求
假设RedBit需要建立一个个人博客,域名为www.redbit.site(事实也确实如此)那么我们按照步骤操作
-
创建配置文件
# pwd: /etc/nginx/sites-enabled/ vim redbit_blog # 按i进入编辑模式
-
编辑配置文件
upstream redbit { # 8443为http/https服务的端口 server localhost:8443; } server{ # 设置80(http服务)端口访问返回302跳转https服务 listen 80; server_name www.redbit.site; # 只响应访问www.redbit.site的请求 rewrite ^(.*)$ https://$host$request_uri; } server{ listen 443 ssl; # 监听443(https)端口,并启用SSL证书 server_name www.redbit.site; ssl_certificate /root/SSL/xxx.crt; # xxx自主替换为文件名 ssl_certificate_key /root/SSL/xxx.key; add_header Content-Security-Policy "upgrade-insecure-requests;connect-src *"; location / { proxy_redirect off; # 禁止跳转 proxy_set_header Host $host; # 域名转发 proxy_set_header X-Real-IP $remote_addr; # IP转发 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass https://redbit; } }
一样,按ESC +
:wq
+ ENTER保存 -
启动nginx服务
nginx
观察命令行输出,若无报错则说明nginx已经成功开始进行反向代理,可以尝试浏览器访问,可以访问web应用内容并能看到https标志即表明https配置成功。
此处nginx报错多数为端口冲突,自主检查其他运行的服务是否占用了80、443这两个端口,关闭程序即可
写在最后
到这里,https配置的基本步骤已经执行完毕,服务器对外的443端口请求已经采用SSL证书加密。
下一期,我会介绍使用docker情况下,对流行博客框架wordpress apache版的https配置。由于wordpress的特殊性,只执行本期操作会导致所有除html外的其他资源,由于安全限制被浏览器拦截而不显示。
感谢各位的阅读,文中如有错误还烦请指出。