Skip to main content

启用HTTPS访问

如果想要给平台添加 https 的访问方式, 可以按以下步骤操作:

1.准备证书

可以使用自签名的证书或向相关机构申请安全证书.

证书包含以下 2 个文件:

  • <文件>.key
  • <文件>.pem

使用自签名的证书时, 浏览器会有不安全访问的相关提示.

2. 修改平台配置

1. 上传证书

步骤1 中得到的文件上传到平台服务器上.

可以将证书文件放置在 /平台安装根目录/airiot/web/ssl 目录下

2. 修改配置

修改 web 服务的 nginx.conf 配置文件. 该文件的路径通常为 /平台安装根目录/airiot/web/nginx.conf. 使用 vim 或其它编辑工具打开该文件, 按照以下步骤进行操作:

1. 将现有端口修改为https

如果要将现有端口修改为 https 的访问方式, 需要修改 nginx.conf 中的 80 端口对应的 Server 内容, 添加 ssl 相关配置.

注: 需要注意标有注释的内容.

server {
# 将端口号改为 443 并启用 ssl
listen 443 ssl;
# 访问域名,多个域名以空格分开
server_name localhost;

# 证书相关配置, 具体路径为实际挂载到容器中的路径
ssl_certificate /usr/local/nginx/cert/<文件名>.pem; # pem文件的路径
ssl_certificate_key /usr/local/nginx/cert/<文件名>.key; # key文件的路径

# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法

# 其余配置保持不变即可
}

2. 添加新端口为https

如果想同时允许 httphttps 两种访问方式时, 需要额外添加一套平台配置. 步骤如下:

  • 80 端口的 Server 配置复制一份
  • 按前面的 步骤 修改新复制的 Server.
# 原有的配置
server {
listen 80;
server_name localhost;
keepalive_timeout 180;
client_header_timeout 180;
send_timeout 180;
client_body_timeout 180;
client_max_body_size 300000M;
proxy_connect_timeout 3600s;
proxy_send_timeout 3600s;
proxy_read_timeout 3600s;
client_header_buffer_size 512k;
large_client_header_buffers 4 512k;
charset utf-8;

# 其它内容
}

# 新复制并修改后的配置
server {
# 将端口号改为 443 并启用 ssl
listen 443 ssl;
# 访问域名,多个域名以空格分开
server_name localhost;

# 证书相关配置, 具体路径为实际挂载到容器中的路径
ssl_certificate /usr/local/nginx/cert/<文件名>.pem; # pem文件的路径
ssl_certificate_key /usr/local/nginx/cert/<文件名>.key; # key文件的路径

# ssl验证相关配置
ssl_session_timeout 5m; #缓存有效期
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密算法
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #安全链接可选的加密协议
ssl_prefer_server_ciphers on; #使用服务器端的首选算法

# 其余配置保持不变即可
}

3. 挂载证书文件并修改相关端口

修改 docker-compose.yml 文件, 作如下修改:

  1. 将证书挂载到 web 容器中.
  2. 修改映射端口.
web:
container_name: web
image: nginx:alpine
logging:
driver: json-file
options:
max-file: "1"
max-size: 100m
networks:
- backend
- operation
ports:
# 原访问端口, http 协议
- 3030:80
# 新增端口, https 协议. 例如想修改外部访问端口为 8443 时, 可修改为 8443:443
- 443:443
restart: always
ulimits:
nofile:
hard: 3072
soft: 1024
nproc: 4096
volumes:
- /etc/localtime:/etc/localtime:ro
- /opt/app/airiot/web/html:/usr/share/nginx/html
# 添加该行内容, 将存放证书的目录挂载到容器中. 需要保证这里挂载到容器内的路径与前面 nginx.conf 文件中的证书路径保持一致.
# 格式为: 本地存放证书的目录:/usr/local/nginx/cert/
- /opt/app/airiot/web/ssl/:/usr/local/nginx/cert/
- /opt/app/airiot/web/nginx.conf:/etc/nginx/nginx.conf
- /opt/app/airiot/web/webCfg:/etc/nginx/webCfg
- /opt/app/airiot/web/portal:/usr/share/nginx/portal

4. 重启相关服务

进入到平台安装目录下(即 docker-compose.yml 文件所在目录), 执行以下命令重启相关服务, 重启成功后上述修改后效.

docker-compose up -d

5. 检查是否修改成功

执行完上述重启命令后, 使用以下命令确认 web 是否正常启动

docker ps -a | grep web

如果 web 的状态为停止状态, 表示配置有误, 可通过以下命令查看日志, 并根据日志内容作相关的调整.

docker logs web

如果 web 正常启动后, 即可通过 https 访问平台