Http升级Https
# 前言
最近在搞博客使用的是腾讯云的Cloudbase,他给一个免费的Https的域名,我要在博客上使用一些自己的服务,但是我的服务是Http协议的,然后就无法调用,导致服务不可用,我的博客中图片也无法显示,所以就准备将Http协议升级成Https协议,获取SSL证书可以看对应的博客。这篇只讲Nginx中如何配置。
# 基本概念
# 1.Docker容器
Docker中的容器相当于一个又一个的小型虚拟机,运行着对应的环境,他们之间相互隔离,若要产生联系,侧需要通过配置Docker NetWork,这样容器之间就可以相互通信了。
但是要在主机上访问对应容器的服务,则需要设置端口映射将对应的容器中服务的端口映射到主机上,主机就可以使用该服务了。
# 2.Http和Https的区别(GPT解释^^)
HTTP(HyperText Transfer Protocol)和HTTPS(HyperText Transfer Protocol Secure)是两种用于在网络上传输数据的协议,它们之间的主要区别在于安全性。
- 安全性:
- HTTP: 是一种不安全的协议,数据在传输过程中是明文的,容易被中间人攻击截获和窃听。
- HTTPS: 通过使用TLS(Transport Layer Security)或SSL(Secure Sockets Layer)协议,对数据进行加密,从而提供了更高的安全性。加密使得数据在传输过程中变得不容易被窃听或篡改。
- 端口:
- HTTP: 默认使用端口80。
- HTTPS: 默认使用端口443。
- 证书:
- HTTP: 不需要使用证书。
- HTTPS: 需要使用SSL证书,该证书用于验证网站的身份。这可以确保用户与正确的服务器建立连接,防止中间人攻击。
- 协议:
- HTTP: 数据以明文形式传输。
- HTTPS: 使用加密机制对数据进行加密,提供了更高的数据完整性和隐私保护。
- 搜索引擎排名:
- HTTP: 谷歌等搜索引擎在搜索排名时可能更倾向于HTTPS网站,因为它们提供更安全的用户体验。
- HTTPS: 使用加密通信,有助于保护用户隐私和数据完整性,可能会在搜索引擎排名中获得额外的优势。
总的来说,HTTPS相对于HTTP更安全,特别是在处理敏感信息(如登录凭证、支付信息)的网站上。因此,现代网站通常都采用HTTPS协议来保护用户的数据安全。
# 3.Nginx
这里就说一下Nginx配置的一些基本概念,假设我们现在在Docker中有一个Nginx容器,容器中目录信息如下:
对于本次需求来说,有用的就两个目录,一个是Nginx配置文件目录**/etc/nginx/,另一个是Vue项目目录/usr/local/vue/dist/**。
Nginx配置目录如下:
其中cert目录是我们自己创建的用于存放SSL证书路径,conf.d是用于存放各类配置信息的目录,nginx.conf是真正的配置文件。
nginx.conf默认配置内容如下:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log notice;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
#tcp_nopush on;
keepalive_timeout 65;
#gzip on;
include /etc/nginx/conf.d/*.conf;
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
可以看到这里面并没有配置server的信息,所有的server信息通过include /etc/nginx/conf.d/*.conf;最下面的这个代码导入进来,所以我们只需要在conf.d目录下进行编辑server信息即可。
# 配置Nginx
知道了区别之后,就可以开始着手升级了,这里需要现有Nginx的一个镜像,直接使用Docker下载默认的就可以。
先创建一个容器,将容器中的/etc/nginx目录下的所有文件cp到主机的一个文件夹下,举个栗子😉。
# 创建容器
docker run --name nginx -d nginx
# 将容器中对应的目录cp出来,要是目录不一样进容器中自行确认路径
# nginx配置路径
docker cp nginx:/etc/nginx/* /home/nginx/nginx/
2
3
4
5
文件cp出来后,将容器删除。
然后再/home/nginx/nginx/目录下创建一个目录cert,该目录用于存放SSL证书。
现在我们添加Https配置文件,在conf.d目录下创建https.conf文件并编辑。内容如下:
server {
listen 443 ssl; # 默认端口
listen [::]:443 ssl;
server_name xxxxxxx.com www.xxxxxxx.com; # 域名https不能用ip地址
ssl_certificate /etc/nginx/cert/server.crt; # 容器中对应的证书位置可以使用相对路径
ssl_certificate_key /etc/nginx/cert/server.key; # 容器中对应的证书key位置
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root /usr/local/vue/dist;
try_files $uri $uri/ /index.html;
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
15
后续我还需要继续测试一下,上面为最基本的规则。
# Nginx启动!
docker run --name https_nginx \
-p 80:80 -p 443:443 \ # 开放端口
-v /home/nginx/dist:/usr/local/vue/dist \ # 将vue路径映射到主机对应目录
-v /home/nginx/nginx:/etc/nginx \ # 将nginx配置目录映射到主机对应目录
-d nginx
2
3
4
5
可以看见网站已经是Https辣😆。