nginx实现https

nginx实现https

1.https概述

	https是以安全为目标的http通道,当我们采用https协议时,数据在传输过程中是加密的,那么也无法窃取和篡改数据报文信息,同时也避免网站传输时信息泄露。
	在实现https时要了解ssl协议和tls加密协议,在osi七层模型中表示层是tls协议发挥作用的一层,它通过(握手、交换密钥、告警、加密)等方式来为数据加密

2.证书类型介绍

对比 域名型DV 企业型OV 增强型EV
地址栏 锁标记+绿色https 锁标记+绿色https 锁标记+绿色https+企业log
用途 个人网站 电子商务网站、中小型企业网站 大型金融平台。政府机构
审核内容 域名所有权验证 全面的企业身份验证、域名所有权验证 最高等级的企业身份验证、域名所有权验证
颁发时长 小于10分钟 3-5个工作日 5-7个工作日
首次申请年限 1年 1-2年 1-2年
赔付保障金 125-175美金 150-175美金

3.证书购买类型

单域名:只能一个域名使用该域名
混合域名:多个域名都可以使用该证书
泛域名:通配符域名证书 例:*.xxx.com

4.https注意事项

1.证书过期没有办法续费,只能重新申领
2.三级域名无法使用https
3.证书的颜色:
	绿色:全站的url都是https加密的
	红色:假证书或者证书过期
	黄色:全站的url有一部分不是https加密的

用虚拟机模拟证书与部署

配置ssl证书语法

# 启动ssl功能
Syntax:	ssl on | off;
Default: ssl off;
Context: http, server

# 证书文件
syntax: ssl_certificate file;
Default: -
Context: http, server

# 私钥文件
syntax: ssl_certificate_key file;
Default: -
Context: http, server

单台nginx实现https

1.创建证书
openssl genrsa -idea -out /etc/nginx/ssl/server.key 2048
# 输入密码
Enter pass phrase for /etc/nginx/ssl/server.key:
2.输入详细个人信息签发证书
openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.crt
## 国家代码(2个字符)
Country Name (2 letter code) [XX]:
## 所在省
State or Province Name (full name) []:
## 城市名字
Locality Name (eg, city) [Default City]:
## 公司名字
Organization Name (eg, company) [Default Company Ltd]:
## 公司名字
Organizational Unit Name (eg, section) []:
## 要绑定的域名
Common Name (eg, your name or your server's hostname) []:
## 邮箱
Email Address []:
3.查看证书文件
[root@web01 ~]# ll /etc/nginx/ssl/
total 8
-rw-r--r--. 1 root root 1387 Jun 22 15:51 server.crt
-rw-r--r--. 1 root root 1704 Jun 22 15:51 server.key
4.编写nginx配置文件
[root@web01 ~]# vim /etc/nginx/conf.d/www.jl.com.conf
server {
        listen 443 ssl;
        server_name www.jl.com;
        root /code/test;
        index index.html;
        ssl_certificate ssl/server.crt;
        ssl_certificate_key ssl/server.key;
}
5.启动nginx
[root@web01 ~]# systemctl start nginx
6.创建站点目录
[root@web01 ~]# mkdir /code/test
部署页面
[root@web01 ~]# echo 'test 443' > /code/test/index.html
7.域名解析
10.0.0.7 www.jl.com
8.浏览器访问:www.jl.com:443 或 https://www.jl.com

1655884730611

使用rewrite协议跳转

# 用80端口跳转到443端口,提升用户体验
1.修改配置文件
[root@web01 ~]# vim /etc/nginx/conf.d/www.jl.com.conf
server{
        listen 80;
        server_name www.jl.com;
        rewrite (.*) https://www.jl.com$1 redirect;
        # 或 return 302 https://$server_name$request_uri;
}
server {
        listen 443 ssl;
        server_name www.jl.com;
        root /code/test;
        index index.html;
        ssl_certificate ssl/server.crt;
        ssl_certificate_key ssl/server.key;
}
2.重启nginx
systemctl reload nginx
3.浏览器访问

多台nginx配置ssl证书

## 在web01和web02配置
1.编写配置文件
[root@web01 ~]# vim /etc/nginx/conf.d/test.jl.com.conf
server {
        listen 80;
        server_name test.jl.com;
        root /code/test;
        index index.html;
}
[root@web02 ~]# vim /etc/nginx/conf.d/test.jl.com.conf
server {
        listen 80;
        server_name test.jl.com;
        root /code/test;
        index index.html;
}
2.创建站点目录
mkdir -p /code/test
3.部署页面
[root@web01 ~]# echo 'test web01' > /code/test/index.html
[root@web02 ~]# echo 'test web02' > /code/test/index.html
4.启动nginx
## 在代理服务器上配置(lb01)
1.先创建证书
[root@lb01 ~]# openssl genrsa -idea -out /etc/nginx/ssl/server.key 2048
[root@lb01 ~]# openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout /etc/nginx/ssl/server.key -out /etc/nginx/ssl/server.crt
2.编写nginx配置文件
[root@lb01 /etc/nginx]# vim conf.d/test.jl.com.conf
upstream test.jl.com {
        server 172.16.1.7;
        server 172.16.1.8;
}
server {
        listen 80;
        server_name test.jl.com;
        rewrite (.*) https://test.jl.com$1 redirect;
}

server {
        listen 443 ssl;
        server_name test.jl.com;
        ssl_certificate ssl/server.crt;
        ssl_certificate_key ssl/server.key;

        location /{
                proxy_pass http://test.jl.com;
                include proxy_params;
        }
}
3.域名解析
10.0.0.5 test.jl.com
4.启动nginx
5.浏览器访问

给wordpress博客加证书

1.生成证书
openssl genrsa -idea -out /etc/nginx/ssl/word.key 2048
openssl req -days 36500 -x509 -sha256 -nodes -newkey rsa:2048 -keyout /etc/nginx/ssl/word.key -out /etc/nginx/ssl/word.crt
2.编写配置文件
[root@web01 /etc/nginx/conf.d]# vim word.jl.com.conf 
server {
        listen 80;
        server_name word.jl.com;
        rewrite (.*) https://word.jl.com$1 redirect;
}
server {
        listen 443 ssl;
        server_name word.jl.com;
        root /app/wordpress;
        index index.php index.html;
        ssl_certificate ssl/word.crt;
        ssl_certificate_key ssl/word.key;
        if ( -f $request_filename/index.html ){
            rewrite (.*) $1/index.html break;
        }
        if ( -f $request_filename/index.php ){
                rewrite (.*) $1/index.php;
        }
        if ( !-f $request_filename ){
                rewrite (.*) /index.php;
        }
        location ~ \.php$ {
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param HTTPS on;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include /etc/nginx/fastcgi_params;
        }
}
3.域名解析
10.0.0.7 word.jl.com
4.浏览器访问

ssl优化参数

# 在建立完ssl握手后断开连接,在session_timeout时间内再次连接不用在获取公钥建立握手,可以用之前的连接
ssl_session_cache shared:SSL:10m;
# ssl连接断开后的超时时间
ssl_session_timeout 140m;
# 配置加密套接协议
SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 使用TLS版本协议	
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3
# nginx决定使用哪些协议与浏览器通信	
ssl_prefer_server_ciphers on
posted on   jilei  阅读(518)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示