服务器之家:专注于服务器技术及软件下载分享
分类导航

云服务器|WEB服务器|FTP服务器|邮件服务器|虚拟主机|服务器安全|DNS服务器|服务器知识|Nginx|IIS|Tomcat|

服务器之家 - 服务器技术 - Nginx - 基于Nginx实现HTTPS网站设置的步骤

基于Nginx实现HTTPS网站设置的步骤

2021-09-24 16:25愿许浪尽天涯 Nginx

本文主要介绍了Nginx实现HTTPS网站设置的步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

前言:

首先在这里简单说一下为什么现在都在使用 https 协议:

其实使用 https 协议最大的原因就是因为 http 协议不安全,因为 http 数据传输时是:明文传输数据 也就是说当客户端在输入用户名和密码时,都会显示出来。而 https 协议的话则是 密文传输数据 就是在传输数据时会进行加密。

https 解决数据传输安全问题的方案:就是使用加密算法,具体来说就是混合加密算法,也就是对称加密算法和非对称加密算法的混合使用。

加密算法:

  • 对称加密:加密和解密都是使用同一密钥;常见的对称加密算法有 des、3des 和 aes 等。
  • 非对称加密:加密和解密需要使用两个不同的密钥,公钥和私钥。常用的非对称加密算法是 rsa 算法。

一、https 简介

https 其实是有两部分组成:http + ssl/tls,也就是在 http 上又加了一层处理加密信息的模块。服务端和客户端的信息传递都会通过 tls 进行加密,所以传输的数据都是加密后的数据。

https 协议原理:

基于Nginx实现HTTPS网站设置的步骤

  • 客户端通过 https 协议访问服务端的 443 端口;
  • 服务端会向客户端进行回应,并且发送证书,也就是公钥;
  • 客户端在收到证书后,会向 ca 请求判断证书是否有效,如果无效,客户端就会提示警告信息,提示此证书不安全;
  • 证书有效的话,客户端就会生成一个随机值;
  • 客户端会用服务端发送来的证书向随机值进行加密然后发送给服务端;
  • 服务端收到后,会使用本地的私钥解开,从而获得客户端的随机值。在服务端发送数据时,会使用随机值对发送的数据进行加密也就是再生成一个相当于是公钥,而随机值就是私钥;
  • 服务端向客户端发送被加密的数据;
  • 客户端收到数据后会使用随机值进行解密,从而成功传输数据。

二、nginx 实现 https 网站设置

1.安装 nginx

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@nginx ~]# yum -y install pcre-devel zlib-devel popt-devel openssl-devel openssl
[root@nginx ~]# wget http://www.nginx.org/download/nginx-1.18.0.tar.gz
[root@nginx ~]# ls
anaconda-ks.cfg  nginx-1.18.0.tar.gz
[root@nginx ~]# tar zxf nginx-1.18.0.tar.gz -c /usr/src/
[root@nginx ~]# cd /usr/src/nginx-1.18.0/
[root@nginx nginx-1.18.0]# useradd -m -s /sbin/nologin nginx
[root@nginx nginx-1.18.0]# ./configure \
--prefix=/usr/local/nginx \
--user=nginx \
--group=nginx \
--with-file-aio \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_flv_module \
--with-http_ssl_module \
--with-pcre && make && make install
[root@nginx nginx-1.18.0]# ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/
[root@nginx nginx-1.18.0]# cd
[root@nginx ~]# nginx
[root@nginx ~]# netstat -anpt | grep 80

2.创建服务器证书密钥文件

?
1
2
3
4
[root@nginx ~]# openssl genrsa -des3 -out server.key 1024
...
enter pass phrase for server.key:                                               # 输入密码
verifying - enter pass phrase for server.key:                                   # 确认密码

