nginx配置自建SSL证书

文章目录

  • 前言
  • 配置SSL证书
  • SSL证书放在 Nginx 而不放在应用服务器上的好处
  • Nginx只能转发http协议吗
  • Nginx转发TCP协议会收到端口限制吗
  • Nginx本身能将Websocket数据转化成TCP数据吗
  • 总结

前言

之前的一篇文章《自建CA并生成自签名SSL证书》中讲到为什么要自建CA和自签名SSL证书,是因为买证书得花钱,对于内部或小规模项目,使用自建SSL证书可能更为方便,不需要支付费用,而且不涉及复杂的验证过程。正式对外的服务一般都是要买公共证书颁发机构(CA)签发的SSL证书的,但是在对外发布前可以先使用自建证书打通流程

配置SSL证书

创建SSL证书的流程参考上文中提到的文章吧,本文只讲怎样把自建SSL证书配置到nginx,实际上非常简单。

假设我们的自建证书是 /root/ca/server.crt,服务器私钥是 /root/ca/server.key,nginx配置文件我以《记录一下第一次安装和配置Nginx》 这篇文章的配置文件为例,初始配置为:

upstream go_entrance {server localhost:4101;server localhost:4102;
}server {listen       4100;server_name  localhost;location / {proxy_pass http://go_entrance;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

4100端口监听http协议转发到本机的4101端口和4102端口,如果把SSL证书配置到这个端口上,就相当于这个端口支持了https,配置修改如下:

upstream go_entrance {server localhost:4101;server localhost:4102;
}server {listen 4100 ssl;server_name  localhost;ssl_certificate /root/ca/server.crt;ssl_certificate_key /root/ca/server.key;ssl_session_cache shared:SSL:10m;ssl_session_timeout 10m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers on; location / { proxy_pass http://go_entrance;proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}   
}

只需要将4100端口后面加上 ssl,再配置几个ssl相关的参数就可以了,含义如下:

  • ssl_certificate: 指定 SSL 证书文件路径 /root/ca/server.crt

  • ssl_certificate_key: 指定私钥文件路径 /root/ca/server.key

  • ssl_session_cache: 配置用于存储 SSL 会话的缓存。shared:SSL:10m 表示使用共享的内存区域,最大占用内存为 10MB

  • ssl_session_timeout: 配置 SSL 会话的超时时间,这里设置为 10 分钟

  • ssl_protocols: 指定支持的 SSL/TLS 协议版本,这里包括 TLSv1、TLSv1.1 和 TLSv1.2

  • ssl_ciphers: 指定支持的加密套件,这里配置为 HIGH:!aNULL:!MD5,表示使用高强度的加密套件,不支持空加密和 MD5

SSL证书放在 Nginx 而不放在应用服务器上的好处

正如上面的配置一样,4100端口收到https请求后转发到4101和4102上的是http协议,说明使用这种方式一些仅支持http协议的应用服务也可以通过nginx配置证书来达到支持https的目的,具体好处如下:

  • 集中管理: 使用反向代理服务器管理 SSL 证书可以实现集中式管理。这意味着你可以在一个地方管理证书,而不需要在每个应用服务器上都安装和维护证书。这样能够简化证书的更新和维护流程。

  • 简化配置: 通过在反向代理服务器上配置 SSL,你可以简化应用服务器的配置。应用服务器可以专注于处理应用程序逻辑,而无需关心 SSL 配置。这样有助于提高系统的可维护性和简化配置过程。

  • 负载均衡和扩展: 如果你使用负载均衡,SSL终止(SSL Termination)在负载均衡器上执行可以减轻应用服务器的负担。负载均衡器负责处理SSL握手,将非加密的请求转发给后端应用服务器。这样,后端服务器就可以专注于处理业务逻辑,而无需处理加密和解密操作。

  • 性能优化: SSL 握手和加解密操作可能是计算密集型的任务,将这些任务从应用服务器中移除,可以在 SSL 握手和加解密方面提高性能。

  • 统一的安全策略: 通过在反向代理服务器上管理 SSL,可以实施统一的安全策略,确保所有传入和传出的流量都经过相同的安全设置。

Nginx只能转发http协议吗

不,Nginx 不仅仅能够转发 HTTP 协议,还支持其他多种协议的代理转发。主要的协议包括:

  • HTTPS协议: 通过在配置中启用 SSL/TLS,Nginx 可以用作安全的 HTTPS 服务器和反向代理,处理加密的 HTTP 流量。

    listen 443 ssl;
    ssl_certificate /path/to/certificate.crt;
    ssl_certificate_key /path/to/private-key.key;location / {proxy_pass https://backend_server;
    }
    
  • TCP协议: 从1.9版本开始 Nginx 可以用于代理 TCP 流量,例如数据库连接、消息队列等。

    stream {server {listen 3306;proxy_pass backend_server:3306;}
    }
    
  • UDP协议: 从Nginx 1.9.13版本开始,开始支持 UDP 代理。这使得它可以用于代理 UDP 流量,如 DNS 请求等。

    stream {server {listen 53 udp;proxy_pass backend_dns_server:53;}
    }
    
  • WebSocket协议: WebSocket 是一种在单个 TCP 连接上提供全双工通信的协议,常用于实时应用程序,如在线游戏、聊天应用等。

    map $http_upgrade $connection_upgrade {default upgrade;''      close;
    }server {listen 80;server_name your_domain.com;location /websocket {proxy_pass http://backend_server;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection $connection_upgrade;}
    }
    

Nginx转发TCP协议会收到端口限制吗

是的,TCP是一种面向连接的全双工通信的协议,当转发TCP消息时,Nginx不仅是一个服务器接受客户端的连接,再它连接应用服务器时还表现成一个客户端,每个连接需要消耗一个端口,以理论值65535个端口来计算,nginx最多转发65535个连接,但是可以通过 proxy_bind 来突破限制,或者配置多个IP或虚拟IP也可以。

这种方式还没测过,感兴趣可以参考官方说明的看一下 https://nginx.org/r/proxy_bind

Nginx本身能将Websocket数据转化成TCP数据吗

只使用Nginx是做不到的,但是搭配Websockify就可以做到WSS(WebSocket Secure)到 TCP 的转发

  1. 安装 Nginx:
    确保你的系统上已经安装了 Nginx。你可以使用系统包管理器或从 Nginx 官方网站下载并安装

  2. 安装 Websockify:
    安装 Websockify,可以使用 pip 执行以下命令:

    pip install websockify
    
  3. 创建 Websockify 启动脚本:
    创建一个用于启动 Websockify 的脚本,例如 start_websockify.sh。脚本内容可能如下所示:

    #!/bin/bash
    websockify --web /path/to/webroot 1234 localhost:5678
    

    这里 1234 是用于 WebSocket 连接的端口,localhost:5678 是实际 TCP 服务的地址

  4. 配置 Nginx:
    修改 Nginx 配置文件,将 WSS 请求转发到 Websockify 启动脚本。示例配置如下:

    server {listen 443 ssl;server_name your_domain.com;ssl_certificate /root/ca/server.crt;ssl_certificate_key /root/ca/server.key;location / {proxy_pass http://localhost:1234;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection "upgrade";proxy_set_header Host $host;}
    }
    

    这里的 listen 443 表示监听 HTTPS 请求,proxy_pass http://localhost:1234 将请求代理到 Websockify 启动脚本

  5. 启动服务:
    启动 Websockify 服务:

    chmod +x start_websockify.sh
    ./start_websockify.sh
    

    启动 Nginx 服务:

    systemctl start nginx
    
  6. 测试:
    使用支持 WebSocket 的客户端连接到 WSS 地址,例如 wss://your_domain.com,并验证是否成功将 WebSocket 请求转发到 TCP 服务

总结

  • nginx配置自建SSL证书,只需要修改nginx配置文件,在端口后配置添加 ssl 并指定证书和私钥路径即可
  • nginx上配置SSL证书可以将证书统一管理,减轻应用服务器加密解密的负担,专注于业务逻辑开发
  • nginx不仅支持http协议转发,还支持https、tcp、udp、websocket等协议的转发
  • nginx转发tcp协议时会收到端口号个数限制,理论上限6万,通过proxy_bind可以突破上限
  • nginx搭配websockify可以做到WSS 到 TCP 的转发

==>> 反爬链接,请勿点击,原地爆炸,概不负责!<<==

寒风终究是刮到我这里了

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

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

相关文章

velocity-engine-core是什么?Velocity模板引擎的使用

velocity-engine-core是什么&#xff1f;Velocity模板引擎的使用 1. 常见的模板引擎2. Velocity 的语法3.Velocity的使用 相信在日常开发中或多或少都听过或者使用过模板引擎&#xff0c;比如熟知的freemarker, thymeleaf等。而模板引擎就是为了实现View和Data分离而产生的。 而…

C++封装、继承(单继承)、多态详细分析。

系列文章目录 文章目录 系列文章目录摘要一、基本概念二、多态的分类三、多态的实现3.1 类型兼容与函数重写3.2 动态联编与静态联编3.3 虚函数3.4 动态多态的实现过程 总结参考文献 摘要 多态性特征是 C中最为重要的一个特征&#xff0c;熟练使用多态是学好 C的关键&#xff0…

Kotlin关键字二——constructor和init

在关键字一——var和val中最后提到了构造函数&#xff0c;这里就学习下构造函数相关的关键字: constructor和init。 主要构造(primary constructor) kotlin和java一样&#xff0c;在定义类时就自动生成了无参构造 // 会生成默认的无参构造函数 class Person{ }与java不同的是…

configure脚本的常用参数

下面是一些常用的configure选项参数及其解释&#xff1a; --prefix<directory>&#xff1a;指定安装目录--with-<package>&#xff1a;指定依赖的外部库或软件包--enable-<feature>&#xff1a;启用某个特性--disable-<feature>&#xff1a;禁用某个特…

原创 | 数据的确权、流通、入表与监管研究(一):数据与确权

作者&#xff1a;张建军&#xff0c;中国电科首席专家&#xff0c;神州网信技术总监 本文约7100字&#xff0c;建议阅读10分钟 本文主要介绍数据与数据分类、数据确权规则、数据的所有权与其他权利等方面内容&#xff0c;并进行案例分析。 2022年12月发布的《关于构建数据基础制…

Linux 和 macOS 的主要区别在哪几个方面呢?

(꒪ꇴ꒪ )&#xff0c;Hello我是祐言QAQ我的博客主页&#xff1a;C/C语言&#xff0c;数据结构&#xff0c;Linux基础&#xff0c;ARM开发板&#xff0c;网络编程等领域UP&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff0c;让我们成为一个强大的攻城狮&#xff0…

uniapp实战 —— 弹出层 uni-popup (含vue3子组件调父组件的方法)

效果预览 弹出的内容 src\pages\goods\components\ServicePanel.vue <script setup lang"ts"> // 子组件调父组件的方法 const emit defineEmits<{(event: close): void }>() </script><template><view class"service-panel"…

ALSA Compress-Offload API

概述 从 ALSA API 的早期开始&#xff0c;它就被定义为支持 PCM&#xff0c;或考虑到了 IEC61937 等固定比特率的载荷。参数和返回值以帧计算是常态&#xff0c;这使得扩展已有的 API 以支持压缩数据流充满挑战。 最近这些年&#xff0c;音频数字信号处理器 (DSP) 常常被集成…

git如何配置多个远程仓库,并且进行切换

一、配置多个远程仓库并进行切换&#xff0c;请按照以下步骤进行操作&#xff1a; 打开命令行终端&#xff0c;并进入您的 Git 仓库所在的目录。添加第一个远程仓库&#xff0c;使用以下命令&#xff1a;git remote add origin <第一个远程仓库的 URL>这里将远程仓库命名…

C# .NET平台提取PDF表格数据,并转换为txt、CSV和Excel表格文件

处理PDF文件中的内容是比较麻烦的事情&#xff0c;特别是以表格形式呈现的各种数据。为了充分利用这些宝贵的数据资源&#xff0c;我们可以通过程序提取PDF文件中的表格&#xff0c;并将其保存为更易于处理和分析的格式&#xff0c;如txt、csv、xlsx&#xff0c;从而更方便地对…

leetcode面试经典150题——35 螺旋矩阵

题目&#xff1a; 螺旋矩阵 描述&#xff1a; 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素。 示例&#xff1a; 输入&#xff1a;matrix [[1,2,3],[4,5,6],[7,8,9]] 输出&#xff1a;[1,2,3,6,9,8,7,4,5] 提示&…

Redis Geo操作地理位置

Redis Geo 使用场景API列表名词API列表Springboot使用mavenyamlTest 注意事项 Redis Geo 是Redis在3.2版本中新增的功能&#xff0c;用于存储和操作地理位置信息 使用场景 滴滴打车&#xff1a;这是一个对地理位置精度要求较高的场景。通过使用Redis的GEO功能&#xff0c;滴滴…

12月8日作业

使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数&#xff1b;将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断u界面上输入的账号是否为"admin"&#xff0c;…

kafka学习笔记--安装部署、简单操作

本文内容来自尚硅谷B站公开教学视频&#xff0c;仅做个人总结、学习、复习使用&#xff0c;任何对此文章的引用&#xff0c;应当说明源出处为尚硅谷&#xff0c;不得用于商业用途。 如有侵权、联系速删 视频教程链接&#xff1a;【尚硅谷】Kafka3.x教程&#xff08;从入门到调优…

Day54力扣打卡

打卡记录 出租车的最大盈利&#xff08;动态规划&#xff09; 链接 class Solution:def maxTaxiEarnings(self, n: int, rides: List[List[int]]) -> int:d defaultdict(list)for start, end, w in rides:d[end].append((start, end - start w))f [0] * (n 1)for i in…

文章解读与仿真程序复现思路——电力自动化设备EI\CSCD\北大核心《考虑源网荷效益的峰谷电价与峰谷时段双层优化模型》

这个标题涉及到电力定价和能源效益的优化模型。让我来分解一下&#xff1a; 峰谷电价&#xff1a;这是一种电力定价策略&#xff0c;即在一天内不同时间段设定不同的电价。通常&#xff0c;高峰时段&#xff08;需求高&#xff09;的电价相对较高&#xff0c;而低谷时段&#x…

人工智能学习9(LightGBM)

编译工具&#xff1a;PyCharm 文章目录 编译工具&#xff1a;PyCharm lightGBM原理lightGBM的基础使用案例1&#xff1a;鸢尾花案例2&#xff1a;绝对求生玩家排名预测一、数据处理部分1.数据获取及分析2.缺失数据处理3.数据规范化4.规范化输出部分数据5.异常数据处理5.1删除开…

利用私域运营的四大策略实现企业营销目标

私域运营指的是企业利用各种网络技术和工具&#xff0c;以自己的平台为基础&#xff0c;建立、维护、更新和升级与用户的私人关系。这种运营模式让企业能更准确地了解客户需求和喜好&#xff0c;通过定制化服务、优惠政策、个性化体验等方式&#xff0c;获取更多的客户价值。相…

Child Mind Institute - Detect Sleep States(2023年第一次Kaggle拿到了银牌总结)

感谢 感谢艾兄&#xff08;大佬带队&#xff09;、rich师弟&#xff08;师弟通过这次比赛机械转码成功、耐心学习&#xff09;、张同学&#xff08;也很有耐心的在学习&#xff09;&#xff0c;感谢开源方案&#xff08;开源就是银牌&#xff09;&#xff0c;在此基础上一个月…

基于Lucene的全文检索系统的实现与应用

文章目录 一、概念二、引入案例1、数据库搜索2、数据分类3、非结构化数据查询方法1&#xff09; 顺序扫描法(Serial Scanning)2&#xff09;全文检索(Full-text Search) 4、如何实现全文检索 三、Lucene实现全文检索的流程1、索引和搜索流程图2、创建索引1&#xff09;获取原始…