11. Nginx进阶-HTTPS

news2024/11/16 0:32:06

简介

基本概述

SSL

SSL是安全套接层。
主要用于认证用户和服务器,确保数据发送到正确的客户机和服务器上。
SSL可以加密数据,防止数据中途被窃取。
SSL也可以维护数据的完整性,确保数据在传输过程中不被改变。

HTTPS

HTTPS就是基于SSL来实现的安全通信。

证书

证书用于保证密钥的合法性。
证书的主体可以是用户、服务、计算机等。
证书的格式准信X.509标准。
数字证书包含如下信息:

  1. 使用者的公钥值;
  2. 使用者标识信息(如名称和电子邮件地址);
  3. 有效期(证书的有效时间);
  4. 颁发者表示信息;
  5. 颁发者的数字签名;
  6. 注意:数字证书由权威公正的第三方机构签发。

小知识

  1. HTTPS证书的选择
    1. 专业版OV型证书,不显示企业名称
    2. 高级版EV型证书,显示企业名称
  2. HTTPS证书购买选择
    1. 通配符域名,如:*.o-learn.cn
    2. 保护域名,如:www.baidu.com
  3. HTTPS注意事项
    1. HTTPS不支持三级域名解析;
    2. HTTPS不支持续费,证书到期后需要重新申请并进行替换;
    3. HTTPS显示绿色,表示整个网站的URL都是HTTPS的;
    4. HTTPS显示黄色,表示网站中包含HTTP的不安全连接;
    5. HTTPS显示红色,表示证书过期或者证书是假的;

配置场景

应用

申请证书

私有证书

  1. 检查OpenSSL工具
    1. 检查是否安装
openssl --version
  1. 如未安装,以下命令安装
yum install openssl openssl-devel
  1. 检查nginx的ssl模块
nginx -V 2>&1 | grep ssl
#with-http_ssl_module
  1. 生成密钥
    1. 创建密钥目录
mkdir -p /www/ssl_key
cd /www/ssl_key
  1. 生成密钥
openssl genrsa -des3 -out wang_mingqu_com.key 1024

# Generating RSA private key, 1024 bit long modulus
# ...++++++
# ..................................................................++++++
# e is 65537 (0x10001)
# Enter pass phrase for https.key: 123456
# Verifying - Enter pass phrase for https.key: 123456
  1. 删除私钥的密码
openssl rsa -in wang_mingqu_com.key -out wang_mingqu_com.key

# Enter pass phrase for https.key: 123456
# writing RSA key
  1. 生成证书
    1. 创建签名请求证书
openssl req -new -key wang_mingqu_com.key -out wang_mingqu_com.csr

# 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) []:HeNan
# Locality Name (eg, city) [Default City]:ZhengZhou
# Organization Name (eg, company) [Default Company Ltd]:MingQuKeJi
# Organizational Unit Name (eg, section) []:YunWeiBu
# Common Name (eg, your name or your server's hostname) []:wang.mingqu.com
# Email Address []:15515190288@163.com

# Please enter the following 'extra' attributes
# to be sent with your certificate request
# A challenge password []:
# An optional company name []:
  1. 生成SSL证书
openssl x509 -req -days 365 -in wang_mingqu_com.csr -signkey wang_mingqu_com.key -out wang_mingqu_com.crt

# Signature ok
# subject=/C=CN/ST=HeNan/L=ZhengZhou/O=MingQuKeJi/OU=YunWeiBu/CN=wang.mingqu.com/emailAddress=15515190288@163.com
# Getting Private key
  1. 查看证书和密钥
ll /www/ssl_key/
total 28
-rw-r--r-- 1 root  root  981 Feb 26 16:36 wang_mingqu_com.crt
-rw-r--r-- 1 root  root   716 Feb 26 16:32 wang_mingqu_com.csr
-rw-r--r-- 1 root  root  887 Feb 26 16:30 wang_mingqu_com.key

公网证书

配置HTTPS

  1. 创建证书存放目录
mkdir -p /etc/nginx/ssl_key
cp /www/ssl_key/wang_mingqu_com.crt /etc/nginx/ssl_key/
cp /www/ssl_key/wang_mingqu_com.key /etc/nginx/ssl_key/
chown -R nginx:nginx /etc/nginx/ssl_key/
  1. 编辑nginx配置文件

路径:/etc/nginx/conf.d/wangmingqu.conf

