【Nginx】反向代理Https时相关参数:

    在Nginx代理后台HTTPS服务时,有几个关键的参数需要配置,以确保代理服务器能够正确地与后端服务器进行通信。一些重要参数的介绍:

  1. proxy_ssl_server_name:这个参数用于指定是否在TLS握手时通过SNI(Server Name Indication)传递主机名给后端服务器。默认情况下,这个参数是关闭的(off),开启的话是:on。这意味着如果后端服务器使用SNI来选择证书,而没有接收到正确的主机名,可能会导致SSL握手失败,也可以后台服务返回一个默认的证书。启用这个参数可以确保后端服务器收到正确的主机名,从而使用正确的证书进行SSL握手。

  2. proxy_ssl_name:配置第一个参数开启时传递的主机名称。

  3. proxy_ssl_certificate:指定客户端证书的文件路径,用于向后端服务器验证Nginx的身份。这对于双向SSL认证是必要的。

  4. proxy_ssl_certificate_key:指定客户端证书的私钥文件路径,与proxy_ssl_certificate一起使用。

  5. proxy_ssl_trusted_certificate指定受信任的CA证书文件路径,用于验证后端服务器的证书。这对于自签名证书或内部CA颁发的证书是必要的。

  6. proxy_ssl_verify:启用或禁用对后端服务器证书的验证。默认情况下,这个参数是关闭的(off),这意味着Nginx不会验证后端服务器返回的证书。启用这个参数可以提高安全性,但可能需要额外的配置,如指定受信任的CA证书。

  7. proxy_ssl_verify_depth:指定验证后端服务器证书时的最大深度。这个参数通常与proxy_ssl_verify一起使用。默认值是: 1

  8. proxy_ssl_protocols:指定允许的SSL/TLS协议版本。例如,可以设置为TLSv1 TLSv1.1 TLSv1.2,以限制只使用这些版本的协议。

  9. proxy_ssl_ciphers:指定允许的加密套件。例如,可以设置为HIGH:!aNULL:!MD5,以限制只使用高强度且不包括某些已知弱点的加密套件。

  10. proxy_ssl_session_reuse:启用或禁用SSL会话复用。启用这个参数可以减少建立SSL连接时的开销,提高性能。

Nginx作用反向代理与上游服务器使用HTTPS建连时,

  1. 默认不启用SNI,使用proxy_ssl_server_name on;参数启用;
  2. 默认不验证上游服务器返回的证书,开启的话使用proxy_ssl_verify on;
  3. 开启上游证书验证后Nginx会使用配置文件中指定的CA验证上游服务器返回证书的合法性,同时也会比对证书中的CommonName信息。

 实例1配置

