【运维知识进阶篇】集群架构-Nginx反向代理详解

news2024/11/25 20:34:05

在互联网请求中,客户端通常无法直接向服务端发起请求,就需要用代理服务,来实现客户端和的交互,起到一个中介的作用。

Nginx代理服务常见模式

Nginx代理按照应用场景模式可以分为正向代理和反向代理。

正向代理是内部上网过程中,客户端经过代理访问服务端。

反向代理是公司集群架构中,客户端通过代理反向返回数据给服务端。反向代理是负载均衡的前身,本篇文章详细给大家介绍Nginx反向代理。

Nginx作为支持的代理协议

超文本传输协议

http/https协议

tcp/dup协议
http1.1长连接通讯协议
go语言远程调用、python语言远程调用
右键收发协议
流媒体、直播、点播

Nginx常用代理协议

http_proxy(Http Server底层和Socket底层)、fastcgi(Nginx转发给PHP,也可以理解成PHP是nginx代理)、uwcgi(python Server)

Nginx反向代理的模式支持的模块

反向代理模式Nginx配置模块
http、websocket、httpsngx_http_proxy_module
tastcgingx_http_fastcgi_module
uwcgingx_http_uwcgi_module
grpcngx_http_v2_module

Nginx反向代理配置语法

[root@Web01 04]# vim /etc/nginx/conf.d/default.conf 

        location / {
                root /code;
                index index.php index.html;
        }

        location ~ \.php$ {
                root /code;
                fastcgi_pass 127.0.0.1:9000;  #将当前请求转发给后端代理,后面可以是域名+端口+uri或者是IP地址+端口+uri
                fastcgi_param SCRIPT_FILENAME $document_
root$fastcgi_script_name;
                include fastcgi_params;
         }
}

用户随机一个端口和代理80建立连接,80又随机了端口又像服务端的80端口重新建立连接,这就出现了端口限制问题,形成了一个瓶颈,80随机的端口最大是65535。

代理会代理用户请求重新向后端发起连接请求

1、代理默认会丢弃头部信息,我们需要把参数添加上

 

2、代理默认和后端建立连接方式是短链接HTTP1.0

将10.0.0.5作为代理服务器

1、Nginx安装

[root@LB01 ~]# scp 10.0.0.7:/etc/yum.repos.d/nginx.repo /etc/yum.repos.d/    #配置yum源
The authenticity of host '10.0.0.7 (10.0.0.7)' can't be established.
ECDSA key fingerprint is SHA256:zQvI/tCFYssR7l6cr90EtaIA93FXJp8FmUhGtkZshlA.
ECDSA key fingerprint is MD5:0b:a1:ee:d2:75:92:1a:62:05:63:5e:d1:e8:42:13:84.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.7' (ECDSA) to the list of known hosts.
root@10.0.0.7's password: 
nginx.repo            100%  192   110.6KB/s   00:00    
[root@LB01 ~]# yum -y install nginx    #安装配置

2、配置Nginx

[root@LB01 ~]# vim /etc/nginx/conf.d/default.conf 
server {
        listen 80;
        server_name blog.koten.com;

        location / {
        proxy_pass http://10.0.0.7:80;    #指定服务端IP,因为Nginx是七层,所以前面必须带http
        proxy_set_header Host $http_host; #指定host,携带头部信息
        proxy_http_version 1.1;           #指定http版本号,长连接
        }

}
~                                                       
~                                                       
<nf.d/default.conf" 12L, 105C written 
[root@LB01 ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@LB01 ~]# systemctl start nginx
[root@LB01 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@LB01 ~]# 

代理信息恢复 

代理服务器优化配置(提升客户访问速度)

代理到后端的TCP连接、响应、返回等超时时间

//nginx代理与后端服务器连接超时时间(代理连接超时)
Syntax: proxy_connect_timeout time;
Default: proxy_connect_timeout 60s;
Context: http, server, location

//nginx代理等待后端服务器的响应时间
Syntax:    proxy_read_timeout time;
Default:    proxy_read_timeout 60s;
Context:    http, server, location

//后端服务器数据回传给nginx代理超时时间
Syntax: proxy_send_timeout time;
Default: proxy_send_timeout 60s;
Context: http, server, location

proxy_butter代理缓冲区 

//nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
Syntax: proxy_buffering on | off;
Default: proxy_buffering on;
Context: http, server, location

//设置nginx代理保存用户请求头信息的缓冲区大小
Syntax: proxy_buffer_size size;
Default: proxy_buffer_size 4k|8k;
Context: http, server, location

//proxy_buffers 具体数据缓冲区
Syntax: proxy_buffers number size;
Default: proxy_buffers 8 4k|8k;
Context: http, server, location

 优化后配置文件