server {
  listen 443 ssl;
  server_name wang.mingqu.com;
  charset utf-8;

  #配置https证书
  #ssl on; 新版本nginx中无需添加此行。

  #证书的存放路径
  ssl_certificate /etc/nginx/ssl_key/wang_mingqu_com.crt;
  ssl_certificate_key /etc/nginx/ssl_key/wang_mingqu_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 TLSv1.1 TLSv1.2;
  #使用服务器端的首选算法
  ssl_prefer_server_ciphers on;

  location / {
    root /www/wangmingqu/html;
    index index.html index.htm;
  }
}

#跳转HTTPS
server {
  listen 80;
  server_name wang.mingqu.com;
  charset utf-8;

  #server_name:表示访问的域名,也可以使用变量$host;
  #server_name,跟定义的配置文件的server_name有关;
  #host,则是用户输入的内容;
  #request_uri:表示访问时域名后所有内容。
  rewrite .* https://$server_name$request_uri redirect;
  ##写法二:
  #rewrite .* https://$host$request_uri redirect;
  ##写法三:
  #rewrite (.*)  https://$server_name$1 redirect;
}
  1. 检查配置
nginx -t
systemctl reload nginx
  1. 访问测试

image.png
image.png

负载均衡HTTPS跳转

主机规划

主机名称主机IP服务
k8s-master-1192.168.108.129Nginx Proxy
k8s-master-2192.168.108.130Nginx Web1
k8s-master-3192.168.108.131Nginx Web2

配置站点

注意

移除其他测试配置文件

cd /etc/nginx/conf.d/
rename .conf .bak *.conf

web01配置

  1. 测试数据
mkdir -p /www/html/
echo "主机:192.168.108.130" > /www/html/index.html
chown -R nginx:nginx /www/html
  1. 配置nginx
    1. 主配置文件

配置文件路径:/etc/nginx/nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
  1. 子配置文件

配置文件路径:/etc/nginx/conf.d/web01.conf

server {
  listen 443;
  server_name wang.mingqu.com;
  chartset utf-8;

  location / {
    root /www/html/;
    index index.html index.htm;
  }
}
  1. 验证nginx服务
    1. 重启服务
nginx -t
systemctl restart nginx
  1. 验证服务
curl -iv 127.0.0.1:443

web02配置

  1. 测试数据
mkdir -p /www/html/
echo "主机:192.168.108.131" > /www/html/index.html
chown -R nginx:nginx /www/html
  1. 配置nginx
    1. 主配置文件

配置文件路径:/etc/nginx/nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}
  1. 子配置文件

配置文件路径:/etc/nginx/conf.d/web02.conf

server {
  listen 443;
  server_name wang.mingqu.com;
  charset utf-8;

  location / {
    root /www/html/;
    index index.html index.htm;
  }
}
  1. 验证nginx服务
    1. 重启服务
nginx -t
systemctl restart nginx
  1. 验证服务
curl -iv 127.0.0.1:443

配置负载

注意

移除其他测试配置文件

cd /etc/nginx/conf.d/
rename .conf .bak *.conf

测试数据

mkdir -p /www/html/localhost
echo "主机:192.168.108.129" > /www/html/localhost/index.html
chown -R nginx:nginx /www/html

主配置文件

配置文件路径:/etc/nginx/nginx.conf

user  nginx;
worker_processes  auto;

error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    rewrite_log     on;
    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

子配置文件

配置文件路径:/etc/nginx/conf.d/proxy.conf

upstream web {
  server 192.168.108.130:443;
  server 192.168.108.131:443;
}

server {
  listen 80;
  server_name wang.mingqu.com;
  charset utf-8;

  location / {
    proxy_pass http://web;
  }

  location /localhost {
    root /www/html/;
    index index.html index.htm;
  }
}

验证服务

  1. 重启nginx
nginx -t
systemctl restart nginx
  1. 验证nginx
    1. 负载均衡本地服务

image.png

  1. 负载均衡后端服务

image.png
image.png

HTTPS跳转配置

证书文件

mkdir -p /etc/nginx/ssl_key
cp /www/ssl_key/wang_mingqu_com.crt /etc/nginx/ssl_key/
cp /www/ssl_key/wang_mingqu_com.key /etc/nginx/ssl_key/
chown -R nginx:nginx /etc/nginx/ssl_key/

配置文件调整

upstream web {
  server 192.168.108.130:443;
  server 192.168.108.131:443;
}

