反向代理

概述

1、正向代理

(1)客户端向代理服务器发送一个请求并指定目标

(2)代理服务器向目标服务器转交请求,并将获得的内容返回给客户端

2、反向代理

(1)代理服务器接受 Internet 上的连接请求,将请求转发给内部网络上的服务器

(2)将从服务器上得到的结果,返回给 Internet 上请求连接的客户端

3、区别

(1)正向代理其实是客户端的代理,帮助客户端访问其无法访问的服务器资源;反向代理则是服务器的代理,帮助服务器做负载均衡,安全防护等

(2)正向代理一般是客户端架设;反向代理一般是服务器架设

(3)正向代理中,服务器不知道真正的客户端;反向代理中,客户端不知道真正的服务器

(4)正向代理主要解决访问限制问题;反向代理提供负载均衡、安全防护等作用

(5)二者均能提高访问速度

 

反向代理配置

1、反向代理模块:ngx_http_proxy_module,在 make install 时自动安装

2、proxy_pass

(1)设置被代理服务器地址

(2)语法

proxy_pass URL;

(3)位置:location

(4)URL:被代理服务器地址,包含传输协议(http://、https://)、主机名称或 IP + 端口号、URI 等要素

3、proxy_set_header

(1)更改代理服务器,所接收的客户端请求的请求头信息,然后将新的请求头发送到被代理服务器

(2)语法

proxy_set_header field value;

(3)默认值

proxy_set_header Host $proxy_host;
proxy_set_header Connection close;

(4)位置;http、server、location

(5)需要在被代理服务器上,获取头信息的修改结果,而不是在代理服务器

4、proxy_redirect

(1)重置头信息中的 Location、Refresh,隐匿真实 IP

(2)语法

# redirect:被替换值,即 Location 值
# replacement:所替换的值
proxy_redirect redirect replacement;
# 将 location 块的 uri 变量作为 replacement,将 proxy_pass 变量作为 redirect 进行替换
proxy_redirect default;
proxy_redirect off;

(3)默认值

proxy_redirect default;

(4)位置:http、server、location

5、proxy_connect_timeout

(1)定义了与代理服务器建立连接的超时时间

(2)注意:超时时间通常不能超过 75 秒

(3)语法

proxy_connect_timeout time;

(4)默认值

proxy_connect_timeout 60s;

(5)位置:http、server、location

6、proxy_send_timeout

(1)设置一个向代理服务器传输请求的超时时间

(2)该超时时间只在两个连续的写操作之间设置,而不是为整个请求的传输设置

(3)如果代理服务器在这段时间内没有收到任何东西,连接将被关闭。

(4)语法

proxy_send_timeout time;

(5)默认值

proxy_send_timeout 60s;

(6)位置:http、server、location

7、proxy_read_timeout

(1)定义了从代理服务器读取响应的超时时间

(2)该超时时间只在两个连续的读取操作之间设置,而不是为整个响应的传输设置

(3)如果代理服务器在这个时间内没有传输任何东西,连接就会被关闭

(4)语法

proxy_read_timeout time;

(5)默认值

proxy_read_timeout 60s;

(6)位置:http, server, location

 

安全控制

1、安全隔离

(1)通过代理,分开客户端到应用程序服务器端的连接,实现安全措施

(2)在反向代理之前设置防火墙,仅留一个入口供代理服务器访问

2、加密流量

(1)将 http 请求转变成 https 请求

(2)http 明文传输数据,存在安全问题

(3)https 加密传输,等价于 http + ssl,并且可以防止流量劫持

(4)HTTPS 是一种通过计算机网络,进行安全通信的传输协议,经由 HTTP 进行通信,利用 SSL/TLS 建立全通信,加密数据包,确保数据的安全性

(5)SSL(Secure Sockets Layer)安全套接层

(6)TLS(Transport Layer Security)传输层安全

(7)SSL / TLS 为网络通信提供安全及数据完整性的一种安全协议,TLS、SSL 分别在传输层、应用层对网络连接进行加密

 

Nginx 的 SSL 相关指令

1、配置模块:--with-http_ssl_module,需要 OpenSSL 支持

2、ssl

(1)在指定的服务器开启 HTTPS

(2)语法(过时)

ssl on | off;

(3)默认值

ssl off;

(4)位置:http、server

(5)server 块的 listen 开启 SSL

listen address[:port] [default_server] [ssl];

2、ssl_certificate

(1)为当前虚拟主机指定一个带有 PEM 格式的证书

(2)语法

ssl_certificate file;

(3)位置:http、server

3、ssl_certificate_key

(1)指定 PEM secret key 文件的路径

(2)语法

ssl_ceritificate_key file;

(3)位置:http、server

4、ssl_session_cache

(1)配置用于 SSL 会话缓存的类型、大小

(2)语法

ssl_session_cache off | none | [builtin[:size]] [shared:name:size];

(3)默认值

ssl_session_cache none;

(4)位置:http、server

(5)off:严格禁用会话缓存,客户端不得重复使用 Session

(6)none:不允许使用会话缓存,客户端可以重用 Session,但实际上不在缓存中存储会话参数

(7)builtin:内置 OpenSSL 缓存,仅在一个工作进程中使用,缓存的大小是以会话为单位指定的,如果没有给出大小,它等于 20480 个会话,使用内置缓存会导致内存碎片化

(8)shared:所有工作进程之间共享缓存,缓存的相关信息用 name 和 size 来指定,缓存的大小以字节为单位,一兆字节可以存储大约 4000 个会话,每个共享缓存应该有一个任意的名字,一个具有相同名称的缓存可以在多个虚拟服务器中使用

(9)两种缓存类型可以同时使用

5、ssl_session_timeout

(1)开启 SSL 会话功能后,设置客户端能够重复使用在缓存中的 Session 时间

(2)语法

ssl_session_timeout time;

(3)默认值

ssl_session_timeout 5m;

(4)位置:http、server

6、ssl_ciphers

(1)指定启用的密码,密码指定为 OpenSSL 支持的格式

(2)语法

ssl_ciphers ciphers;

(3)默认值

ssl_ciphers HIGH:!aNULL:!MD5;

(4)位置:http、server

(5)可以使用 openssl ciphers 查看 openssl 支持的格式

7、ssl_prefer_server_ciphers

(1)指定在使用 SSLv3 和 TLS 协议时,服务器密码应优先于客户端密码

(2)语法

ssl_perfer_server_ciphers on|off;

(3)默认值

ssl_perfer_server_ciphers off;

(4)位置:http、server

8、生成证书

(1)方式一:第三方服务进行购买

(2)方式二:使用 OpenSSL 生成证书

 

proxy_pass 向上游服务器请求数据的 6 个阶段

1、初始化

2、与上游服务器建立连接

3、向上游服务器发送请求

4、处理响应头

5、处理响应体

6、结束 

 

反向代理系统调优

1、反向代理值

(1)Buffer:缓冲

(2)Cache:缓存

2、相同

(1)提高 I/O 吞吐效率

(2)提升 Nginx 代理性能

3、区别

(1)缓冲:解决不同设备之间,数据传递速度不一致,导致的性能低下,缓冲中的数据一旦此次操作完成后,就可以删除

(2)缓存:备份,将被代理服务器的数据,缓存一份到代理服务器,客户端再次获取相同数据时,只需从代理服务器上获取,效率较高,缓存中的数据可以重复使用,只有满足特定条件才会删除

 

ngx_http_proxy_module

1、proxy_buffering

(1)开启 / 关闭代理服务器的响应体缓冲区

(2)语法

proxy_buffering on|off;

(3)默认值

proxy_buffering on;

(4)位置:http、server、location

2、proxy_buffers

(1)指定单个连接,从代理服务器读取响应体的缓存区的个数、大小

(2)语法

proxy_buffers number size;

(3)默认值(与系统平台有关)

proxy_buffers 8 4k|8K;

(4)位置:http、server、location 

(5)number:缓冲区的个数

(6)size:每个缓冲区的大小

(7)缓冲区的总大小 = number * size

3、proxy_buffer_size

(1)设置从被代理服务器获取的响应头数据的大小

(2)保持与 proxy_buffers 中的 size 一致,也可以更小

(3)语法

proxy_buffer_size size;

(4)默认值(与系统平台有关)

proxy_buffer_size 4k|8k;

(5)位置:http、server、location

4、proxy_busy_buffers_size

(1)限制同时处于 BUSY 状态的缓冲总大小

(2)语法

proxy_busy_buffers_size size;

(3)默认值

proxy_busy_buffers_size 8k|16K;

(4)位置:http、server、location

5、proxy_temp_path

(1)当缓冲区存满后,仍未被 Nginx 服务器完全接受,响应数据就会被临时存放在磁盘文件上,该指令设置文件路径

(2)语法

proxy_temp_path path path [level1 [level2 [level3]]];

(3)默认值

proxy_temp_path proxy_temp;

(4)位置:http、server、location 

(5)在指定 path 下,最多可以使用三层的子目录层次结构

6、proxy_temp_file_write_size

(1)限制每次写入临时文件的数据大小,当启用从代理服务器到临时文件的响应缓冲时

(2)默认情况下,大小由 proxy_buffer_size 和 proxy_buffers 指令设置的两个缓冲区限制

(3)临时文件的最大尺寸由 proxy_max_temp_file_size 指令设置

(4)语法

proxy_temp_file_write_size size;

(5)默认值

proxy_temp_file_write_size 8k|16k;

(6)位置:http、server、location

7、proxy_max_temp_file_size

(1)当启用了对代理服务器响应的缓冲,并且整个响应不适合由 proxy_buffer_size 和 proxy_buffers 指令设置的缓冲区时,响应的一部分可以被保存到一个临时文件

(2)这条指令设置了临时文件的最大尺寸

(3)每次写入临时文件的数据大小由 proxy_temp_file_write_size 指令设定

(4)0 表示禁止对临时文件的响应进行缓冲

(5)这个限制并不适用于将被缓存或存储在磁盘上的响应

(6)语法

proxy_max_temp_file_size size;

 

(7)默认值

proxy_max_temp_file_size 1024m;

(8)位置:http, server, location

8、proxy_request_buffering

(1)启用或禁用客户端请求体的缓冲

(2)当缓冲功能启用时,在将请求发送到代理服务器之前,需要将从客户端读取整个请求体

(3)当缓冲被禁用时,请求体在收到后立即被发送到代理服务器,在这种情况下,如果 nginx 已经开始发送请求体,那么请求就不能被传递给下一个服务器

(4)当使用 HTTP/1.1 分块传输编码,来发送原始请求体时,无论指令值如何,请求体都会被缓冲,除非 HTTP/1.1 被启用为代理

(5)语法

proxy_request_buffering on | off;

(6)默认值

proxy_request_buffering on;

(7)位置:http、server、location

 

容错机制

1、proxy_next_upstream

(1)指定在哪些情况下应将请求传递到下一台服务器

(2)语法

proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;

(3)默认值

proxy_next_upstream error timeout;

(4)位置:http、server、location

(4)error:在与服务器建立连接、向服务器传递请求、读取响应头时发生错误

(5)timeout:在与服务器建立连接、向服务器传递请求、读取响应头时发生超时

(6)invalid_header:服务器返回空,或无效的响应

(7)http_500:服务器返回代码为 500 的响应

(8)http_502:服务器返回代码为 502 的响应

(9)http_503:服务器返回代码为 503 的响应

(10)http_504:服务器返回代码为 504 的响应

(11)http_403:服务器返回代码为 403 的响应

(12)http_404:服务器返回代码为 404 的响应

(13)http_429:服务器返回代码为 429 的响应

(14)non_idempotent:通常,如果请求已发送到上游服务器,则使用非幂等方法(POST,LOCK,PATCH)的请求,不会传递到下一个服务器,启用此选项明确允许重试此类请求

(15)close:禁止将请求传递到下一台服务器

(16)只有当还没有向客户端发送任何内容时,才可以将请求传递到下一个服务器,即如果在传输响应的过程中,发生错误或超时,则无法修复此问题

(17)该指令还定义了被视为与服务器通信的失败尝试:error、timeout、invalid_header 始终被视为不成功的尝试,即使指令中未指定也是如此;只有在指令中指定 http_500、http_502、http_503、http_504、http_429 情况时,才被视为不成功的尝试;http_403、http_404 从不被视为不成功的尝试

(18)将请求传递到下一台服务器可能会受到尝试次数、时间限制

2、proxy_next_upstream_timeout

(1)限制可以将请求传递到下一台服务器的时间

(2)0 值将关闭此限制

(3)语法

proxy_next_upstream_timeout time;

(4)默认值

proxy_next_upstream_timeout 0;

(5)位置:http、server、location

3、proxy_next_upstream_tries

(1)限制将请求传递到下一台服务器的可能尝试次数

(2)0 值将关闭此限制

(3)语法

proxy_next_upstream_tries number;

(4)默认值

proxy_next_upstream_tries 0;

(5)位置:http、server、location

posted @   半条咸鱼  阅读(270)  评论(0编辑  收藏  举报
(评论功能已被禁用)
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示