[root@LB01 ~]# vim /etc/nginx/conf.d/default.conf 
server {
        listen 80;
        server_name blog.koten.com;

        location / {
        proxy_pass http://10.0.0.7:80;    #指定服务端地址
        proxy_set_header Host $http_host; #指定携带头部信息
        proxy_http_version 1.1;           #指定http长连接
        
        proxy_connect_timeout 30s;        #连接超时时间
        proxy_read_timeout 60s;           #等待响应时间
        proxy_send_timeout 60s;           #数据回传等待时间 
        
        proxy_buffering on;               #缓存区开启
        proxy_buffer_size 32k;            #缓存头部信息大小
        proxy_buffers 4 128k;             #缓存数据大小
}

<nf.d/default.conf" 22L, 323C written 

扩展

/etc/nginx/nginx.conf中的$http_x_forwarded_for记录真实客户端的IP地址

客户端通过10.0.0.5的代理IP访问10.0.0.7,10.0.0.7会记录10.0.0.5的代理IP,我们想记录客户端真实IP,就需要$http_x_forwarded_for,将这个参数在代理中携带上即可

不加时,服务端10.0.0.7末尾是10.0.0.5

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

 添加到 /etc/nginx/conf.d/default.conf 里面

[root@LB01 ~]# vim /etc/nginx/conf.d/default.conf 
        server_name blog.koten.com;
        location / {
        proxy_pass http://10.0.0.7:80;
        proxy_set_header Host $http_host;    #头部信息
        proxy_http_version 1.1;              #长连接
        proxy_set_header X-Forwarded-For $proxy_add_x_fo
rwarded_for;                                 #记录客户端IP

        proxy_connect_timeout 30s;           #连接超时时间
        proxy_read_timeout 60s;              #响应超时时间
        proxy_send_timeout 60s;              #数据回传超时时间
        
        proxy_buffering on;                  #开启缓冲区
        proxy_buffer_size 32k;               #头部信息缓冲区大小
        proxy_buffers 4 128k;                #数据缓冲区大小
<nf.d/default.conf" 25L, 388C written 

 发现显示了10.0.0.1的客户端IP


我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

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

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

相关文章

将矩阵按指定对角线转化为一个下三角矩阵numpy.tril()方法

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 将矩阵按指定对角线转化为一个下三角矩阵 numpy.tril() 选择题 关于以下代码说法错误的一项是? import numpy as np a np.array([[1,2],[3,4]]) print("【显示】a\n",a) print(&…

Nevron Open Vision for .NET 2023.1 Crack

Nevron Open Vision for .NET 2023.1 添加对 .NET Core 7.0 的支持以及用于图表控件的新 3D 渲染引擎。 2023 年 5 月 17 日 - 14:09 新版本 特征 一般改进 添加了对 Microsoft .NET 7.0 的支持- NOV 现在完全支持 .NET Core 7.0&#xff0c;此外还支持 Microsoft .NET Framewo…

chatgpt赋能Python-pycharm降低numpy版本

Pycharm中降低Numpy版本的步骤 如果你在使用Pycharm进行Python编程时遇到了Numpy版本不兼容的问题&#xff0c;你可能需要降低Numpy的版本。在这篇文章中&#xff0c;我们将介绍如何在Pycharm中降低Numpy版本&#xff0c;以便Python程序能够正常运行。 什么是Numpy&#xff1…

测试入门篇

软件测试入门 1.啥是软件测试&#xff1f;2.测试和开发的区别3.测试和调试的区别4.软件测试人员需具备的素质5.测试入门5.1 需求介绍/从测试人员的角度看需求5.2 测试用例5.3 bug介绍5.4 软件的生命周期 6.开发模型6.1 瀑布模型6.2 螺旋模型6.3 增量、迭代模型6.4 敏捷模型(scr…

【贪吃蛇小游戏】宝塔面板快速搭建贪吃蛇小游戏Web网站 - 无需云服务器

文章目录 前言视频教程1. 环境安装2. 安装cpolar内网穿透3. 内网穿透4. 固定http地址5. 配置二级子域名6. 创建一个测试页面 转载自远程内网穿透的文章&#xff1a;Linux使用宝塔面板搭建网站&#xff0c;并内网穿透实现公网访问 前言 宝塔面板作为简单好用的服务器运维管理面…

【深度学习】Yolov8追踪从0到1, 这要是做计数啥的,简单的一批

文章目录 前言用了将近2年的yolov5了&#xff0c;之前主要做目标检测后面&#xff0c;还做了yolov5的分割任务和模型转换&#xff0c;现在又有了新任务了。是时间玩玩新模型了。 最好的方式是看文档&#xff1a;https://docs.ultralytics.com/ ![在这里插入图片描述](https://i…

Jmeter的提取值存入csv或excel中,BeanShell PostProcessor后置处理器可满足

实际用户场景&#xff1a;用户登录小游戏&#xff0c;可进行各种操作&#xff0c;例如查看排行榜&#xff0c;玩游戏&#xff0c;进行留言等&#xff0c;现在需要对三个接口查看排行榜/玩游戏/留言进行压测&#xff0c;有两种压测方案&#xff1a; 方案一&#xff1a;将登录接…

JAVA算法(二)排序算法

一、冒泡排序 定义&#xff1a;相邻的数据两两比较&#xff0c;小的 放前面&#xff0c;大的放后面 过程&#xff1a; 相邻的元素两两比较&#xff0c;小的放左边&#xff0c;大的放右边。第一轮比较完毕之后&#xff0c;最大值就已经确定&#xff0c;第二轮可以少循环一次&…

第二章MATLAB基础

在本章我将向大家介绍MATLAB的基本元素。在本章的章末,你将会编写简单的函数 化的工具。 2.1 变量和数组 MATLAB程序的基本数据单元是数组。一个数组是以行和列组织起来的数据集合,并 且拥有一个数组名。数组中的单个数据是可以被访问的,访问的方法是数组名后带一个括号,…

C/C++每日一练(20230518) 表列序号、移除元素、接雨水

目录 1. Excel表列序号 &#x1f31f; 2. 移除元素 &#x1f31f; 3. 接雨水 &#x1f31f;&#x1f31f;&#x1f31f; &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. Excel表列序…

2023年美国大学生数学建模竞赛A题受干旱影响的植物群落解题全过程文档及程序

2023年美国大学生数学建模竞赛 A题 受干旱影响的植物群落 原题再现&#xff1a; 背景介绍   不同种类的植物以不同的方式对压力作出反应例如&#xff0c;草场对干旱相当敏感&#xff0c;干旱发生的频率和严重程度各不相同。   许多观察表明不同物种的数量对植物群落在连续…

快速开通ChatGPT Plugin

根据上周OpenAI官方给出的消息&#xff0c;本周ChatGPT Plus用户将全量开放Plugin插件权限。 如果你已经可以访问Plugin Store 可以查看这篇文章获取ChatGPT Plugin的使用和功能介绍 AI“应用商店”来了&#xff01;OpenAI首批70个ChatGPT Plugin最全梳理_evil-tomato的博客-…

Kali-linux免杀Payload生成工具Veil

Veil是一款利用Metasploit框架生成相兼容的Payload工具&#xff0c;并且在大多数网络环境中能绕过常见的杀毒软件。本节将介绍Veil工具的安装及使用。 在Kali Linux中&#xff0c;默认没有安装Veil工具。这里首先安装Veil工具&#xff0c;执行如下所示的命令&#xff1a; roo…

[网络安全]DVWA之XSS(DOM)攻击姿势及解题详析合集

[网络安全]DVWA之XSS&#xff08;DOM&#xff09;攻击姿势及解题详析合集 XSS(DOM)-low levelXSS(DOM)-medium level源代码姿势script与option标签 XSS(DOM)-high level源代码姿势 XSS(DOM)-Impossible level页面源代码代码审计 总结 免责声明&#xff1a;本文仅分享XSS攻击相关…

有标签的各种图片大小的宫格拼图

当自己的数据集是从大图中切割下来的小图&#xff08;根据检测框外括一小部分比例的抠图&#xff0c;后续更新此方法&#xff09;&#xff0c;此时数据集一定是大小不一的图片&#xff0c;若每张都直接输入进行训练那么太小的图片会失真严重&#xff0c;本篇对此提出了解决方法…

阻塞赋值和非阻塞赋值

FPGA这一块和C语言不太一样。 学习FPGA&#xff0c;必须时刻有时钟的概念&#xff0c;而单片机时钟相关性就比较差&#xff0c;FPGA必须把握每一个时钟。 首先介绍一下&#xff0c;非阻塞赋值&#xff0c;这个在时序逻辑里面经常遇见。 reg A&#xff1b; reg B&#xff1b;…

Python绘制柱状图并美化

python绘图合集 往期绘图合集 python绘制简单的折线图 python读取excel中数据并绘制多子图多组图在一张画布上 python绘制带误差棒的柱状图 python绘制多子图并单独显示 python读取excel数据并绘制多y轴图像 本期讲一下python绘制柱状图并使用不同颜色给柱子上色&#xff0c;设…

python@切片slice对象@sequence@range@arange

文章目录 python文档查阅tipsrangenumpy arangenumpy arangepython range&#x1f388; collections容器的抽象基类eg sequence&#x1f388;python序列类型slice切片slice()内置方法itertools.slice()方法 python切片slicesequencerangearange python文档查阅tips preface:想…

【软件测试】软件测试为什么会用到Linux?

作为软件测试工程师&#xff0c;我们首先要知道linux是啥&#xff1f;Linux是操作系统&#xff0c;我们常用的操作系统有Windows和linux&#xff0c;他们的区别是&#xff1a; 一、免费与收费 在中国&#xff0c;windows和linux都是免费的&#xff0c;至少对个人用户是如此&…

iTOP-RK3568开发板Uboot参数-内核启动参数cmdline

目前 cmdline 参数有多个来源,由 U-Boot 进行拼接、过滤重复数据之后再 传给 kernel。U-Boot 阶段的 cmdline 被保存在 bootargs 环境变量中。U-Boot 最 终是通过修改的 kernel DTB 里的 /chosen/bootargs 实现 cmdline 传递。 cmdline 是 uboot 引导内核启动时传递给内核的…