server {
  listen 443 ssl;
  server_name wang.mingqu.com;
  charset utf-8;

  #配置https证书
  #ssl on; 新版本nginx中无需添加此行。

  #证书的存放路径
  ssl_certificate /etc/nginx/ssl_key/wang_mingqu_com.crt;
  ssl_certificate_key /etc/nginx/ssl_key/wang_mingqu_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 TLSv1.1 TLSv1.2;
  #使用服务器端的首选算法
  ssl_prefer_server_ciphers on;

  location / {
    proxy_pass http://web;
    include proxy_params;
  }
}

#跳转HTTPS
server {
  listen 80;
  server_name wang.mingqu.com;
  charset utf-8;

  #server_name:表示访问的域名,也可以使用变量$host;
  #server_name,跟定义的配置文件的server_name有关;
  #host,则是用户输入的内容;
  #request_uri:表示访问时域名后所有内容。
  rewrite .* https://$server_name$request_uri redirect;
  ##写法二:
  #rewrite .* https://$host$request_uri redirect;
  ##写法三:
  #rewrite (.*)  https://$server_name$1 redirect;
}

测试HTTPS跳转

image.png
image.png
image.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1489702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

1.1_2 性能指标——速率、带宽、吞吐量

文章目录 1.1_2 性能指标——速率、带宽、吞吐量(一)速率(二)带宽(三)吞吐量 1.1_2 性能指标——速率、带宽、吞吐量 (一)速率 速率即数据率或称数据传输率或比特率。 速率就是“快…

【代码】Python3|无GUI环境中使用Seaborn作图的学习路线及代码(阴影折线图)

我有个需求是需要画图,让GPT帮我生成了一下学习计划。 学习路线依照GPT的来的,使用的Prompt工具是https://github.com/JushBJJ/Mr.-Ranedeer-AI-Tutor。 文章目录 PrerequisiteMain Curriculum1.1 Seaborn介绍Seaborn基础保存图形为文件练习 1.2 单变量数…

瑞芯微RK3588 C++部署Yolov8检测和分割模型

最近这一个月在研究国产瑞芯微板子上部署yolov8的检测和分割模型,踩了很多坑,记录一下部署的过程和遇到的一些问题: 1 环境搭建 需要的环境和代码主要包括: (1)rknn-toolkit2-1.5.2:工具链&am…

uniapp开发android原生插件

一、下载原生开发SDK Android 离线SDK - 正式版 | uni小程序SDK (dcloud.net.cn)、 https://nativesupport.dcloud.net.cn/AppDocs/download/android.html 将开发uniappa原生android的插件解压到ben本地目录,目录结构如下: 接下就可以使用 UniPlugin-Hel…

12 状态优先级

概念 cpu需要执行很多进程,有很多进程排在队列中,每个进程加载后运行一定的时间段,然后切换下一个进程。cpu如何判断进程需不需要加载,什么时候加载,依靠进程的状态和优先级属性来判断,进程调度&#xff0…

Node.js与Webpack笔记(一)

这里使用的16.19.0版本,官网和github没找到,去黑马2023年课程里找 篇幅较大会卡,此篇幅不写Webpack部分,留着下一篇 初识 1.什么是Node.js? Node.js 是一个独立的 JavaScript 运行环境,能独立执行 JS 代码&#xff…

A/D转换

硬件电路模型 模数转换代码 main.c #include <REGX52.H> #include "LCD1602.h" #include "Delay.h" #include "XPT2046.h"unsigned int ADValue; int main(){LCD_Init();LCD_ShowString(1,1,"ADJ NTC RG");while(1){ADValue …

iOS 17.0 UIGraphicsBeginImageContextWithOptions 崩溃处理

在升级到iOS17后你会发现&#xff0c;之前版本运行的很好&#xff0c;这个版本突然会出现一个运行闪退。报错日志为*** Assertion failure in void _UIGraphicsBeginImageContextWithOptions(CGSize, BOOL, CGFloat, BOOL)(), UIGraphics.m:410 跟踪到具体的报错位置如下所示&a…

redis09 集群(cluster)

思维草图 为什么要使用集群 单台redis内存容量的限制单台redis并发写量太大有性能瓶颈 redis集群认识 redis集群是对redis的水平扩容&#xff0c;即启动N个redis节点&#xff0c;将整个数据分布存储在这个N个节点中&#xff0c;每个节点存储总数据的1/N。 如下图&#xff1…

win11部署自己的privateGpt(2024-0304)

