nginx

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > nginx > Nginx配置https

Nginx服务器配置https安全协议的实现

作者:0.0雨

HTTP是互联网中最常用的协议,用于从服务器传输超文本到浏览器,HTTPS是HTTP的安全版本,本文就来介绍一下Nginx服务器配置https安全协议的实现,感兴趣的可以了解一下

一、简介

二、https和http区别

https协议需要到ca申请证书,一般免费证书较少,大多需要一定的费用;

http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议;

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443;

http的连接很简单,是无状态的;https协议是由SSL+HTTP协议构建的,可进行加密传输、身份认证的网络协议,比http协议安全。

三、https协议优缺点

优点

缺点

四、nginx中配置https

0. nginx配置HTTPS前置条件

1. 证书申请

证书申请前往阿里云SSL证书申请,选择免费证书申请即可

alt

alt

刷新页面

alt

alt

alt

alt

2. nginx SSL模块是否支持

查看nginx是否安装http_ssl_module模块

./nginx -V

如果看到我上图标记得 configure arguments: --with-http_ssl_module, 则已安装(可以直接跳过nginx安装ssl支持步骤,进入 nginx.conf 配置)。

3. nginx安装

3.1 nginx官网地址

下载地址

这里下载nginx-1.18.0稳定版tar.gz

alt

3.2 下载tar包到服务器目录

cd /home/somnus
wget http://nginx.org/download/nginx-1.18.0.tar.gz

3.3 解压安装包

tar -zxvf nginx-1.18.0.tar.gz

3.4 配置ssl模块

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 命令拷贝复制

cp ./objs/nginx /usr/local/nginx/sbin/

3.7 再次查看安装的模块(configure arguments: --with-http_ssl_module说明ssl模块已安装)。

./nginx -V
nginx version: nginx/1.18.0
…
configure arguments: –with-http_ssl_module

4. ssl 证书部署

下载申请好的 ssl 证书文件压缩包到本地并解压(这里是用的 pem 与 key 文件,文件名可以更改)。 在 nginx 目录新建 cert 文件夹存放证书文件。

cd /usr/local/nginx
mkdir cert

将我们申请得这两个文件上传至服务器的 cert 目录里。

5. 解压缩证书

然后我们打开浏览器的默认下载位置,解压已下载的Nginx服务器证书压缩包文件。解压后我们将会获得以下文件:

www.javaqf.com.key

www.javaqf.com.pem

6. 在Nginx服务器上安装证书

编辑 /usr/local/nginx/conf/nginx.conf 配置文件:

配置 https server。 注释掉之前的 http server 配置,新增 https server:

#以下属性中,以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配置文件,我的配置如下所示:

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. 查看端口使用

netstat -lntp

执行看到以下结果就说明我们成功了

[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中其他配置https

1. 配置非域名访问报404

server {
...
	if ($host != '域名') {
    	return 404;
    }
...
}

2. 配置企微Others2域名验证

server {
...
	location /企微文件名称.txt {
    	alias 企微文件放置文件/企微文件名称.txt;
    }
...
}

3.将 http 重定向 https

server {
    listen 80;
    server_name somnus.test.com;
    #将请求转成https
    rewrite ^(.*)$ https://$host$1 permanent;
    ...
}

到此这篇关于Nginx服务器配置https安全协议的实现的文章就介绍到这了,更多相关Nginx配置https内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

您可能感兴趣的文章:
阅读全文