nginx的反向代理

代理原理

  • 反向代理产生的背景: 在计算机世界里,由于单个服务器的处理客户端(用户)请求能力有一个极限,当用户的接入请求蜂拥而入时,会造成服务器忙不过来的局面,可以使用多个服务器来共同分担成千上万的用户请求,这些服务器提供相同的服务,对于用户来说,根本感觉不到任何差别。
  • 反向代理服务的实现: 需要有一个负载均衡设备(即反向代理服务器)来分发用户请求,将用户请求分发到空闲的服务器上。 服务器返回自己的服务到负载均衡设备。 负载均衡设备将服务器的服务返回用户。

代理配置

代理
Syntax:     proxy_pass URL;                #代理的后端服务器URL
Default:    —
Context:    location, if in location, limit_except

缓冲区
Syntax:     proxy_buffering on | off;
Default:    proxy_buffering on;            #缓冲开关
Context:    http, server, location
proxy_buffering开启的情况下,nignx会把后端返回的内容先放到缓冲区当中,然后再返回给客户端
(边收边传,不是全部接收完再传给客户端)。

Syntax:     proxy_buffer_size size;
Default:    proxy_buffer_size 4k|8k;       #缓冲区大小
Context:    http, server, location

Syntax:     proxy_buffers number size;
Default:    proxy_buffers 8 4k|8k;         #缓冲区数量
Context:    http, server, location

Syntax:     proxy_busy_buffers_size size;
Default:    proxy_busy_buffers_size 8k|16k;#忙碌的缓冲区大小控制同时传递给客户端的buffer数量
Context:    http, server, location

头信息
Syntax:     proxy_set_header field value;
Default:    proxy_set_header Host $proxy_host;      #设置真实客户端地址
            proxy_set_header Connection close;
Context:    http, server, location

超时
Syntax:     proxy_connect_timeout time;
Default:    proxy_connect_timeout 60s;              #链接超时
Context:    http, server, location

Syntax:     proxy_read_timeout time;
Default:    proxy_read_timeout 60s;
Context:    http, server, location

Syntax:     proxy_send_timeout time; #nginx进程向fastcgi进程发送request的整个过程的超时时间
Default:    proxy_send_timeout 60s;
Context:    http, server, location

#buffer 工作原理
1. 所有的proxy buffer参数是作用到每一个请求的。每一个请求会安按照参数的配置获得自己的buffer。proxy buffer不是global而是per request的。

2. proxy_buffering 是为了开启response buffering of the proxied server,开启后proxy_buffers和proxy_busy_buffers_size参数才会起作用。

3. 无论proxy_buffering是否开启,proxy_buffer_size(main buffer)都是工作的,proxy_buffer_size所设置的buffer_size的作用是用来存储upstream端response的header。

4. 在proxy_buffering 开启的情况下,Nginx将会尽可能的读取所有的upstream端传输的数据到buffer,直到proxy_buffers设置的所有buffer们 被写满或者数据被读取完(EOF)。此时nginx开始向客户端传输数据,会同时传输这一整串buffer们。同时如果response的内容很大的 话,Nginx会接收并把他们写入到temp_file里去。大小由proxy_max_temp_file_size控制。如果busy的buffer 传输完了会从temp_file里面接着读数据,直到传输完毕。

5. 一旦proxy_buffers设置的buffer被写入,直到buffer里面的数据被完整的传输完(传输到客户端),这个buffer将会一直处 在busy状态,我们不能对这个buffer进行任何别的操作。所有处在busy状态的buffer size加起来不能超过proxy_busy_buffers_size,所以proxy_busy_buffers_size是用来控制同时传输到客户 端的buffer数量的。

启用 nginx proxy 代理

环境两台nginx真实服务器

a、nginx-1 启动网站(内容)

nginx-1的IP:192.168.100.10
yum install -y nginx
systemctl start nginx

b、nginx-2 启动代理程序

nginx-2的IP:192.168.100.20
yum install -y nginx
systemctl start nginx

# nginx 配置文件添加 proxy 配置
vim /etc/nginx/conf.d/default.conf
location / {
.....
proxy_pass http://192.168.100.10:80;
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;

proxy_buffering on;
proxy_buffer_size 32k;
proxy_buffers 4 128k;
proxy_busy_buffers_size 256k;
proxy_max_temp_file_size 256k;
    }

c、nginx proxy 具体配置详解

proxy_pass :真实服务器
proxy_redirect :如果真实服务器使用的是的真是IP:非默认端口。则改成IP:默认端口。
proxy_set_header:重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP :启用客户端真实地址(否则日志中显示的是代理在访问网站)
proxy_set_header X-Forwarded-For:记录代理地址

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

