nginx proxy 反向代理

代理原理

反向代理产生的背景:

在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到任何差别。

反向代理服务的实现:

需要有一个负载均衡设备(即反向代理服务器)来分发用户请求,将用户请求分发到后端正真提供服务的服务器上。服务器返回自己的服务到负载均衡设备。负载均衡设备将服务器的服务返回用户。

正/反代理的区别

正向代理

**正向代理的过程隐藏了真实的请求客户端,服务器不知道真实的客户端是谁,客户端请求的服务器都被代理服务器代替请求。**我们常说的代理也就是正向代理,正向代理代理的是请求方,也就是客户端;比如我们要访问youtube,可是不能访问,只能先安装个FQ软件代你去访问,通过FQ软件才能访问,FQ软件就叫作正向代理。

反向代理

**反向代理的过程隐藏了真实的服务器,客户不知道真正提供服务的人是谁,客户端请求的服务都被代理服务器处理。反向代理代理的是响应方,也就是服务端;**我们请求www.baidu.com时这www.baidu.com就是反向代理服务器,真实提供服务的服务器有很多台,反向代理服务器会把我们的请求分转发到真实提供服务的各台服务器。Nginx就是性能非常好的反向代理服务器,用来做负载均衡。

访问www.baidu.com是反向代理的过程

两者区别

正向代理中代理的对象是 客户端

反向代理中代理的对象是 服务端

nginx proxy配置

1.代理模块

ngx_http_proxy_module

2.启用 nginx proxy代理

准备环境

两台安装nginx的服务器

a.nginx-1 启动网站(内容) (作为应用服务器)
nginx-1
ip:192.168.60.131
nginx安装方式:编译安装
b.nginx-2 作为代理服务器
nginx-2
ip:192.168.60.132
nginx安装方式:yum安装

开始

编辑nginx-2的配置文件

yum安装的nginx的 默认主配置文件/etc/nginx/nginx.conf

但是我们需要在 子配置文件中进行配置

所以 vim /etc/nginx/conf.d/default.conf

建议给default.conf配置文件备份一下


cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
修改配置文件

[root@nginx-server ~]# vim /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  localhost;

    location / {
    proxy_pass http://192.168.60.131;       //IP填写nginx-1的IP
    proxy_redirect default;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    }
}
nginx proxy 具体配置详解
proxy_pass :真实后端服务器的地址,可以是ip也可以是域名和url地址
proxy_redirect :如果真实服务器使用的是的真实IP:非默认端口。则改成IP:默认端口。
proxy_set_header:重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP $remote_addr;#只记录连接服务器的上一个ip地址信息。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #通过这个选项可以记录真正客户端机器的ip地址

proxy_connect_timeout::后端服务器连接的超时时间发起三次握手等候响应超时时间
proxy_send_timeout:后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout :nginx接收upstream(上游/真实) server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭。像长连接

检查配置文件

nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful

重新加载nginx配置文件

nginx -s reload
或者
systemctl restart nginx

成功测试

使用PC客户端访问nginx-2服务器地址
浏览器中输入http://192.168.60.132 (也可以是nginx-2服务器的域名)

成功访问nginx-1服务器页面

观察nginx-1服务器的日志

tailf /var/log/nginx/access.log
############################### 
    192.168.60.132 - - [29/Nov/2023:20:39:05 +0800] "GET / HTTP/1.0" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" "192.168.60.1"

#可以看到nginx-2的服务器IP  以及最后客户端的访问地址