当前位置: 首页 > news >正文

网站和API支持HTTPS,最好在Nginx上配置

随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和SpringBoot应用,希望对大家有所帮助!

生成SSL自签名证书

虽然自签名证书浏览器认为并不是安全的,但是学习下SSL证书的生成还是很有必要的! 

  • 首先创建SSL证书私钥,期间需要输入两次用户名和密码,生成文件为blog.key
    openssl genrsa -des3 -out blog.key 2048
  • 利用私钥生成一个不需要输入密码的密钥文件,生成文件为blog_nopass.key
    openssl rsa -in blog.key -out blog_nopass.key
  • 创建SSL证书签名请求文件,生成SSL证书时需要使用到,生成文件为blog.csr
    openssl req -new -key blog.key -out blog.csr
  • 在生成过程中,我们需要输入一些信息,需要注意的是Common Name需要和网站域名一致;
    Enter pass phrase for blog.key:
    -----
    Country Name (2 letter code) [XX]:CN                                         # 国家代码
    State or Province Name (full name) []:jiangsu                                # 省份
    Locality Name (eg, city) [Default City]:jiangsu                              # 城市
    Organization Name (eg, company) [Default Company Ltd]:macrozheng             # 机构名称
    Organizational Unit Name (eg, section) []:dev                                # 单位名称
    Common Name (eg, your name or your server's hostname) []:blog.macrozheng.com # 网站域名
    Email Address []:macrozheng@qq.com                                           # 邮箱Please enter the following 'extra' attributes
    to be sent with your certificate request
    A challenge password []:                                                     # 私钥保护密码,可以不输入直接回车
    An optional company name []:                                                 # 可选公司名称,可以不输入直接回车
  • 生成SSL证书,有效期为365天,生成文件为blog.crt
    openssl x509 -req -days 365 -in blog.csr -signkey blog.key -out blog.crt
  • 其实最终有用的文件是两个,一个是证书文件blog.crt,另一个是不需要输入密码的证书私钥文件blog_nopass.key

Nginx支持HTTPS

SSL证书生成好了,接下来我们就可以配置Nginx来支持HTTPS了!

安装Nginx

  • 我们还是使用在Docker容器中安装Nginx的方式,先下载Nginx的Docker镜像;
    docker pull nginx:1.10

  • 下载完成后先运行一次Nginx,由于之后我们要把宿主机的Nginx配置文件映射到Docker容器中去,运行一次方便我们拷贝默认配置;
    docker run -p 80:80 --name nginx \
    -v /mydata/nginx/html:/usr/share/nginx/html \
    -v /mydata/nginx/logs:/var/log/nginx  \
    -d nginx:1.10
  • 运行成功后将容器中的Nginx配置目录拷贝到宿主机上去;

    docker container cp nginx:/etc/nginx /mydata/nginx/
  • 将宿主机上的nginx目录改名为conf,要不然/mydata/nginx/nginx这个配置文件目录看着有点别扭;

    mv /mydata/nginx/nginx /mydata/nginx/conf
  • 创建的Nginx容器复制完配置后就没用了,停止并删除容器;

    docker stop nginx
    docker rm nginx
  • 使用Docker命令重新启动Nginx服务,需要映射好配置文件,由于我们要支持HTTPS,还需要开放443端口

    docker run -p 80:80 -p 443:443 --name nginx \
    -v /mydata/nginx/html:/usr/share/nginx/html \
    -v /mydata/nginx/logs:/var/log/nginx  \
    -v /mydata/nginx/conf:/etc/nginx \
    -d nginx:1.10

 

配置支持HTTPS

  • 将我们生成好的SSL证书和私钥拷贝到Nginx的html/ssl目录下;
    cp blog_nopass.key /mydata/nginx/html/ssl/
    cp blog.crt /mydata/nginx/html/ssl/
  • 接下来我们需要给blog.macrozheng.com这个域名添加HTTPS支持,在/mydata/nginx/conf/conf.d/目录下添加Nginx配置文件blog.conf,配置文件内容如下;
    ssl_ciphers          ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; # 配置SSL加密算法ssl_prefer_server_ciphers  on; # 优先采取服务器算法ssl_session_cache    shared:SSL:10m; # 配置共享会话缓存大小ssl_session_timeout  10m; # 配置会话超时时间location / {root   /usr/share/nginx/html/www;index  index.html index.htm;}location /admin {alias   /usr/share/nginx/html/admin;index  index.html index.htm;}location /app {alias   /usr/share/nginx/html/app;index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
    }
  • 通过HTTPS访问blog.macrozheng.com这个域名,由于我们使用的是自己签名的SSL证书,浏览器会提示您的连接不是私密连接,点击继续前往可以通过HTTPS正常访问;
  • 我们可以查看下证书的颁发者信息,可以发现正好是之前我们创建SSL证书签名请求文件时录入的信息;
  • 接下来我们需要给api.macrozheng.com这个域名添加HTTPS支持,通过这个域名可以使用HTTPS访问我们的SpringBoot应用,api.crtapi_nopass.key文件需要自行生成,在/mydata/nginx/conf/conf.d/目录下添加Nginx配置文件api.conf,配置文件内容如下;
    server {listen       80; # 同时支持HTTPlisten       443 ssl; # 添加HTTPS支持server_name  api.macrozheng.com; #修改域名#ssl配置ssl_certificate      /usr/share/nginx/html/ssl/api/api.crt; # 配置证书ssl_certificate_key  /usr/share/nginx/html/ssl/api/api_nopass.key; # 配置证书私钥ssl_protocols        TLSv1 TLSv1.1 TLSv1.2; # 配置SSL协议版本 # 配置SSL加密算法ssl_ciphers          ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers  on; # 优先采取服务器算法ssl_session_cache    shared:SSL:10m; # 配置共享会话缓存大小ssl_session_timeout  10m; # 配置会话超时时间location / {proxy_pass   http://192.168.3.101:8080; # 设置代理服务访问地址proxy_set_header  Host $http_host; # 设置客户端真实的域名(包括端口号)proxy_set_header  X-Real-IP  $remote_addr; # 设置客户端真实IPproxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; # 设置在多层代理时会包含真实客户端及中间每个代理服务器的IPproxy_set_header X-Forwarded-Proto $scheme; # 设置客户端真实的协议(http还是https)index  index.html index.htm;}error_page   500 502 503 504  /50x.html;location = /50x.html {root   /usr/share/nginx/html;}
    }
  • 通过HTTPS访问api.macrozheng.com这个域名,访问地址为:https://api.xx.com/sw...
  • 任意调用一个接口测试下,比如说登录接口,可以发现已经可以通过HTTPS正常访问SpringBoot应用提供的接口。

 

