如何在Nginx中配置SSL证书
1,部署Nginx:centOS7中使用Nginx部署静态网页
2,最终得到一个 .key 文件和 一个 .pem 文件:
3. 查看配置文件路径;
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4. 创建证书相关文件夹
mkdir /etc/nginx/cert // 最好放在nginx文件夹里面
5. 上传证书到服务器
可以使用 ssl 命令行来上传证书,但是这里使用 ftp 软件来进行上传,交互体验更好,直接拖进去就可以了:
6. 添加 SSL 配置
此时可以通过 vim 指令修改上一步中的 nginx.conf 文件,但是这样体验不好,可以下载文件之后本地使用 ide 或者文本编辑器进行修改,这里使用的是 VSCode:
server {
listen 443 ssl; // 这里是新的写法
server_name your-domain.com; // 你的域名
# ssl on; // 这种已经不使用了,这么写会报警告,可以直接去掉采用第一行的写法
root /xxx/xxx/html; // 前台文件存放文件夹,一般使用 Nginx 初始化的文件夹,当然也可以自己修改
index index.html;// 上面配置的文件夹里面的index.html
ssl_certificate /xxx/cert/214292799730473.pem;// 改成你的证书的名字
ssl_certificate_key /xxx/cert/214292799730473.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;
location / {
index index.html index.htm;
}
}
server {
listen 80;
server_name your-domain.com;// 你的域名
rewrite ^(.*)$ https://$host:443$1 permanent;// 把http的域名请求转成https且转发到443端口
}
注意,一般而言,Ngnix 服务会有默认的 80 端口来接收 http 请求,所以上述的 80 端口配置中的 rewrite 需要直接添加到原配置上,否则前面的配置优先级更高,后面的 80 配置就无法生效了:
原配置中添加rewrite
重定向http到https
6. 上传配置文件
上传配置文件
7. 验证配置文件
上述的代码不能直接复制,会报错,因为无法识别双引号 //,conf 里面的注释是要用 # 来写的;
仍然使用第一步中的指令验证 conf:
nginx -t
8. 重新加载配置文件
nginx -s reload
2,最终得到一个 .key 文件和 一个 .pem 文件:
3. 查看配置文件路径;
# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
4. 创建证书相关文件夹
mkdir /etc/nginx/cert // 最好放在nginx文件夹里面
5. 上传证书到服务器
可以使用 ssl 命令行来上传证书,但是这里使用 ftp 软件来进行上传,交互体验更好,直接拖进去就可以了:
6. 添加 SSL 配置
此时可以通过 vim 指令修改上一步中的 nginx.conf 文件,但是这样体验不好,可以下载文件之后本地使用 ide 或者文本编辑器进行修改,这里使用的是 VSCode:
server {
listen 443 ssl; // 这里是新的写法
server_name your-domain.com; // 你的域名
# ssl on; // 这种已经不使用了,这么写会报警告,可以直接去掉采用第一行的写法
root /xxx/xxx/html; // 前台文件存放文件夹,一般使用 Nginx 初始化的文件夹,当然也可以自己修改
index index.html;// 上面配置的文件夹里面的index.html
ssl_certificate /xxx/cert/214292799730473.pem;// 改成你的证书的名字
ssl_certificate_key /xxx/cert/214292799730473.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;
location / {
index index.html index.htm;
}
}
server {
listen 80;
server_name your-domain.com;// 你的域名
rewrite ^(.*)$ https://$host:443$1 permanent;// 把http的域名请求转成https且转发到443端口
}
注意,一般而言,Ngnix 服务会有默认的 80 端口来接收 http 请求,所以上述的 80 端口配置中的 rewrite 需要直接添加到原配置上,否则前面的配置优先级更高,后面的 80 配置就无法生效了:
原配置中添加rewrite
重定向http到https
6. 上传配置文件
上传配置文件
7. 验证配置文件
上述的代码不能直接复制,会报错,因为无法识别双引号 //,conf 里面的注释是要用 # 来写的;
仍然使用第一步中的指令验证 conf:
nginx -t
8. 重新加载配置文件
nginx -s reload