分布式 - 服务器Nginx:一小时入门系列之 HTTPS协议配置

文章目录

      • [1. HTTPS 协议](#1. HTTPS 协议)
      • [2. 生成 SSL 证书和私钥文件](#2. 生成 SSL 证书和私钥文件)
      • [3. 配置 SSL 证书和私钥文件](#3. 配置 SSL 证书和私钥文件)
      • [4. HTTPS 协议优化](#4. HTTPS 协议优化)

1. HTTPS 协议

HTTPS 是一种通过计算机网络进行安全通信的协议。它是HTTP的安全版本,通过使用 SSL 或 TLS 协议来加密和保护数据传输。HTTPS的主要目的是确保在客户端和服务器之间传输的数据是加密的,以防止第三方窃听、篡改或伪装。它通过使用公钥加密和私钥解密的方式来实现数据的加密和解密过程。

2. 生成 SSL 证书和私钥文件

① 这个命令会生成一个2048位的 RSA 密钥对,并将私钥保存到名为 server.key 的文件中。

shell 复制代码
[root@nginx-dev home]# openssl genrsa -des3 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
.........................+++
..............................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:

② 使用 OpenSSL 工具生成证书签名请求(CSR)的命令,在执行此命令之前,您需要确保已经生成了一个私钥文件 server.key。

shell 复制代码
[root@nginx-dev home]#  openssl req -new -key server.key -out server.csr
Enter pass phrase for server.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:anhui
Locality Name (eg, city) [Default City]:huaibei
Organization Name (eg, company) [Default Company Ltd]:baishan
Organizational Unit Name (eg, section) []:liuzi
Common Name (eg, your name or your server's hostname) []:guozhuang
Email Address []:daokou

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:zhangsan
An optional company name []:shenxinfu

③ OpenSSL 命令用于生成自签名的 SSL/TLS 证书。

shell 复制代码
[root@nginx-dev home]# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=cn/ST=anhui/L=huaibei/O=baishan/OU=liuzi/CN=guozhuang/emailAddress=daokou
Getting Private key
Enter pass phrase for server.key:

④ 查看生成的证书和证书的秘钥:

shell 复制代码
[root@nginx-dev home]# ls
server.crt  server.csr  server.key

3. 配置 SSL 证书和私钥文件

① Nginx 配置文件:在 /etc/nginx/conf.d文件夹下添加nginx配置文件:8004.conf

shell 复制代码
# 启动ruoyi-admin服务
[root@nginx-dev conf.d]# cd /home/apps
[root@nginx-dev apps]# java -jar ruoyi-admin.jar

# 启动tomcat服务
[root@nginx-dev ~]# /home/apache-tomcat-8.5.81/bin/startup.sh

[root@nginx-dev ~]# cd /etc/nginx/conf.d
[root@nginx-dev conf.d]# vi 8004.conf   

8004.conf 配置文件内容:

nginx 复制代码
server {
    listen 8004 ssl;
    server_name ruoyi.https;

    ssl_certificate     /home/server.crt;
    ssl_certificate_key /home/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_pass http://localhost:8088;
    }

    # 请求ie页面
    location = /html/ie.html {
        root  /some/path/static;
    }

    # 请求字体文件
    location ^~ /fonts/ {
        root  /some/path/static;
    }

    # css|js|png|jpg|gif|ico 页面
    location ~ \.(css|js|png|jpg|gif|ico) {
        root /some/path/static;
    }
}

Nginx服务器用于配置一个监听8004端口的HTTPS服务器:

  • listen 8004 ssl; 监听 8004 端口,并启用SSL加密。
  • ssl_certificate /home/server.crt; 指定SSL证书的路径和文件名。
  • ssl_certificate_key /home/server.key; 指定SSL证书的私钥文件的路径和文件名。
  • ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 指定支持的SSL/TLS协议版本。这里配置了TLSv1、TLSv1.1和TLSv1.2。
  • ssl_ciphers HIGH:!aNULL:!MD5; 指定SSL加密算法的优先级。这里配置了高级别的加密算法,并排除了不安全的算法,如NULL和MD5。

这段配置文件的作用是将通过HTTPS协议访问"ruoyi.https"域名的请求转发到本地的8088端口。同时,使用了SSL加密来保证通信的安全性。

② 重新加载Nginx服务:需要输入生成证书时配置的密码 zhangsan

shell 复制代码
[root@nginx-dev conf.d]# nginx -s reload
Enter PEM pass phrase:

③ 访问 https://192.168.1.9:8004

4. HTTPS 协议优化

SSL 操作会消耗额外的 CPU 资源。CPU 占用最多的操作是 SSL 握手。有两种方法可以最大程度地减少每个客户端的这些操作数:

  • 使保持活动连接能够通过一个连接发送多个请求
  • 重用 SSL 会话参数以避免并行连接和后续连接的 SSL 握手

会话存储在工作进程之间共享并由 ssl_session_cache 指令配置的 SSL 会话缓存中。一兆字节的缓存包含大约 4000 个会话。默认缓存超时为 5 分钟。可以使用 ssl_session_timeout 指令增加此超时。以下是针对具有 10 MB 共享会话缓存的多核系统优化的示例配置:

nginx 复制代码
ssl_session_cache   shared:SSL:10m;
ssl_session_timeout 10m;
nginx 复制代码
server {
    listen 8004 ssl;
    server_name ruoyi.https;

    ssl_certificate     /home/server.crt;
    ssl_certificate_key /home/server.key;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;
    ssl_session_cache   shared:SSL:10m;
	ssl_session_timeout 10m;

    location / {
        proxy_pass http://localhost:8088;
    }

    # 请求ie页面
    location = /html/ie.html {
        root  /some/path/static;
    }

    # 请求字体文件
    location ^~ /fonts/ {
        root  /some/path/static;
    }

    # css|js|png|jpg|gif|ico 页面
    location ~ \.(css|js|png|jpg|gif|ico) {
        root /some/path/static;
    }
}
相关推荐
guoguoqiang.1 小时前
我与Linux的爱恋:命令行参数|环境变量
linux·运维·服务器·c语言·学习
.生产的驴2 小时前
SpringBoot 消息队列RabbitMQ在代码中声明 交换机 与 队列使用注解创建
java·spring boot·分布式·servlet·kafka·rabbitmq·java-rabbitmq
x66ccff2 小时前
【linux】4张卡,坏了1张,怎么办?
linux·运维·服务器
lipviolet2 小时前
Redis系列---Redission分布式锁
数据库·redis·分布式
隔窗听雨眠3 小时前
基于Prometheus和Grafana的现代服务器监控体系构建
服务器
拾光师3 小时前
linux之网络命令
linux·服务器·网络
毕设木哥3 小时前
25届计算机专业毕设选题推荐-基于python+Django协调过滤的新闻推荐系统
大数据·服务器·数据库·python·django·毕业设计·课程设计
我命由我123453 小时前
GPIO 理解(基本功能、模拟案例)
linux·运维·服务器·c语言·c++·嵌入式硬件·c#
洛阳泰山3 小时前
Llamaindex 使用过程中的常见问题 (FAQ)
java·服务器·数据库·python·llm·rag·llamaindex
敲代码不忘补水3 小时前
Python 项目实践:文件批量处理
服务器·开发语言·python·项目实践