使用受信任的证书

之前我们使用的是自签名的SSL证书,对于浏览器来说是无效的。使用权威机构颁发的SSL证书浏览器才会认为是有效的,这里给大家推荐两种申请免费SSL证书的方法,一种是从阿里云申请,另一种是从FreeSSL申请。

阿里云证书

  • 阿里云上可以申请的免费证书目前只有支持单个域名的DV级SSL证书。比如说你有blog.macrozheng.comapi.macrozheng.com两个二级域名需要使用HTTPS,就需要申请两个SSL证书。
  • 申请成功后点击下载Nginx证书即可;
  • 下载完成后解压会有下面两个文件;
    blog.macrozheng.com.key # 证书私钥文件
    blog.macrozheng.com.pem # 证书文件
  • 拷贝证书文件到Nginx的指定目录下,然后修改配置文件blog.conf,只要修改证书配置路径即可,修改完成后重启Nginx;
    #SSL配置
    ssl_certificate      /usr/share/nginx/html/ssl/blog/blog.macrozheng.com.pem; # 配置证书
    ssl_certificate_key  /usr/share/nginx/html/ssl/blog/blog.macrozheng.com.key; # 配置证书私钥
  • 再次通过HTTPS访问blog.macrozheng.com这个域名,发现证书已经有效了,连接也是安全的了。

FreeSSL证书

  • 如果你有使用通配符域名的需求,可以上FreeSSL申请SSL证书,不过免费的有效期只有3个月,这就意味着你过3个月就要重新申请一次了。附上官网地址:https://freessl.cn/

 

使用acme.sh自动申请证书

  • acme.sh脚本实现了acme协议, 可以从letsencrypt生成免费的证书。一般我们申请的证书有效期都是1年,过期就要重新申请了,使用acme.sh脚本可以实现到期自动申请,再也不用担心证书过期了!
  • https://github.com/acmesh-official/acme.sh   官网地址

 

 

 

 

 

相关文章:

网站和API支持HTTPS,最好在Nginx上配置

随着我们网站用户的增多,我们会逐渐意识到HTTPS加密的重要性。在不修改现有代码的情况下,要从HTTP升级到HTTPS,让Nginx支持HTTPS是个很好的选择。今天我们来讲下如何从Nginx入手,从HTTP升级到HTTPS,同时支持静态网站和…...

