| 
                            
                                  一、简介二、https和http区别https协议需要到ca申请证书,一般免费证书较少,大多需要一定的费用; http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议; http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443; http的连接很简单,是无状态的;https协议是由SSL+HTTP协议构建的,可进行加密传输、身份认证的网络协议,比http协议安全。 三、https协议优缺点优点
	使用HTTPS协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性;HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。 缺点
	HTTPS协议握手阶段比较费时,会使页面的加载时间延长近50%,增加10%到20%的耗电;HTTPS连接缓存不如HTTP高效,会增加数据开销和功耗,甚至已有的安全措施也会因此而受到影响;SSL证书需要钱,功能越强大的证书费用越高,个人网站、小网站没有必要一般不会用;SSL证书通常需要绑定IP,不能在同一IP上绑定多个域名,IPv4资源不可能支撑这个消耗;HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。最关键的是,SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。 四、nginx中配置https0. nginx配置HTTPS前置条件
	服务器上已经安装nginx服务,已经具备http访问;nginx服务器是否已经安装ssl模块得支持;是否已经拥有ssl证书,如果没有可以去阿里云或者腾讯云免费申请; 1. 证书申请
证书申请前往阿里云SSL证书申请,选择免费证书申请即可 
 
 
刷新页面 
 
 
 
 2. nginx SSL模块是否支持
查看nginx是否安装http_ssl_module模块 
如果看到我上图标记得 configure arguments: --with-http_ssl_module, 则已安装(可以直接跳过nginx安装ssl支持步骤,进入 nginx.conf 配置)。 3. nginx安装3.1 nginx官网地址 
下载地址 这里下载nginx-1.18.0稳定版tar.gz 
 3.2 下载tar包到服务器目录 
	
		
			| 1 2 | cd /home/somnus wget http://nginx.org/download/nginx-1.18.0.tar.gz |  3.3 解压安装包 
	
		
			| 1 | tar -zxvf nginx-1.18.0.tar.gz |  3.4 配置ssl模块 
	
		
			| 1 2 | cd nginx-1.18.0 ./configure --prefix=/usr/local/nginx --with-http_ssl_module |  3.5 接下来执行命令编译 
使用 make 命令编译(使用make install会重新安装nginx),此时当前目录会出现 objs 文件夹。用新的 nginx 文件覆盖当前的 nginx 文件。 3.6 命令拷贝复制 
	
		
			| 1 | cp ./objs/nginx /usr/local/nginx/sbin/ |  3.7 再次查看安装的模块(configure arguments: --with-http_ssl_module说明ssl模块已安装)。 
	
		
			| 1 2 3 4 | ./nginx -V nginx version: nginx/1.18.0 … configure arguments: –with-http_ssl_module |  4. ssl 证书部署
下载申请好的 ssl 证书文件压缩包到本地并解压(这里是用的 pem 与 key 文件,文件名可以更改)。 在 nginx 目录新建 cert 文件夹存放证书文件。 
	
		
			| 1 2 | cd /usr/local/nginx mkdir cert |  
将我们申请得这两个文件上传至服务器的 cert 目录里。 5. 解压缩证书
然后我们打开浏览器的默认下载位置,解压已下载的Nginx服务器证书压缩包文件。解压后我们将会获得以下文件: 
	
		
			| 1 2 3 | www.javaqf.com.key   www.javaqf.com.pem |  6. 在Nginx服务器上安装证书
编辑 /usr/local/nginx/conf/nginx.conf 配置文件: 配置 https server。 注释掉之前的 http server 配置,新增 https server: 
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #以下属性中,以ssl开头的属性表示与证书配置有关。 server {     listen 443 ssl;     #配置HTTPS的默认访问端口为443。     #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。     #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。     server_name yourdomain;     root html;     index index.html index.htm;           ssl_certificate ../cert/cert-file-name.pem;      ssl_certificate_key ../cert/cert-file-name.key;     ssl_session_timeout 5m;     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;     #表示使用的加密套件的类型。     ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。     ssl_prefer_server_ciphers on;           location / {         root html;  #Web网站程序存放目录。         index index.html index.htm;     } } |  7. 接入流程(最终个人本地配置示例)
这里我们需要将协议更改为HTTPS配置文件,我的配置如下所示: 
	
		
			| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | server {     listen 443 ssl;     server_name www.javaqf.com;     root html;     index index.html index.htm;           ssl_certificate /usr/local/nginx/ca/www.javaqf.com.pem;      ssl_certificate_key /usr/local/nginx/ca/www.javaqf.com.key;     ssl_session_timeout 5m;     ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;     ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;     ssl_prefer_server_ciphers on;           location / {         root   /usr/share/nginx/html;         index index.html index.htm;     } } |  
最后我们就可以在浏览器中通过https协议进行访问了,比如:https://www.你的域名.com/ 8. 查看端口使用
执行看到以下结果就说明我们成功了 
	
		
			| 1 2 3 4 5 6 | [root@centos7 certs]#  netstat -lntp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      3322/nginx: master  tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      2310/sshd                  tcp        0      0 0.0.0.0:443             0.0.0.0:*               LISTEN      3322/nginx: master  |  五、nginx中其他配置https1. 配置非域名访问报404
	
		
			| 1 2 3 4 5 6 7 | server { ...     if ($host != '域名') {         return 404;     } ... } |  2. 配置企微Others2域名验证
	
		
			| 1 2 3 4 5 6 7 | server { ...     location /企微文件名称.txt {         alias 企微文件放置文件/企微文件名称.txt;     } ... } |  3.将 http 重定向 https
	
		
			| 1 2 3 4 5 6 7 | server {     listen 80;     server_name somnus.test.com;     #将请求转成https     rewrite ^(.*)$ https://$host$1 permanent;     ... } |  
 |