【运维知识进阶篇】集群架构-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年运维经验,持续分享运维干货,感谢大家的阅读和关注!

 

目录
相关文章
|
6天前
|
供应链 Java
云HIS技术架构:Angular+Nginx+Java+Spring,SpringBoot
标准数据维护 用户信息:维护用户的基本信息,所在科室以及各个系统所具体的权限。 科室信息:维护医院的科室信息。 数据字典:标准字典信息的维护。 药品/诊疗目录维护:维护药品和诊疗目录的基本信息。
36 2
|
6天前
|
人工智能 运维 监控
构建高性能微服务架构:现代后端开发的挑战与策略构建高效自动化运维系统的关键策略
【2月更文挑战第30天】 随着企业应用的复杂性增加,传统的单体应用架构已经难以满足快速迭代和高可用性的需求。微服务架构作为解决方案,以其服务的细粒度、独立性和弹性而受到青睐。本文将深入探讨如何构建一个高性能的微服务系统,包括关键的设计原则、常用的技术栈选择以及性能优化的最佳实践。我们将分析微服务在处理分布式事务、数据一致性以及服务发现等方面的挑战,并提出相应的解决策略。通过实例分析和案例研究,我们的目标是为后端开发人员提供一套实用的指南,帮助他们构建出既能快速响应市场变化,又能保持高效率和稳定性的微服务系统。 【2月更文挑战第30天】随着信息技术的飞速发展,企业对于信息系统的稳定性和效率要求
|
1天前
|
存储 运维 关系型数据库
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
2024年最全ceph的功能组件和架构概述(2),Linux运维工程面试问题
|
1天前
|
运维 网络协议 Linux
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
2024年最全CentOS8 Consul微服务架构安装(1)_agent(1),Linux运维开发面试
|
6天前
|
应用服务中间件 nginx
nginx配置集群轮训策略
nginx配置集群轮训策略
421 0
|
6天前
|
存储 运维 负载均衡
Heartbeat+Nginx实现高可用集群
通过Heartbeat与Nginx的结合,您可以建立一个高可用性的负载均衡集群,确保在服务器故障时仍能提供无中断的服务。这种配置需要仔细的计划和测试,以确保系统在故障情况下能够正确运行。
23 2
|
6天前
|
敏捷开发 运维 监控
【专栏】微服务架构,以敏捷、灵活著称,通过拆分大型应用为小型自治服务,简化开发运维
【4月更文挑战第27天】微服务架构,以敏捷、灵活著称,通过拆分大型应用为小型自治服务,简化开发运维。本文探讨其基本概念、起源,核心优势(如敏捷开发、高可伸缩性)及挑战(系统复杂度、数据一致性),并分享实施策略(服务划分、技术选型、CI/CD)与实践案例(Netflix、Uber、Spotify),展示微服务如何重塑软件开发,并成为未来复杂应用系统的基础。
|
6天前
|
Java 应用服务中间件 nginx
阿里巴巴架构实战:SpringBoot+SpringCloud+Docker+Nginx+分布式
在过去的几年时间里,最让人兴奋、回头率最高、最能改变游戏规则的东西,大概就是Spring Boot了。Spring Boot提供了一种新的编程范式,能在最小的阻力下开发Spring应用程序。有了它, 你可以更加敏捷地开发Spring应用程序,专注于应用程序的功能,不用在Spring的配置上多花功 夫,甚至完全不用配置。
|
6天前
|
NoSQL Java 应用服务中间件
跟着腾讯T4学架构:微服务+MySQL+Nginx+Redis+容器化+虚拟机
深入理解Java虚拟机》 但要想真的深入理解虚拟机一问肯定远远不够的,但是本文中分三部分对JVM有深入的解析。
|
6天前
|
运维 负载均衡 应用服务中间件
安全运维-Nginx服务器就该这么玩~
安全运维-Nginx服务器就该这么玩~
71 0