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

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

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

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、https ngx_http_proxy_module
tastcgi ngx_http_fastcgi_module
uwcgi ngx_http_uwcgi_module
grpc ngx_http_v2_module

Nginx反向代理配置语法

1. [root@Web01 04]# vim /etc/nginx/conf.d/default.conf 
2. 
3. location / {
4.                 root /code;
5. index index.php index.html;
6.         }
7. 
8. location ~ \.php$ {
9.                 root /code;
10.                 fastcgi_pass 127.0.0.1:9000;  #将当前请求转发给后端代理,后面可以是域名+端口+uri或者是IP地址+端口+uri
11.                 fastcgi_param SCRIPT_FILENAME $document_
12. root$fastcgi_script_name;
13.                 include fastcgi_params;
14.          }
15. }

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

 

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

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

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

 

 

将10.0.0.5作为代理服务器

1、Nginx安装

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

2、配置Nginx

1. [root@LB01 ~]# vim /etc/nginx/conf.d/default.conf 
2. server {
3.         listen 80;
4.         server_name blog.koten.com;
5. 
6. location / {
7.         proxy_pass http://10.0.0.7:80;    #指定服务端IP,因为Nginx是七层,所以前面必须带http
8.         proxy_set_header Host $http_host; #指定host,携带头部信息
9.         proxy_http_version 1.1;           #指定http版本号,长连接
10.         }
11. 
12. }
13. ~                                                       
14. ~                                                       
15. <nf.d/default.conf" 12L, 105C written 
16. [root@LB01 ~]# nginx -t
17. nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
18. nginx: configuration file /etc/nginx/nginx.conf test is successful
19. [root@LB01 ~]# systemctl start nginx
20. [root@LB01 ~]# systemctl enable nginx
21. Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
22. [root@LB01 ~]#

代理信息恢复

 

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

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

1. //nginx代理与后端服务器连接超时时间(代理连接超时)
2. Syntax: proxy_connect_timeout time;
3. Default: proxy_connect_timeout 60s;
4. Context: http, server, location
5. 
6. //nginx代理等待后端服务器的响应时间
7. Syntax:    proxy_read_timeout time;
8. Default:    proxy_read_timeout 60s;
9. Context:    http, server, location
10. 
11. //后端服务器数据回传给nginx代理超时时间
12. Syntax: proxy_send_timeout time;
13. Default: proxy_send_timeout 60s;
14. Context: http, server, location

proxy_butter代理缓冲区

1. //nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端,边收边传, 不是全部接收完再传给客户端
2. Syntax: proxy_buffering on | off;
3. Default: proxy_buffering on;
4. Context: http, server, location
5. 
6. //设置nginx代理保存用户请求头信息的缓冲区大小
7. Syntax: proxy_buffer_size size;
8. Default: proxy_buffer_size 4k|8k;
9. Context: http, server, location
10. 
11. //proxy_buffers 具体数据缓冲区
12. Syntax: proxy_buffers number size;
13. Default: proxy_buffers 8 4k|8k;
14. Context: http, server, location

优化后配置文件

