如何在服务器上部署多个应用并启用 HTTPS?

当服务器上同时运行多个网页应用时,为确保数据传输的安全性,为每个应用配置HTTPS协议是必不可少的。本文将以两个典型场景为例进行说明:一是使用WordPress搭建的网站,二是基于Docker部署的超级马里奥网页游戏。通过这两个实例,我们将详细介绍如何为不同的网页应用申请和配置HTTPS证书,从而实现安全的加密通信。

准备:

1.服务器获取:腾讯云阿里云

2. 1panel平台安装:

ubuntu系统

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh

RedHat / CentOS系统

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sh quick_start.sh

Debian系统

curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh

4.到腾讯云或者阿里云平台购买一个域名,然后将购买域名解析到当前服务器上。

5、https协议的配置

(1)基于wordpress搭建的网站ssl证书申请

对于新手用户来说,需要在1panle证书界面内先注册一个Acme账户,然后输入你的邮箱,即可完成Acme账户的创建:

随后按照下图所示的演示步骤填写完申请SSL证书的相关选项

最后就是为使用wordpress搭建的网站配置ssl证书,

(2)如何为基于docker容器构建的超级马里奥游戏配置https协议

使用下面的命令可一键在服务器上部署超级马里奥游戏:

docker run -d -p 7777:8080 --name maliao --restart=always langjudy/mario

运行下面的命令可将申请ssl工具的certbot安装到服务器上:

sudo apt update
sudo apt install certbot

在正式申请ssl证书之前,我们需要先让容器openrety停止运行,因为在申请ssl证书过程中将会使用到80端口,而openrety正好运行在80端口上。

随后运行下面的命令来完成相应网站ssl证书的申请(请先确保你申请的另外一个域名解析出来的地址也指向本服务器),

sudo certbot certonly --standalone -d example.com    #这里的example.com 为演示地址,你需要将其替换为你的真实域名

运行成功后,你为当前应用游戏申请的域名证书位于以下文件路径内:

/etc/letsencrypt/archive/example.com     #这里的example.com 为演示地址,你需要将其替换为你的真实域名

接下来,你需要将这个证书所在地址以卷的形式挂载到正在运行的openrety容器内,具体做法如下,找打目标容器后,点击更多找到编辑,随后按照下图所示进行操作即可

随后点击确定!

在服务器终端输入下列命令进入到openrety容器内部:

docker exec -it    openrety容器ID   bash

openrety容器ID的获取,先在服务器终端输入查看正在运行的全部容器,

docker ps

如下所示:

在进入Openrety容器后,使用cd命令切换到下面的地址内:

/usr/local/openresty/nginx/conf/conf.d

在容器内,我们还需要安装nano,因为容器是一个轻量化运行环境,默认情况下往往只包含最基础的工具,甚至连常见的文本编辑器都没有。接下来我们需要上述的目录下写一些基于nginx运行的代码,所以就必须先安装nano,可以用下面的命令来安装:

apt update && apt install -y nano  # 适用于 Debian/Ubuntu  
yum install -y nano  # 适用于 CentOS  

安装完毕后,再次运行下面的命令来构建一个配置文件

nano  example.com.conf   # 这里的example.com 为演示地址,你需要将其替换为你的真实域名

在进入到配置文件后,输入下面的配置代码:

server {
    listen 80;
    listen 443 ssl http2;
    server_name example.com;

    index index.php index.html index.htm default.php default.htm default.html;

    # 设置代理头
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Host $server_name;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $http_connection;

    # 日志文件路径
    #access_log /www/sites/mario.zhishi.email/log/access.log main;
    #error_log /www/sites/mario.zhishi.email/log/error.log;

    # Let's Encrypt ACME 挑战目录
    location ^~ /.well-known/acme-challenge {
        allow all;
        root /usr/share/nginx/html;
    }

    # 主路由,将流量转发到 Docker 容器的 7777 端口
    location / {
        proxy_pass http://127.0.0.1:7777;
    }

    # 强制将 HTTP 重定向到 HTTPS
    if ($scheme = http) {
        return 301 https://$host$request_uri;
    }

    # SSL 证书路径
    ssl_certificate /www/sites/mario.zhishi.email/ssl/fullchain.pem;
    ssl_certificate_key /www/sites/mario.zhishi.email/ssl/privkey.pem;

    # SSL 配置
    ssl_protocols TLSv1.3 TLSv1.2 TLSv1.1 TLSv1;
    ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:!aNULL:!eNULL:!EXPORT:!DSS:!DES:!RC4:!3DES:!MD5:!PSK:!KRB5:!SRP:!CAMELLIA:!SEED;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 处理 HTTP 请求被错误地发送到 HTTPS 端口的情况
    error_page 497 https://$host$request_uri;

    # 设置 X-Forwarded-Proto 头
    proxy_set_header X-Forwarded-Proto https;

    # 启用 HSTS
    add_header Strict-Transport-Security "max-age=31536000";
}

在配置文件内,尤其需要注意这里:

    # SSL 证书路径
    ssl_certificate /www/sites/mario.zhishi.email/ssl/fullchain.pem;
    ssl_certificate_key /www/sites/mario.zhishi.email/ssl/privkey.pem;

这里的证书路径,就是刚才挂载到容器内的ssl证书地址。在确定无误后按下ctr+X键退出配置文件,并保存刚刚编辑的配置代码。

最后就是在退出容器前,使用命令

nginx -t

检查下配置文件是否有语法错误,如果没有,那么我们在容器内重新加载nginx服务器,也就是使用下面的命令

nginx -s reload 

最终,我们成功在同一台服务器上运行多个应用,并为每个应用配置了不同的域名。同时,我们还为每个域名启用了 HTTPS 协议,以确保数据传输的安全性。

点击这里即可体验本期创建的超级玛丽奥游戏,

其他精彩内:微软的图片转三维Trellis项目

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部