作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
我们上一大章介绍了Kubernetes的知识,本章节我们进入中间件的讲解,这里会包含很多不同的类型组件,中间件的第一个大类我这里定义的是Web服务器。由于目前使用最广泛的Web服务器是Nginx,所以我们这里的讲解主要以Nginx服务器为主。
我们上一小节介绍了Nginx的配置文件以及配置文件包含一个静态网站,静态网站虽然正常的应用都有,但是Nginx的核心还是作为反向代理及负载均衡,代理后端的各种服务(Java,Go,Python等)。所以这个小节我们就来介绍如何配置反向代理。
我们上个小节介绍了Nginx的主配置文件,介绍他可以包含下面的文件,所以我们这里就在这个目录下创建一个配置文件。
include /etc/nginx/conf.d/*.conf;
反向代理配置核心指令
1. proxy_pass
功能:定义请求转发的目标地址,该配置必须有,其他配置都是属于可选的。
语法:
location / {
proxy_pass http://backend_server;
}
2. proxy_set_header
功能:修改或添加请求头,确保后端服务器获取真实客户端信息,这里只列举了部分,实际上这个选项还有很多的。
常用配置:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
设置代理请求中的 Host 头部,确保后端服务器能正确识别目标主机,区分虚拟主机或路由逻辑。后面2个都可以用于获取客户端IP,但是第一个只能获取单层代理,如果要多层则需要使用后一个。
3. 其他常用指令
proxy_connect_timeout:与后端服务器建立连接的超时时间。
proxy_read_timeout:等待后端响应的超时时间。
proxy_buffering:是否启用响应缓冲区(默认开启)。当然这里还有很多参数,除了第一个proxy_pass不能省略,其他都可以省略。
案例
我这里准备了一个使用python编写web的程序,提供了2个web接口,其中接口1会立即响应,而接口二则会延迟10秒才会响应,如果nginx的配置后端响应的时间下小于10秒则会请求失败,如果大于10秒则请求成功。
[root@localhost conf.d]# cat web.conf
server {
listen 80;
server_name 192.168.31.120;
location / {
proxy_pass http://192.168.31.121:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location /api2 {
proxy_pass http://192.168.31.121:8080/api2;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
# 超时配置
proxy_connect_timeout 15s; # 连接后端超时
proxy_read_timeout 5; # 等待响应超时,由于后端会超时,所以这个接口会失败
proxy_send_timeout 15s;
}
}
#Nginx的日志记录
192.168.31.120 - - [01/Apr/2025:23:54:04 +0800] "GET / HTTP/1.1" 200 42 "-" "curl/7.29.0" "-"
192.168.31.120 - - [01/Apr/2025:23:54:23 +0800] "GET /api2 HTTP/1.1" 504 167 "-" "curl/7.29.0" "-"
#后端服务的日志
#第二个接口是正常响应,但是超过nginx响应时间,所以客户并没有获得他要的数据
#如果这个请求是写请求,就可能出现数据异常。
192.168.31.120 - - [01/Apr/2025 23:54:04] "GET / HTTP/1.0" 200 -
192.168.31.120 - - [01/Apr/2025 23:54:28] "GET /api2 HTTP/1.0" 200 -
通过我们的上面的例子我们的Nginx实现反向代理的服务,我们只需要保留一台对外服务器。然后然后通过请求该服务器,根据对应的配置他会根据具体的请求目的转发到不同的后端地址。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有