1. [root@LB01 ~]# vim /etc/nginx/conf.d/default.conf 
2. server {
3.         listen 80;
4.         server_name blog.koten.com;
5. 
6. location / {
7.         proxy_pass http://10.0.0.7:80;    #指定服务端地址
8.         proxy_set_header Host $http_host; #指定携带头部信息
9.         proxy_http_version 1.1;           #指定http长连接
10. 
11.         proxy_connect_timeout 30s;        #连接超时时间
12.         proxy_read_timeout 60s;           #等待响应时间
13.         proxy_send_timeout 60s;           #数据回传等待时间 
14. 
15.         proxy_buffering on;               #缓存区开启
16.         proxy_buffer_size 32k;            #缓存头部信息大小
17.         proxy_buffers 4 128k;             #缓存数据大小
18. }
19. 
20. <nf.d/default.conf" 22L, 323C written 
21.

扩展

/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 里面

1. [root@LB01 ~]# vim /etc/nginx/conf.d/default.conf 
2.         server_name blog.koten.com;
3.         location / {
4.         proxy_pass http://10.0.0.7:80;
5.         proxy_set_header Host $http_host;    #头部信息
6.         proxy_http_version 1.1;              #长连接
7.         proxy_set_header X-Forwarded-For $proxy_add_x_fo
8. rwarded_for;                                 #记录客户端IP
9. 
10.         proxy_connect_timeout 30s;           #连接超时时间
11.         proxy_read_timeout 60s;              #响应超时时间
12.         proxy_send_timeout 60s;              #数据回传超时时间
13. 
14.         proxy_buffering on;                  #开启缓冲区
15.         proxy_buffer_size 32k;               #头部信息缓冲区大小
16.         proxy_buffers 4 128k;                #数据缓冲区大小
17. <nf.d/default.conf" 25L, 388C written

发现显示了10.0.0.1的客户端IP


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

 

目录
相关文章
|
5天前
|
人工智能 云计算 网络架构
阿里云引领智算集群网络架构的新一轮变革
11月8日~10日在江苏张家港召开的CCF ChinaNet(即中国网络大会)上,众多院士、教授和业界技术领袖齐聚一堂,畅谈网络未来的发展方向,聚焦智算集群网络的创新变革。
阿里云引领智算集群网络架构的新一轮变革
|
6天前
|
负载均衡 Dubbo 算法
集群容错架构设计
集群容错架构设计
16 1
集群容错架构设计
|
4天前
|
人工智能 运维 网络架构
阿里云引领智算集群网络架构的新一轮变革
11月8日至10日,CCF ChinaNet(中国网络大会)在江苏张家港召开,众多院士、教授和技术领袖共聚一堂,探讨网络未来发展方向。阿里云研发副总裁蔡德忠发表主题演讲,展望智算技术发展趋势,提出智算网络架构变革的新思路,发布高通量以太网协议和ENode+超节点系统规划,引起广泛关注。阿里云HPN7.0引领智算以太网生态蓬勃发展,成为业界标杆。未来,X10规模的智算集群将面临新的挑战,Ethernet将成为主流方案,推动Scale up与Scale out的融合架构,提升整体系统性能。
|
2天前
|
存储 缓存 NoSQL
【赵渝强老师】Memcached集群的架构
Memcached 是一个高性能的分布式内存对象缓存系统,通过在内存中维护一个巨大的 Hash 表来存储各种格式的数据,如图像、视频、文件及数据库检索结果等。它主要用于减轻数据库压力,提高网站系统的性能。Memcached 不支持数据持久化,因此仅作为缓存技术使用。其数据分布式存储由客户端应用程序实现,而非服务端。
【赵渝强老师】Memcached集群的架构
|
2天前
|
调度 Docker 容器
【赵渝强老师】Docker Swarm集群的体系架构
Docker Swarm自1.12.0版本起集成至Docker引擎,无需单独安装。它内置服务发现功能,支持跨多服务器或宿主机创建容器,形成集群提供服务。相比之下,Docker Compose仅限于单个宿主机。Docker Swarm采用主从架构,Swarm Manager负责管理和调度集群中的容器资源,用户通过其接口发送指令,Swarm Node根据指令创建容器运行应用。
|
1月前
|
机器学习/深度学习 人工智能 运维
构建高效运维体系:从自动化到智能化的演进
本文探讨了如何通过自动化和智能化手段,提升IT运维效率与质量。首先介绍了自动化在简化操作、减少错误中的作用;然后阐述了智能化技术如AI在预测故障、优化资源中的应用;最后讨论了如何构建一个既自动化又智能的运维体系,以实现高效、稳定和安全的IT环境。
61 4
|
30天前
|
运维 Linux Apache
,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具
【10月更文挑战第7天】随着云计算和容器化技术的发展,自动化运维成为现代IT基础设施的关键部分。Puppet是一款强大的自动化运维工具,通过定义资源状态和关系,确保系统始终处于期望配置状态。本文介绍Puppet的基本概念、安装配置及使用示例,帮助读者快速掌握Puppet,实现高效自动化运维。
48 4
|
8天前
|
机器学习/深度学习 数据采集 运维
智能化运维:机器学习在故障预测和自动化响应中的应用
智能化运维:机器学习在故障预测和自动化响应中的应用
27 4
|
26天前
|
存储 运维 监控
高效运维:从基础架构到自动化管理的全面指南
【10月更文挑战第11天】 本文将深入探讨如何通过优化基础架构和引入自动化管理来提升企业IT运维效率。我们将从服务器的选择与配置、存储解决方案的评估,到网络的设计与监控,逐一解析每个环节的关键技术点。同时,重点讨论自动化工具在现代运维中的应用,包括配置管理、持续集成与部署(CI/CD)、自动化测试及故障排除等方面。通过实际案例分析,展示这些技术如何协同工作,实现高效的运维管理。无论是IT初学者还是经验丰富的专业人员,都能从中获得有价值的见解和实操经验。
55 1
|
28天前
|
运维 监控 测试技术
构建高效运维体系:从监控到自动化的实践之路
【10月更文挑战第9天】 在当今信息技术飞速发展的时代,运维作为保障系统稳定性与效率的关键角色,正面临前所未有的挑战。本文将探讨如何通过构建一个高效的运维体系来应对这些挑战,包括监控系统的搭建、自动化工具的应用以及故障应急处理机制的制定。我们将结合具体案例,分析这些措施如何帮助提升系统的可靠性和运维团队的工作效率。
42 1
下一篇
无影云桌面