记录将网站从http升级https
http与https
你知道http是什么吗,那你知道https吗?在进行升级之前我们应该都听说http不安全,要用https,那你知道这是为什么吗?
什么是http?
HTTP 是超文本传输协议,也就是HyperText Transfer Protocol。是一种在计算机之间传输超文本的一种约定与规范。
- 超文本:文字、音乐、图片、视频、HTML文件等
- 传输:可以在两者之间互相传递数据
- 协议:一个在计算机之间通信的一种规范。
http状态码
分类 | 状态码 | 含义 | 典型场景 |
---|---|---|---|
1xx 信息性 | 100 | 服务器已接收请求第一部分,客户端可继续发送剩余部分 | 上传大文件时分段发送请求体 |
101 | 服务器切换协议(如 HTTP → WebSocket) | 客户端请求升级协议(如 WebSocket 连接) | |
2xx 成功 | 200 | 请求成功,返回正常响应内容 | 常规接口调用成功(如获取数据、查询操作) |
201 | 请求成功并创建新资源 | 用户注册、文件上传成功后返回新资源 URL | |
202 | 服务器已接受请求,但尚未完成处理(异步操作) | 提交后台任务(如批量数据处理) | |
204 | 请求成功但无响应内容 | 删除资源后无需返回数据 | |
206 | 成功处理范围请求,返回部分资源 | 视频分片下载、大文件断点续传 | |
3xx 重定向 | 301 | 资源永久重定向至新 URL | 域名变更(如旧域名永久跳转到新域名) |
302/307 | 资源临时重定向至新 URL | 表单提交后跳转至结果页面(避免重复提交) | |
303 | 请求响应需跳转到另一个 URL(常用于 POST → GET 跳转) | POST 请求后返回 GET 结果页面(如提交表单后显示详情页) | |
304 | 资源未修改,直接返回缓存内容 | 客户端携带缓存标识(如 If-None-Match)请求静态资源 | |
4xx 客户端错误 | 400 | 客户端请求语法错误或参数无效 | 发送无效 JSON 格式、缺少必填参数 |
401 | 未授权(需身份验证) | 未提供 Token、Token 过期或无效 | |
403 | 禁止访问(已认证但无权限) | 用户无权限访问资源(如普通用户尝试访问管理员页面) | |
404 | 资源不存在 | URL 路径错误、资源已删除 | |
405 | 不支持请求方法 | 对仅支持 GET 的接口发送 POST 请求 | |
413 | 请求体过大 | 上传文件超过服务器限制大小 | |
414 | URI 过长 | 请求的 URL 地址超出服务器处理范围 | |
429 | 请求频率过高(触发限流) | 短时间内多次调用接口(如恶意攻击或未作限流控制) | |
5xx 服务器错误 | 500 | 服务器内部未知错误 | 代码异常、数据库连接失败、配置错误 |
502 | 网关错误(上游服务器响应无效) | 代理服务器(如 Nginx)无法获取后端服务的正常响应 | |
503 | 服务不可用(临时维护或过载) | 服务器停机维护、并发量过高导致崩溃 | |
504 | 网关超时(上游服务器响应超时) | 后端服务处理缓慢,代理服务器等待超时 |
为什么有https?
由于Http是明文传输,存在安全风险。
- 容易被窃听
- 容易被篡改
- 容易被冒充
所以需要Https来保证传输过程的安全性,Https在Http与TCP层之间加入了SSL/TLS
协议,来解决Http存在的安全风险。
Https是如何保证安全的?
- 混合加密——>窃听
- 摘要算法——>完整性
- 数字证书——>冒充
1.混合加密
Https采用的是对称加密和非对称加密的结合方式:
- 在通信建立前采用非对称加密的方式交换「会话秘钥」,后续就不再使用非对称加密。
- 在通信过程中全部使用对称加密的「会话秘钥」的方式加密明文数据。
- 数字签名
为了保证传输的内容不被篡改,我们需要对内容计算出一个「指纹」(用摘要算法(哈希函数)来计算出内容的哈希值),然后同内容一起传输给对方,接收方接收到之后采用同样的方法得到,和发送方的指纹对比。但是存在一个问题如果指纹和内容都被替换了,这个方法不就失效了。所以我们需要通过非对称加密(一个公钥(公开),一个私钥(私有)算法来解决这个问题。
公钥加密,私钥解密。
这个目的是为了保内容传输的安全。私钥加密,公钥解密。
这个目的是为了保证消息不会被冒充。
- 数字证书
保证公私钥不会被替换,由第三人CA数字认证机构颁发。数字证书是由权威证书颁发机构(CA)签发的电子文件,用于证明通信实体(如服务器、用户)的身份合法性,并安全传递公钥以保障网络通信的加密性和数据完整性。
http和https有什么不同?
HTTP 与 HTTPS 的对比总结表格:
对比项 | HTTP | HTTPS |
---|---|---|
全称 | 超文本传输协议(HyperText Transfer Protocol) | 超文本传输安全协议(HyperText Transfer Protocol Secure) |
端口 | 默认 80 | 默认 443 |
安全性 | 明文传输,不安全 | 加密传输(SSL/TLS 层),安全 |
加密层 | 无 | 基于 SSL/TLS 协议 |
证书要求 | 无需 CA 证书 | 需要 CA 颁发的数字证书(服务器验证) |
URL 前缀 | http:// | https:// |
默认情况 | 传统网站常用 | 现代网站默认启用(尤其涉及隐私数据场景) |
性能影响 | 无加密开销,速度更快 | 存在加密/解密开销,可能稍慢(可通过 TLS 1.3 优化) |
SEO 友好性 | 无特殊优势 | 搜索引擎(如 Google)优先索引 |
适用场景 | 公开信息浏览(如新闻、静态页面) | 敏感数据传输(如登录、支付、个人信息) |
协议层级 | 应用层协议 | 应用层协议(基于传输层 SSL/TLS 封装) |
信任机制 | 无服务器身份验证 | 通过数字证书验证服务器身份 |
网站从http升级为https
SSL证书申请
- 先申请一个SSL证书,就是前面提到的数字证书,可以从FreeSSL申请一个免费的证书,按照教程操作即可。
- 申请过程中会要求将主机记录值添加到域名解析当中进行验证。
- 验证通过之后下载证书
安装证书
将解压后的证书文件都上传到服务器Nginx的conf目录下的cert目录下,如果没有cert,则自己新建一个即可。
配置nginx.conf,使证书生效
修改nginx.conf文件
server {listen 443 ssl;server_name yuhaohub.cn;ssl_certificate cert/full_chain.pem;ssl_certificate_key cert/private.key;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;root /var/www-data/yhxtapi;index index.html index.php;location / {# 建议添加默认代理规则或索引页处理try_files $uri $uri/ /index.php$is_args$args;}# 可选:添加 PHP 解析规则(若有动态页面)# location ~ \.php$ {# fastcgi_pass unix:/run/php/php-fpm.sock;# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;# include fastcgi_params;# }}
重载Nginx配置
# 平滑重启(不中断服务)
nginx -s reload
注意事项
如果你的项目使用了 axios 等 HTTP 客户端,建议在全局配置中统一处理 API 域名:
// 创建axios实例时设置baseURL
const instance = axios.create({baseURL: '/', // 相对路径,自动使用当前协议// 或显式指定HTTPS// baseURL: 'https://yuhaohub.cn/'
});// 然后使用实例发送请求
instance.get('/api/notice/pull');
网站升级成功
小结
在升级过程会碰到各种问题,大家耐心解决就行,最关键的Nginx的配置文件编写问题,大家细心一点就好了。