服务器HTTPS配置(1)

现在各大浏览器都大力倡导https协议的网页传输,使用SSL证书对网页内容加密避免数据在传输时被恶意拦截修改等等。
在个人服务器上实现的web应用也应该尽可能使用HTTPS协议传输网页数据。RedBit配置https的过程颇为坎坷,因此开题方便一样在尝试https的难兄难弟们

准备工作

你需要:

  1. 一个有公网ip的服务器,RedBit的服务器系统是Ubuntu Server 20.04 LTS
  2. 一个已经备案的域名

    1. 申请SSL证书

    服务器需要使用SSL证书对传输数据加密,达到HTTPS的要求。网络上可以很容易地找到免费的SSL证书颁发网站,一般的云服务器供应商(阿里、腾讯云等)也会提供免费的SSL证书申请,如果需要也可以付费购买证书。申请通过后可将证书下载到本地。RedBit通过腾讯云申请、获取的SSL证书,包含了以下内容:
    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/目录下,后续过程也以此目录为例
    此目录下应该有:

  3. xxx.crt
  4. 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(事实也确实如此)那么我们按照步骤操作

  1. 创建配置文件

    # pwd: /etc/nginx/sites-enabled/
    vim redbit_blog
    # 按i进入编辑模式
  2. 编辑配置文件

    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保存

  3. 启动nginx服务

    nginx

    观察命令行输出,若无报错则说明nginx已经成功开始进行反向代理,可以尝试浏览器访问,可以访问web应用内容并能看到https标志即表明https配置成功。
    此处nginx报错多数为端口冲突,自主检查其他运行的服务是否占用了80、443这两个端口,关闭程序即可

写在最后

到这里,https配置的基本步骤已经执行完毕,服务器对外的443端口请求已经采用SSL证书加密。
下一期,我会介绍使用docker情况下,对流行博客框架wordpress apache版的https配置。由于wordpress的特殊性,只执行本期操作会导致所有除html外的其他资源,由于安全限制被浏览器拦截而不显示。

感谢各位的阅读,文中如有错误还烦请指出。

发表评论