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

 

目录
相关文章
|
2月前
|
机器学习/深度学习 人工智能 运维
云架构不是养祖宗,智能运维教你省心又省钱
云架构不是养祖宗,智能运维教你省心又省钱
98 2
|
2月前
|
数据采集 运维 数据可视化
AR 运维系统与 MES、EMA、IoT 系统的融合架构与实践
AR运维系统融合IoT、EMA、MES数据,构建“感知-分析-决策-执行”闭环。通过AR终端实现设备数据可视化,实时呈现温度、工单等信息,提升运维效率与生产可靠性。(238字)
|
1月前
|
运维 Prometheus 监控
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
别再“亡羊补牢”了!——聊聊如何优化企业的IT运维监控架构
103 8
|
4月前
|
运维 监控 Cloud Native
从“守机器”到“写策略”——云原生架构把运维逼成了架构师
从“守机器”到“写策略”——云原生架构把运维逼成了架构师
104 1
|
3月前
|
运维 监控 安全
“没服务器了,那我这运维是白干了吗?”——无服务器架构对运维的冲击与转机
“没服务器了,那我这运维是白干了吗?”——无服务器架构对运维的冲击与转机
112 0
|
8月前
|
运维 供应链 前端开发
中小医院云HIS系统源码,系统融合HIS与EMR功能,采用B/S架构与SaaS模式,快速交付并简化运维
这是一套专为中小医院和乡镇卫生院设计的云HIS系统源码,基于云端部署,采用B/S架构与SaaS模式,快速交付并简化运维。系统融合HIS与EMR功能,涵盖门诊挂号、预约管理、一体化电子病历、医生护士工作站、收费财务、药品进销存及统计分析等模块。技术栈包括前端Angular+Nginx,后端Java+Spring系列框架,数据库使用MySQL+MyCat。该系统实现患者管理、医嘱处理、费用结算、药品管控等核心业务全流程数字化,助力医疗机构提升效率和服务质量。
483 4
|
10月前
|
弹性计算 运维 网络协议
卓越效能,极简运维,Serverless高可用架构
本文介绍了Serverless高可用架构方案,当企业面对日益增长的用户访问量和复杂的业务需求时如何实现更高的灵活性、更低的成本和更强的稳定性。
|
11月前
|
弹性计算 运维 Serverless
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
卓越效能,极简运维,体验Serverless高可用架构,完成任务可领取转轮日历!
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
运维 Devops 应用服务中间件
自动化运维的利剑:Ansible在现代IT架构中的应用
【10月更文挑战第42天】本文旨在揭示自动化运维工具Ansible如何革新现代IT架构,通过简化配置管理和部署流程,提升效率和可靠性。我们将探索Ansible的核心功能、语言特性以及其在DevOps文化中的角色。文章还将展示如何借助Ansible构建模块化和可重用的配置代码,实现快速迭代与部署,并确保系统一致性。通过阅读本文,运维人员将了解如何利用Ansible优化日常任务,加速产品上线速度,同时提高系统的稳健性。
236 5