什么是privateGpt? privategpt开源项目地址 https://github.com/imartinez/privateGPT/tree/main 官方文档 https://docs.privategpt.dev/overview/welcome/welcome PrivateGPT是一个可投入生产的人工智能项目&#xff0c;利用大型语言模型&#xff08;LLMs&#xff09;的…

Windows安装SSH教程

Windows安装SSH教程 一、SSH1.SSH简介2.SSH功能3.SSH验证3.1 第一种级别&#xff08;基于口令的安全验证&#xff09;3.2 第二种级别&#xff08;基于密匙的安全验证&#xff09; 4.SSH层次4.1 传输层协议 [SSH-TRANS]4.2 用户认证协议 [SSH-USERAUTH]4.3 连接协议 [SSH-CONNEC…

场景问题: VisualVM工具Profiler JDBC不是真实执行的SQL

1. 问题 诡异的问题表象&#xff1a; 前端反馈分页接口的Total字段一直为0 使用Visualvm中的 Profiler 注入到应用后&#xff0c;查看JDBC监控得到了分页接口执行的SQL&#xff0c;复制出来执行是55. 此时还没有注意到 IN 的范围中有一个特别的值 NULL &#x1f928; 2. 排查…

【运维必学】2.零基础搞IT运维之服务器操作系统基础知识储备

微信改版了&#xff0c;现在看到我们全凭缘分&#xff0c;为了不错过【全栈工程师修炼指南】重要内容及福利&#xff0c;大家记得按照上方步骤设置「接收文章推送」哦~ 文章目录&#xff1a; 温馨提示&#xff1a;作者最近开通的知识星球&#xff0c;全栈系列从门到实践教程将会…

QT----写完的程序打包为APK在自己的手机上运行

目录 1、qt安装android组件2、打开qt配置Android 环境3、手机打开开发者模式&#xff0c;打开usb调试&#xff0c;连接电脑4、运行代码 1、qt安装android组件 qtcreater–工具-QTMaintenaceTool-startMaintenaceTool—登陆—添加或修改组件—找到android&#xff0c;安装 若是…

Windows环境MySQL全量备份+增量备份

目录 一、环境准备 1.1.安装MySQL 1.2.添加log-bin日志配置 二、创建测试数据库和表 2.1.创建测试数据库 2.2.创建测试数据表 三、全量备份恢复数据库 3.1.全量备份数据库 3.2全量恢复数据库 四、增量备份恢复数据库 4.1.增量备份数据库 4.2.增量恢复数据库 五、…

抽象步骤条(2.0版本)

vue3 router ele-plus 猜猜看为什么使用组件库&#xff01; 他呀的&#xff01;查看密码要自己写&#xff0c;验证信息也要自己写&#xff0c;所以说会用组件库会轻松一点&#xff0c;&#xff0c;&#xff0c; 代码如下 <template><div class"main"&g…

自动化构建平台(五)之Jenkins初始化配置以及插件安装操作

文章目录 前言一、安装必要插件二、系统参数配置三、全局工具配置总结 前言 上一篇我们介绍了Jenkins的安装和登录等相关操作&#xff0c;今天给大家介绍登录Jenkins后的一些初始化配置和插件安装的操作。因为如果要使用Jenkins来进行代码构建&#xff0c;必须先安装相关的插件…

WebDAV之π-Disk派盘+人生Life

人生Life是一款日程软件,在这款待办的日程软件当中各种功能极为的完善,完全的足够用户在日常当中的使用,你的待办方面的各种内容都能够在软件上面进行规划和填充,通过待办事项来帮助用户提高在日常当中的效率,对于用户来说这款待办事项的软件是绝佳的选择。 π-Disk派盘 …

VScode---php环境搭建

文章目录 1.下载php Dehug;php server2.下载php环境3.配置环境变量5.配置php.ini文件6.设置vscode6.测试遇到的问题 1.下载php Dehug;php server 2.下载php环境 下载地址&#xff1a;https://www.php.net/downloads.php 3.配置环境变量 C:\Users\hacker>php -v PHP 8.3.3 (…

c++编程复习之字符数组:电报文字

电报文字 内存限制&#xff1a;128Mb 时间限制&#xff1a;1000s 提交&#xff1a;138 解决&#xff1a;13 题目描述 输入一行电报文字&#xff0c;将字母变成其下一字母&#xff08;如’aa’变成’bb’……’zz’变成’&#xff41;&#xff41;’其它字符不变&#xff09;。 …