proxy_buffering on;开启缓存
proxy_buffer_size:proxy_buffer_size只是响应头的缓冲区
proxy_buffers 4 128k; 内容缓冲区域大小
proxy_busy_buffers_size 256k; 从proxy_buffers划出一部分缓冲区来专门向客户端传送数据的地方
proxy_max_temp_file_size 256k;超大的响应头存储成文件。
nginx的反向代理
proxy_set_header X-Real-IP 
未配置
Nginxbackend 的日志:记录只有192.168.107.112
配置
Nginxbackend 的日志,记录的有192.168.107.16 192.168.107.107 192.168.107.112

proxy_buffers 的缓冲区大小一般会设置的比较大,以应付大网页。 proxy_buffers当中单个缓冲区的大小是由系统的内存页面大小决定的,Linux系统中一般为4k。 proxy_buffers由缓冲区数量和缓冲区大小组成的。总的大小为number*size。
若某些请求的响应过大,则超过_buffers的部分将被缓冲到硬盘(缓冲目录由_temp_path指令指定), 当然这将会使读取响应的速度减慢, 影响用户体验. 可以使用proxy_max_temp_file_size指令关闭磁盘缓冲.

注意:proxy_pass http:// 填写nginx-1服务器的地址。

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

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

92.168.100.20 - - [21/Dec/2017:00:29:58 +0800] "GET / HTTP/1.0" 200 646 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:57.0) Gecko/20100101 Firefox/57.0" "192.168.100.254"

192.168.100.20 代理服务器地址

192.168.100.254 客户机地址。访问成功。 记录了客户机的IP和代理服务器的IP

文章来源:https://www.cnaaa.net,转载请注明出处:https://www.cnaaa.net/archives/7713

(0)
杰斯的头像杰斯
上一篇 2023年3月22日 下午4:38
下一篇 2023年3月23日 下午4:17

相关推荐

  • Nmon使用方法

    一、简介 1、nmon是一种在AIX与各种Linux操作系统上广泛使用的监控与分析工具,它能在系统运行过程中实时地捕捉系统资源的使用情况,记录的信息比较全面, 并且能输出结果到文件中,然后通过nmon_analyzer工具产生数据文件与图形化结果。 2、nmon可监控的数据类型 内存使用情况 磁盘适配器 文件系统中的可用空间 CPU使用率 页面空间和页面速度…

    2022年8月23日
    79400
  • HTTPS为什么比HTTP更安全?

    一、安全性 HTTP在通信中: 通信使用明文,不对内容进行加密,容易被窃听 不验证通信方的身份,内容可能被伪装分子窃取 HTTPS则解决了上述问题: 内容加密,建立一个信息安全通道,来保证数据传输的安全 身份认证,确认网站的真实性 数据完整性,防止内容被第三方冒充或者篡改 HTTPS=HTTP+SSL/TLS ,如今SSL已废弃,所以只关注HTTP+TLS,…

    2022年8月19日
    34500
  • hosts.allow与hosts.deny的应用

    Linux系统服务器通过设置hosts.allow与hosts.deny这两个配置文件控制外部IP对本机服务的访问,hosts.allow控制可以访问本机的IP地址,hosts.deny控制禁止访问本机的IP。配置完成之后是实时生效的。这种方法是最简单的,但是有几率不成功,临时使用是可以的。长期的话建议还是使用iptables, 假设现在需要只允许192.1…

    2022年8月10日
    38600
  • Docker神器NPM的安装

    准备工作 目录管理 配置yml文件 创建新文件docker-compose.yml并添加内容如下: 你可以使用默认端口或者自定义。 一般地,对于VPS来说,80和443端口应该使用默认的。可以使用80和443端口也是玩VPS的优势之一呀!想想你每次访问互联网服务都要加个端口号,看着就很难受。你的家用NAS一般是你或者你的家人等少数人用,有一些端口号也无伤大雅…

    2023年4月26日
    55400
  • 如何用防火墙添加规则

    防火墙技术的功能主要在于及时发现并处理计算机网络运行时可能存在的安全风险、数据传输等问题,其中处理措施包括隔离与保护,同时可对计算机网络安全当中的各项操作实施记录与检测,以确保计算机网络运行的安全性,保障用户资料与信息的完整性,为用户提供更好、更安全的计算机网络使用体验。 系统版本:centos7.9,最好和我一样是centos7的版本,其他版本命令可能有偏…

    2022年8月10日
    41400

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

在线咨询: QQ交谈

邮件:712342017@qq.com

工作时间:周一至周五,8:30-17:30,节假日休息

关注微信