3.创建服务器证书的申请文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
[root@nginx ~]# openssl req -new -key server.key -out server.csr
enter pass phrase for server.key:                                               # 输入前面创建的密码
...
country name (2 letter code) [xx]:cn                                            # 国家代号. 中国输入 cn
state or province name (full name) []:beijing                                   # 省的全名. 拼音
locality name (eg, city) [default city]:beijing                                 # 市的全名. 拼音
organization name (eg, company) [default company ltd]:coco                      # 公司英文名
organizational unit name (eg, section) []:                                      # 可以不输入
common name (eg, your name or your server's hostname) []:www.coco.com           # 域名
email address []:chenzhuang1217@163.com                                         # 电子邮箱. 可随意填
...
a challenge password []:                                                        # 可以不输入
an optional company name []:                                                    # 可以不输入

备份一份服务器密钥文件

?
1
[root@nginx ~]# cp server.key server.key.org

去除文件口令

?
1
2
[root@nginx ~]# openssl rsa -in server.key.org -out server.key
enter pass phrase for server.key.org:                                           # 输入密码

4.生成证书文件

?
1
2
3
4
[root@nginx ~]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
signature ok
subject=/c=cn/st=beijing/l=beijing/o=coco/cn=www.coco.com/emailaddress=chenzhuang1217@163.com
getting private key

5.修改 nginx 主配置文件

?
1
2
3
4
5
6
7
8
9
10
11
12
[root@nginx ~]# mkdir -p /usr/local/nginx/conf/ssl
[root@nginx ~]# cp server.crt server.key /usr/local/nginx/conf/ssl/
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
server {
    listen 443;                                                         # 监听端口
    ssl on;                                                             # 开启 ssl
    ssl_certificate ssl/server.crt;                                     # ps:我这里是相对路径. 你们可以使用绝对路径
    ssl_certificate_key ssl/server.key;                                 # 系统会在 /usr/local/nginx/conf/ 目录中寻找
    server_name  www.coco.com;                                          # 证书对应的域名
    ...
}
[root@nginx ~]# nginx -s reload                                         # 重启 nginx 服务

nginx: [warn] the "ssl" directive is deprecated, use the "listen ... ssl":因为版本高于 1.15 不过可以正常启动。

验证:访问刚才设置的域名 https://www.coco.com/

基于Nginx实现HTTPS网站设置的步骤

实现客户端访问 httphttps 跳转:

这里说一下为什么要往配置文件里面再添加一个server,因为 http 协议使用的是 80 端口,而 https 协议使用的则是 443 端口

那么如果想要实现 http 跳转到 https,则需要配置两个虚拟主机(基于不同端口),然后使用 rewrite 来进行跳转。

错误配置:

在同一个 server 中开启多个端口,逻辑上来说其实并没有什么问题,但是当配置 rewrite 时,那么问题就出现了。

问题:当客户端访问 http 是会进行跳转,但是访问 https 也会跳转,这就导致了重定向次数过多。

?
1
2
3
4
5
6
7
8
server {
    listen 80;
    listen 443;
    server_name www.coco.com;
    root html;
    index index.html index.htm;
    rewrite ^(.*)$ https://$host$1 permanent;
}

基于Nginx实现HTTPS网站设置的步骤

正确配置:

将 80 端口和 443 端口区分开,简单来说就是配置基于不同端口的虚拟主机。

这样即可实现访问 80 端口进行跳转,而访问 443 端口,则直接进行访问。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@nginx ~]# vim /usr/local/nginx/conf/nginx.conf
server {
    listen 80;
    server_name  www.coco.com;
    rewrite ^(.*)$ https://$host$1 permanent;
    ...
}
server {
    listen 443;
    ssl on;
    ssl_certificate ssl/server.crt;
    ssl_certificate_key ssl/server.key;
    server_name  www.coco.com;
    ...
}
[root@localhost ~]# nginx -s reload

验证:访问 http://www.coco.com

基于Nginx实现HTTPS网站设置的步骤

到此这篇关于基于nginx实现https网站设置的步骤的文章就介绍到这了,更多相关nginx https网站设置内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://blog.csdn.net/weixin_46902396/article/details/116128539

延伸 · 阅读

精彩推荐
  • NginxNginx Rewrite使用场景及代码案例详解

    Nginx Rewrite使用场景及代码案例详解

    这篇文章主要介绍了Nginx Rewrite使用场景及代码案例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可...

    盗哥泡茶去了11862020-09-27
  • Nginxnginx ssl免密码重启教程详解

    nginx ssl免密码重启教程详解

    这篇文章给大家介绍了nginx 如何启动以及nginx ssl 免密码重启 的方法,非常不错,具有参考借鉴价值,需要的朋友参考下吧 ...

    mrr4272019-11-19
  • Nginxnginx rewrite 伪静态配置参数和使用例子

    nginx rewrite 伪静态配置参数和使用例子

    nginx下伪静态配置参数详细说明,使用nginx的朋友,nginx rewrite 伪静态配置参数和使用例子 附正则使用说明 ...

    服务器之家3102019-10-08
  • Nginx利用nginx和腾讯云免费证书制作https的方法

    利用nginx和腾讯云免费证书制作https的方法

    这篇文章主要介绍了利用nginx和腾讯云免费证书制作https的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 ...

    dalaoyang5992019-12-30
  • NginxNginx location 和 proxy_pass路径配置问题小结

    Nginx location 和 proxy_pass路径配置问题小结

    本文是基于 location 的匹配末尾是否配置 / 和 proxy_pass 末尾是否配置 / ,进行测试,完全还原了整个测试过程,本文给大家介绍Nginx location 基本配置及相关配...

    自由早晚乱余生18742021-09-24
  • Nginx如何优化Nginx的处理性能

    如何优化Nginx的处理性能

    Nginx是一个很强大的高性能Web和反向代理服务,它具有很多非常优越的特性,在连接高并发的情况下,Nginx是Apache服务不错的替代品。其特点是占有内存少,...

    Dockone.io5142020-12-11
  • Nginx通过Nginx规则重写URL去掉index.php不显示index.php

    通过Nginx规则重写URL去掉index.php不显示index.php

    Nginx不仅占用内存少,并发能力强,而且拓展功能丰富,可以通过安装模板来强化功能,也能通过规则优化,优化服务器并发处理能力,是建站的不二之选...

    Genius日记5872020-10-16
  • NginxNginx动静分离实现案例代码解析

    Nginx动静分离实现案例代码解析

    这篇文章主要介绍了Nginx动静分离实现案例代码解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参...

    盗哥泡茶去了3382020-09-27