UnitTest笔记: 拓展库DDT的使用

DDT (Data-Drivers- Tests) 允许使用不同的测试数据运行同一个测试用例,展示为不同的测试用例。 第一步: pip安装 ddt 第二步: 创建test_baidu_ddt.py 1. 测试类要使用ddt 修饰 2. 不同形式的参数化: 列表,字典&a…...

裂缝检测,只依赖OPENCV,基于YOLO8S

裂缝检测,只依赖OPENCV,YOLOV8S 现在YOLOV8S训练目标非常方便,可以直接转换成ONNX让OPENCV调用,支持C/PYTHON,原理很简单,自己找博客,有兴趣相互交流...

python编程环境使用技巧3-程序打包pyinstaller

前言 在Python中,打包指的是将Python代码和相关资源(如配置文件、图像等)整合到一个可执行的文件或安装包中,以便于在其他环境中使用。 下面是使用pyinstaller进行打包的简要步骤: 1-安装pyinstaller:在命…...

Go 自学:defer关键字

我们可以使用defer关键字延迟代码的执行&#xff0c;相当于我们把代码放入一个stack中&#xff0c;遵循last in first out的原则输出代码。 package mainimport ("fmt" )func myDefer() {for i : 0; i < 5; i {defer fmt.Print(i)} }func main() {defer fmt.Prin…...

【云计算】Docker特别版——前端一篇学会

docker学习 文章目录 一、下载安装docker&#xff08;一&#xff09;Windows桌面应用安装&#xff08;二&#xff09;Linux命令安装 二、windows注册登录docker三、Docker的常规操作(一)、基本的 Docker 命令(二)、镜像操作(三)、容器的配置(四)、登录远程仓库 四、镜像管理(一…...

.net使用RabbitMQ小记

使用RabbitMQ的优点 1.性能全面&#xff0c;rabbitmq性能比较全面&#xff0c;是消息中间件的首选 2.高并发&#xff0c;rabbitmq实现语言是天生就具备高并发高可用的erlang语言 3.任务异步处理&#xff0c;将不需要同步处理的并且耗时长的操作由消息队列通知消息接受方进行异步…...

layUI 中 穿梭框无法获取值的细节问题

初始化的时候一定要指定id&#xff0c;不然就会出现无法调用 获得右侧数据和实例重载的方法...

Kaggle回归问题Mercedes——Benz Greener Manufacturing

目录 前言1 题目介绍2 数据清洗3 数据可视化分析4 模型训练5 源码 前言 这是我在大三选修课的课程设计&#xff0c;内容参考了Kaggle上高赞的代码&#xff0c;有详细批注&#xff0c;整体比较基础&#xff0c;结构相对完整&#xff0c;便于初学者学习。这个是一个回归问题&…...

天润融通「微藤大语言模型平台2.0」以知识驱动企业高速增长

8月23日&#xff0c;天润融通&#xff08;又称“天润云”,2167.HK&#xff09;&#xff0c;正式发布「微藤大语言模型平台2.0」。 “大模型企业知识企业知识工程”。 “不能有效记录和管理知识的企业是不能持续进步的。在企业的生产流程中&#xff0c;相比于其他场景&#xff0…...

【BUG】解决安装oracle11g或12C中无法访问临时位置的问题

项目场景&#xff1a; 安装oracle时&#xff0c;到第二步出现oracle11g或12C中无法访问临时位置的问题。 解决方案&#xff1a; 针对客户端安装&#xff0c;在cmd中执行命令&#xff1a;前面加实际路径setup.exe -ignorePrereq -J"-Doracle.install.client.validate.cli…...

2. 使用IDEA创建Spring Boot Hello项目并管理依赖——Maven入门指南

前言&#xff1a;本文将介绍如何使用IDEA创建一个Spring Boot Hello项目&#xff0c;并通过Maven来管理项目的依赖。我们从项目的创建到代码的编写&#xff0c;再到项目的构建和运行&#xff0c;一步步演示了整个过程。 &#x1f680; 作者简介&#xff1a;作为某云服务提供商的…...

Python在电路课程中的应用

1 需求 课程中有大量的计算&#xff0c;电路方程、复数计算&#xff0c;之前都是用的MATLAB online&#xff0c;可现在要过期了&#xff0c;只能更换平台。 2 工具 https://www.online-python.com/ Python3 在线工具 | 菜鸟工具 (runoob.com) 3 Sinusoid 章节 涉及到复数计…...

