首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Web服务器-Nginx反向代理(一)

Web服务器-Nginx反向代理(一)

作者头像
运维小路
发布2025-04-05 14:14:54
发布2025-04-05 14:14:54
5310
举报
文章被收录于专栏:运维小路运维小路

作者介绍:简历上没有一个精通的运维工程师。下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们上一大章介绍了Kubernetes的知识,本章节我们进入中间件的讲解,这里会包含很多不同的类型组件,中间件的第一个大类我这里定义的是Web服务器。由于目前使用最广泛的Web服务器是Nginx,所以我们这里的讲解主要以Nginx服务器为主。

我们上一小节介绍了Nginx的配置文件以及配置文件包含一个静态网站,静态网站虽然正常的应用都有,但是Nginx的核心还是作为反向代理及负载均衡,代理后端的各种服务(Java,Go,Python等)。所以这个小节我们就来介绍如何配置反向代理。

我们上个小节介绍了Nginx的主配置文件,介绍他可以包含下面的文件,所以我们这里就在这个目录下创建一个配置文件。

代码语言:javascript
复制
include /etc/nginx/conf.d/*.conf;

反向代理配置核心指令

1. proxy_pass

功能:定义请求转发的目标地址,该配置必须有,其他配置都是属于可选的。

语法:

代码语言:javascript
复制
location / {
    proxy_pass http://backend_server;
}

2. proxy_set_header

功能:修改或添加请求头,确保后端服务器获取真实客户端信息,这里只列举了部分,实际上这个选项还有很多的。

常用配置:

代码语言:javascript
复制
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秒则请求成功。

代码语言:javascript
复制
[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;     
    }

}
代码语言:javascript
复制
#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" "-"
代码语言:javascript
复制
#后端服务的日志
#第二个接口是正常响应,但是超过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实现反向代理的服务,我们只需要保留一台对外服务器。然后然后通过请求该服务器,根据对应的配置他会根据具体的请求目的转发到不同的后端地址。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-04-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 运维小路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档