一.http 与 https 区别
http简单的说是一种发布和接受html的方法、
以明文方式发送数据内容,不提供任何加密,数据很容易看懂,所以http不适合传输一些敏感的信息,如卡号,身份证号,密码等信息
https 是一种通过计算机网络进行安全通讯的传输协议,https经由http传输,但是利用SSL/TLS来加密数据包,以提供对网站服务器的身份认证,保护交换数据的完整性与私密性
https 默认工作在TCP协议的443端口,他的工作流程一般如下:
1.TCP 三次同步握手
2.客户端验证服务器数字证书
3.DH算法协商对称加密算法的密钥,hash算法的密钥
4.SSL安全加密隧道协商完成
5.网页以加密的方式传输,用协商的对称加密算法和密钥加密,保证数据机密性,
用协商的hash 算法保证数据的完成性,保证数据不被篡改
二.申请免费的SSL证书
三.在nginx中配置反向代理及证书
创建 /etc/nginx/cert 文件夹, 把上面申请的 key 和 pem 两个文件放入其中.
sudo mkdir /etc/nginx/cert
sudo mv 123456_hahaha.jarvis73.com.key /etc/nginx/cert
sudo mv 123456_hahaha.jarvis73.com.pem /etc/nginx/cert
现在创建一个反向代理服务的配置. 在 /etc/nginx/sites-available 文件夹下新建一个空白文件 chatgpt, 写入以下配置 (注意修改带 TODO 的部分为你自己的配置):
server {
# 监听端口号为 80 (http)
listen 80;
# TODO: 改为你自己的域名
server_name hahaha.jarvis73.com;
# 关闭服务器响应头中的“Server”信息。默认情况下,nginx 会在响应头中
# 添加“Server”信息,包含服务器软件的名称和版本号。关闭这个选项可以
# 增加服务器的安全性,因为攻击者可能会利用这些信息来针对特定版本的
# 服务器软件进行攻击。
server_tokens off;
# 80 端口强制重定向到 https
return 301 https://$server_name$request_uri;
}
# https 端口 443
server {
# 监听端口号为443,启用SSL加密,并开启 HTTP/2 协议支持
listen 443 ssl http2;
# TODO: 改为你自己的域名
server_name hahaha.jarvis73.com;
# ============================================================
# 下面一段用于配置 SSL 证书
# ============================================================
# TODO: *.pem 和 *.key 修改为前面申请证书的实际文件名
ssl_certificate /etc/nginx/cert/hahaha.jarvis73.com.pem;
ssl_certificate_key /etc/nginx/cert/hahaha.jarvis73.com.key;
# TODO: 自定义当前 nginx 服务日志的文件名
access_log /var/log/nginx/chatgpt-access.log;
error_log /var/log/nginx/chatgpt-error.log;
server_tokens off;
# ============================================================
# 以下部分是反向代理的设置, 具体配置方式取决于所使用的服务.
# 特别需要注意 location 和 proxy_pass 匹配的写法, 这里不再
# 展开, 请自行上网搜索.
# ============================================================
# 关闭代理的缓存. 可以保留前端的打字机效果 (ChatGPT 前端用的. 其他服务一般不需要使用该配置, 可以注释掉.)
proxy_buffering off;
# 反向代理 web-server 的 /admin 和 /static 请求到 3389 端口
location /admin {
# TODO: 设置为本地开起来的后端服务地址
proxy_pass http://127.0.0.1:3389;
# 设置转发请求时的 HTTP 头部信息
#
# 将客户端的原始 Host 头部信息传递给后端服务器,使得后端服务器能够正确处理请求的域名
proxy_set_header Host $http_host;
# 将客户端的真实 IP 地址传递给后端服务器,以便后端服务器能够记录客户端的真实 IP 地址
proxy_set_header X-Real-IP $remote_addr;
# 将客户端的 IP 地址列表传递给后端服务器,以便后端服务器能够了解请求的经过路径
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /static {
# TODO: 设置为本地开起来的后端服务地址
proxy_pass http://127.0.0.1:3389;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
# 反向代理 client 的请求到 8080 端口
location / {
# TODO: 设置为本地开起来的前端服务地址
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
sites-available 中的配置文件用于归档, 如果需要让 Nginx 启用这些配置, 还需要把该配置放入 /etc/nginx/sites-enabled文件夹中. 这通常使用软链接来实现:
cd /etc/nginx/sites-enabled
sudo ln -s /etc/nginx/sites-available/chatgpt .
注意 /etc/nginx/sites-enabled 下会有个默认的软连接 default, 直接删掉即可.
然后重载 Nginx 配置
sudo systemctl reload nginx
如果 Nginx 配置没问题的话, 此时访问 http://hahaha.jarvis73.com 就会自动重定向到 https://hahaha.jarvis73.com, 同时浏览器在打开该链接时地址栏左侧会显示加锁, 点击锁的图标会显示连接安全(此网站具有由受信任的机构颁发的有效证书), 表示所配置的 SSL 证书核验通过.
免费证书通常是 1 年有效期, 到期需要重新申请证书并更新到 Nginx 服务中, 到期未更新则访问网站时锁的图标会加一个斜线表示不安全