Spark SQL join的三种实现方式

引言 join是SQL中的常用操作&#xff0c;良好的表结构能够将数据分散到不同的表中&#xff0c;使其符合某种规范(mysql三大范式)&#xff0c;可以最大程度的减少数据冗余&#xff0c;更新容错等&#xff0c;而建立表和表之间关系的最佳方式就是join操作。 对于Spark来说有3种…...

wazuh环境配置和漏洞复现

1.wazuh配置 虚拟机 &#xff08;OVA&#xff09; - 替代安装 (wazuh.com)在官方网页安装ova文件 打开VMware选择打开虚拟机&#xff0c;把下载好的ova文件放入在设置网络改为NAT模式 账号:wazuh-user 密码:wazuh ip a 查看ip 启动小皮 远程连接 账号admin …...

九五从零开始的运维之路(其三十六)

文章目录 前言一、集群概述1.负载均衡技术类型&#xff08;一&#xff09;四层负载均衡器&#xff08;二&#xff09;七层负载均衡器 2.负载均衡实现方式&#xff08;一&#xff09;硬件负载均衡产品&#xff1a;&#xff08;二&#xff09;软件负载均衡产品&#xff1a; 二、L…...

同步和异步有什么区别,使用场景?

同步(Synchronous)和异步(Asynchronous)是用于描述不同的操作和通信模式的术语。它们在处理任务、执行代码以及处理通信时有很大的异同。 同步(Synchronous) 同步操作是指程序的执行顺序按照代码的先后顺序进行,一个操作完成后才能执行下一个操作。在同步操作中,调用一…...

webassembly009 transformers.js 网页端侧推理

之前试用过两个网页端的神经网络框架&#xff0c;一个是 Tensorflow PlayGround&#xff0c;它相当与实现了一个网页端的简单的训练框架&#xff0c;有关节点的数据结构可看这篇。另一个是onnx的网页端(nodejs绿色免安装try onnx on web(chrome))&#xff0c;需要自己转换onnx模…...

Android动态添加和删除控件/布局

一、引言 最近在研究RecyclerView二级列表的使用方法&#xff0c;需要实现的效果如下。 然后查了一些博客&#xff0c;觉得实现方式太过复杂&#xff0c;而且这种方式也不是特别受推荐&#xff0c;所以请教了别人&#xff0c;得到了一种感觉还不错的实现方式。实现的思路为&…...

maven下载不了仓库地址为https的依赖jar,配置参数忽略ssl安全检查

问题原因 私服使用的https地址&#xff0c;然后安全证书过期的或没有&#xff0c;使用maven命令时&#xff0c;可以添加以下参数&#xff0c;忽略安全检查 mvn -Dmaven.wagon.http.ssl.insecuretrue -Dmaven.wagon.http.ssl.allowalltrue -Dmaven.wagon.http.ssl.ignore.vali…...

ES6从入门到精通:前言

ES6简介 ES6&#xff08;ECMAScript 2015&#xff09;是JavaScript语言的重大更新&#xff0c;引入了许多新特性&#xff0c;包括语法糖、新数据类型、模块化支持等&#xff0c;显著提升了开发效率和代码可维护性。 核心知识点概览 变量声明 let 和 const 取代 var&#xf…...

Python爬虫实战:研究feedparser库相关技术

1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

ffmpeg(四):滤镜命令

FFmpeg 的滤镜命令是用于音视频处理中的强大工具&#xff0c;可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下&#xff1a; ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜&#xff1a; ffmpeg…...

在Ubuntu中设置开机自动运行(sudo)指令的指南

在Ubuntu系统中&#xff0c;有时需要在系统启动时自动执行某些命令&#xff0c;特别是需要 sudo权限的指令。为了实现这一功能&#xff0c;可以使用多种方法&#xff0c;包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法&#xff0c;并提供…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

重启Eureka集群中的节点,对已经注册的服务有什么影响

先看答案&#xff0c;如果正确地操作&#xff0c;重启Eureka集群中的节点&#xff0c;对已经注册的服务影响非常小&#xff0c;甚至可以做到无感知。 但如果操作不当&#xff0c;可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...

Reasoning over Uncertain Text by Generative Large Language Models

https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829https://ojs.aaai.org/index.php/AAAI/article/view/34674/36829 1. 概述 文本中的不确定性在许多语境中传达,从日常对话到特定领域的文档(例如医学文档)(Heritage 2013;Landmark、Gulbrandsen 和 Svenevei…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...