server {
listen 80;
server_name www.dianduidian.com;
location / {proxy_pass https://blog.dianduidian.com;proxy_ssl_verify on;  //开启nginx验证后台的证书合法性proxy_ssl_trusted_certificate /etc/nginx/conf.d/cacert.pem;  //配置信任的根证书,用于验证后台的证书是否合法proxy_ssl_server_name on;  ///开启了在进行tls通信链接握手时传hostname给后台,proxy_ssl_name www.baidu.com;  //这个就是配置的传递的主机名}
}

实例2配置

   场景是: 由外部nginx代理--->k8s集群的ingress---->代理内部的service: dashboard。都是用了https。 因为ingress代理service: dashboard是根据hostname来分流的。但是现在有个问题是:前端nginx代理是通过ip访问的,那么怎么设置nginx代理ingress时带上对应的域名呢?

      proxy_set_header    Host               $http_host; 一开始时这样设置了,一直访问不了,这个配置proxy_set_header    Host  确实是设置nginx访问后台时设置的Http请求的头部字段Host的,但是$http_host获取的值是当前请求的值,也就是https://47.xx.xx.22:446/  这个请求的,这里就没有域名,所以nginx在访问后台ingress时,就没法设别域名,也就不能把请求转发到service: dashboard。后面我直接设置  proxy_set_header    Host    k8sdashboard.jtkjk8s.com;这样就可以了,这样就保证了nginx请求ingress把域名带过去了。从这里也可以得出一个结论: proxy_pass https://k8sdashboard.jtkjk8s.com:30443;   这个配置并不会让nginx把这个域名设置到http的头部字段Host字段上。

     server {listen 446 ssl;server_name 47.xx.xx.22;ssl_certificate      /root/pki/ca.crt;ssl_certificate_key  /root/pki/private.key;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;location / {client_max_body_size 0;proxy_read_timeout      300;proxy_connect_timeout   300;proxy_redirect          off;proxy_http_version 1.1;proxy_set_header    Host                k8sdashboard.jtkjk8s.com;proxy_set_header    X-Real-IP           $remote_addr;proxy_set_header    X-Forwarded-For     $proxy_add_x_forwarded_for;proxy_set_header    X-Forwarded-Proto   $scheme;proxy_ssl_name   k8sdashboard.jtkjk8s.com;proxy_ssl_server_name  on;proxy_ssl_verify off;proxy_pass https://k8sdashboard.jtkjk8s.com:30443;}}

  这个是k8s 的ingress 分流到内部的一个k8sdashboard服务上的配置。

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: jtktk8s-ingressnamespace: jtkjdevannotations:nginx.ingress.kubernetes.io/secure-backends: "true"  #指定用https访问后台 nginx.ingress.kubernetes.io/backend-protocol: "HTTPS"  #指定用https访问后台,这两个参数一起设置nginx.ingress.kubernetes.io/proxy-ssl-verify: "false"  #不验证服务端的证书合法性,因为我用的是自签名的
spec:ingressClassName: nginxrules:- host: k8sdashboard.jtkjk8s.comhttp:paths:- path: /pathType: Prefixbackend:service:name: k8sdashboardport:number: 443

其他大牛的一些文章:Nginx反向代理,当后端为Https时的一些细节和原理-CSDN博客

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

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

相关文章

PH热榜 | 2024-11-19

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. Layer 标语:受大脑启发的规划器 介绍:体验一下这款新一代的任务和项目管理系统吧!它…

React Native 基础

React 的核心概念 定义函数式组件 import组件 要定义一个Cat组件,第一步要使用 import 语句来引入React以及React Native的 Text 组件: import React from react; import { Text } from react-native; 定义函数作为组件 const CatApp = () => {}; 渲染Text组件

一文详细了解websocket应用以及连接断开的解决方案

文章目录 websocketvite 热启动探索websocket -心跳websocket 事件监听应用过程中问题总结 websocket Websocket简介 定义和工作原理 Websocket是一种在单个TCP连接上进行全双工通信的协议。与传统的HTTP请求 - 响应模式不同,它允许服务器主动向客户端推送数据。例…

Vue 3与TypeScript集成指南:构建类型安全的前端应用

在Vue 3中使用TypeScript,可以让你的组件更加健壮和易于维护。以下是使用TypeScript与Vue 3结合的详细步骤和知识点: 1. 环境搭建 首先,确保你安装了Node.js(推荐使用最新的LTS版本)和npm或Yarn。然后,安…

React-useRef与DOM操作

#题引:我认为跟着官方文档学习不会走歪路 ref使用 组件重新渲染时,react组件函数里的代码会重新执行,返回新的JSX,当你希望组件“记住”某些信息,但又不想让这些信息触发新的渲染时,你可以使用ref&#x…

# Spring事务

Spring事务 什么是spring的事务? 在Spring框架中,事务管理是一种控制数据库操作执行边界的技术,确保一系列操作要么全部成功,要么全部失败,从而维护数据的一致性和完整性。Spring的事务管理主要关注以下几点&#xf…

Jenkins更换主题颜色+登录页面LOGO图片

默认主题和logo图片展示 默认主题黑色和白色。 默认LOGO图片 安装插件 Login ThemeMaterial Theme 系统管理–>插件管理–>Available plugins 搜不到Login Theme是因为我提前装好了 没有外网的可以参考这篇离线安装插件 验证插件并修改主题颜色 系统管理–>A…

LLM文档对话 —— pdf解析关键问题

一、为什么需要进行pdf解析? 最近在探索ChatPDF和ChatDoc等方案的思路,也就是用LLM实现文档助手。在此记录一些难题和解决方案,首先讲解主要思想,其次以问题回答的形式展开。 二、为什么需要对pdf进行解析? 当利用L…

【虚幻引擎】UE5数字人开发实战教程

本套课程将会交大家如何去开发属于自己的数字人,包含大模型接入,流式输出,语音识别,语音合成,口型驱动,动画蓝图,语音唤醒等功能。 课程介绍视频如下: 【虚幻引擎】UE5 历时一个多月…

上位机编程命名规范

1.大小写规范 文件名全部小写是一种广泛使用的命名约定,特别是在跨平台开发和开源项目中。主要原因涉及技术约束、可读性和一致性等方面。以下是原因和优劣势的详细分析: 1. 避免跨平台问题 不同操作系统对文件名的大小写处理方式不同: Li…

JAVA:探索 PDF 文字提取的技术指南

1、简述 随着信息化的发展,PDF 文档成为了信息传播的重要媒介。在许多应用场景下,如数据迁移、内容分析和信息检索,我们需要从 PDF 文件中提取文字内容。JAVA提供了多种库来处理 PDF 文件,其中 PDFBox 和 iText 是最常用的两个。…

form表单的使用

模板 <template><el-form :model"formData" ref"form1Ref" :rules"rules"><el-form-item label"手机号" prop"tel"><el-input v-model"formData.tel" /></el-form-item><el-f…

【priority_queue的使用及模拟实现】—— 我与C++的不解之缘(十六)

前言 ​ priority_queue&#xff0c;翻译过来就是优先级队列&#xff0c;但是它其实是我们的堆结构&#xff08;如果堆一些遗忘的可以看一下前面的文章复习一下【数据结构】二叉树——顺序结构——堆及其实现_二叉树顺序结构-CSDN博客&#xff09;&#xff0c;本篇文章就来使用…

php 与 thinkphp 13 张 表 关联 查询,a.pry_key=b.pry_key and c.pry_key= b.pry_key 代码示例

在 PHP 中&#xff0c;假设你有 13 张表并且这些表之间通过 pry_key 关联&#xff0c;你可以使用 SQL 的 JOIN 来将这些表连接在一起&#xff0c;然后通过 PHP 执行该查询。以下是一个简化的示例&#xff0c;展示如何通过 JOIN 语句将 13 张表联接&#xff0c;并使用 PHP 代码执…

MacOS下的Opencv3.4.16的编译

前言 MacOS下编译opencv还是有点麻烦的。 1、Opencv3.4.16的下载 注意&#xff0c;我们使用的是Mac&#xff0c;所以ios pack并不能使用。 如何嫌官网上下载比较慢的话&#xff0c;可以考虑在csdn网站上下载&#xff0c;应该也是可以找到的。 2、cmake的下载 官网的链接&…

Kibana 本地安装使用

一 Kibana简介 1.1 Kibana 是一种数据可视化工具&#xff0c;通常需要结合Elasticsearch使用&#xff1a; Elasticsearch 是一个实时分布式搜索和分析引擎。 Logstash 为用户提供数据采集、转换、优化和输出的能力。 Kibana 是一种数据可视化工具&#xff0c;为 Elasticsear…

#Js篇:JSON.stringify 和 JSON.parse用法和传参

JSON.stringify 和 JSON.parse 1. JSON.stringify JSON.stringify 方法将一个 JavaScript 对象或数组转换为 JSON 字符串。 基本用法 const obj { name: "Alice", age: 25 }; const jsonString JSON.stringify(obj); console.log(jsonString); // 输出: {"…

基于大数据爬虫数据挖掘技术+Python的网络用户购物行为分析与可视化平台(源码+论文+PPT+部署文档教程等)

#1024程序员节&#xff5c;征文# 博主介绍&#xff1a;CSDN毕设辅导第一人、全网粉丝50W,csdn特邀作者、博客专家、腾讯云社区合作讲师、CSDN新星计划导师、Java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老…

【Android、IOS、Flutter、鸿蒙、ReactNative 】实现 MVP 架构

Android Studio 版本 Android Java MVP 模式 参考 模型层 model public class User {private String email;private String password;public User(String email, String password) {this.email = email;this.password = password;}public String getEmail() {return email;}…

android 使用MediaPlayer实现音乐播放--获取音乐数据

前面已经添加了权限&#xff0c;有权限后可以去数据库读取音乐文件&#xff0c;一般可以获取全部音乐、专辑、歌手、流派等。 1. 获取全部音乐数据 class MusicHelper {companion object {SuppressLint("Range")fun getMusic(context: Context): MutableList<Mu…