当前位置:首页 > 服务器技术 > nginx

Nginx学习笔记(三、Nginx反向代理与负载均衡)

目录:

  • 正向代理与方向代理简介
  • 正向代理基本操作指令
  • 反向代理基本操作指令

正向代理与方向代理简介

1、正向代理:内部服务器访问外部资源。

外部资源好比外面的因特网,是一个巨大的资源库,如果不受控制的访问外部资源那肯定是及其不安全的,容易导致病毒入侵内网。

因此就需要一个挡板或过滤器来限制这种不安全的资源访问,正向代理便是如此的代理服务器。

它主要是为了增强局域网内部的网络安全性,使得外网的威胁因素影响不到内部的网络;这里的代理服务器起到了防火墙的作用,同时也可以对局域网内的访问进行必要的监控和管理,正向代理服务器不支持外部对内部网络的访问请求。

Nginx学习笔记(三、Nginx反向代理与负载均衡) - 文章图片

2、反向代理:外部资源访问内部服务器。

它与正向代理相反,如果我们的局域网向Internet提供资源,让internet上的其他用户可以访问我们局域网内部资源,也可以设置一个代理服务器,他提供的服务就叫做反向代理(Reverse proxy)服务。

Nginx学习笔记(三、Nginx反向代理与负载均衡) - 文章图片

正向代理基本操作指令

指令名称:

用途:

resolver

指定DNS ip地址默认端口53

resolver_timeout

设置解析超时时间

proxy_pass

代理服务器的协议地址

1、resolver:该指令用于指定DNS服务器的IP地址。 

DNS服务器的主要工作是对域名的解析工作,将域名转变为对应的ip地址。

1 server {
2     # 设置DNS服务器的IP
3     # valid:有些情况下我们的数据包在一定的时间内不能被传递到目的地,但是又不能让这个数据包无线的存在,所以我们可以设定一个时间
4     # 当数据包在这段时间内没有到达目的地就会被丢弃,然后发送者会受到一个消息,并且决定要不要重新发送该数据包
5     resolver 8.8.8.8 valid = 30s;
6     
7     listen       80;
8     server_name  localhost;
9 }

2、resolver_timeout指令。

该指令用于设置DNS服务器解析超时时间。

 1 server {
 2     resolver 8.8.8.8 valid = 30s;
 3     # 设置DNS服务器的解析超时时间
 4     resolver_timeout 100s;
 5     
 6     listen       80;
 7     server_name  localhost;
 8     
 9     #charset koi8-r;
10 }

3、proxy_pass指令。

该指令用于配置代理服务器的协议的地址,更用于nginx的反向代理服务。

指令:proxy_pass URL(URL指的是设置代理服务器协议和地址)。

 1 server {
 2     resolver 8.8.8.8 valid = 30s;
 3     resolver_time 100s;
 4     
 5     listen       80;
 6     server_name  localhost;
 7     
 8     location / {
 9         root   html;
10         index  index.html index.htm;
11         proxy_pass   http://$http_host$request_uri;
12     }
13 }

其中代理服务器协议设置为Http,$http_host和$request两个变量是Nginx支持的动态获取主机和uri的变量。

反向代理基本操作指令

1、proxy_pass:设置被代理服务器的地址。

 1 upstream testServer {
 2 
 3     # weight:权重
 4     server ip1:8080 weight=1;
 5     server ip2:8081 weight=1;
 6     
 7     # 1-2  ip_hash;   服务器 不会太大 
 8     # 3-5  session复制;  配置比较麻烦一点
 9     # 5以上 redis共享   直接代码层次
10     # ip_hash;
11     
12 }
13 
14 server {
15 
16     # 监听的端口
17     listen       80;
18     server_name  localhost;
19 
20     #charset koi8-r;
21 
22     #access_log  logs/host.access.log  main;
23     
24     # 请求带有/server的,转到此处理
25     location /server {
26         # 设置被代理的服务器:把http://host/server的请求代理到http://testServer执行
27         # http://testServer >>> upstream testServer中的server
28         # 也就是会转到ip1:8080或ip2:8081处理
29         proxy_pass http://testServer;
30     }
31     
32 }

2、proxy_hide_header:配置发送http响应隐藏的头域信息。

1 # field为需要发送的头域,该指令可以在http、server、location块中进行配置
2 proxy_hide_header field;

3、proxy_pass_header:配置头域信息。

1 # field指的是哪些文件将被发送
2 Proxy_pass_header field;

4、proxy_pass_request_body:配置是否客户端发送的请求体发送给代理服务器。

1 # 默认为on,开关可以在http块server或者location块中进行配置
2 proxy_pass_request_body  on|off;

5、proxy_pass_request_headers:配置是否发送请求头给代理服务器。

# 默认为on,开关可以在http块server或者location块中进行配置
proxy_pass_request_headers  on|off;

6、proxy_set_header:更改nginx服务器收到的请求头,然后将新的请求头发给代理服务器。

 1 # field你要更改的信息所在的头域
 2 # value更改的值,支持文本,变量或者说变量的结合
 3 proxy_set_header field value;
 4 
 5 # 默认情况下的配置
 6 proxy_set_header host $proxy_host;
 7 
 8 # 实例:
 9 # 将目前host的值充填成客户端的地址值
10 proxy_set_header host $http_host;
11 # 将location块的server_name的指令充填到Host头域
12 proxy_set_header host $host;

7、proxy_set_body:更改nginx服务器的请求体。

1 # value是更改的信息,支持文本变量或者变量的组合
2 proxy_set_body value;

8、proxy_bind:强行将代理主机绑定到指定的ip地址。

1 # ip指的是主机ip(只有0.8.22nginx以上支持)
2 proxy_bind ip;

9、proxy_coonext_timeout:配置nginx服务器与被代理服务器建立进阶的超时时间。

1 # Time为超时时间默认60s
2 proxy_connect_timeout time;

10、proxy_read_timeout:nginx服务器向后端被代理服务器发出read请求后等待响应超时时间。

1 # Time为超时时间默认60s
2 proxy_read_timeout time;

11、proxy_send_timeout:示nginx服务器向后端发起write请求后等待响应的超时时间。

1 # Time为超时时间默认60s
2 proxy_send_timeout time;

12、proxy_http_version:设置http协议版本。

1 # 版本自己选择1.0或者1.1稳定一点
2 proxy_http_version  1.0|1.1;

13、proxy_method:设置nginx服务器请求被代理服务器时使用的请求方法,一般为post 或者get。

1 # 注意自己选择get还是post不要加""号
2 proxy_method post|get; 

14、proxy_ignore_client_abort:设置客户端中断网络请求,nginx服务器是否中断被代理的服务器请求。

1 # 默认off,极少使用数据交互
2 proxy_ignore_client_abort off|on

15、proxy__ignore_headers:设置一些http的响应头区域 nginx服务器接收到被代理的服务器响应时不会被处理设置的头域。

1 # field 未设置的http响应头的区域,例如"x-accel-REdirect","x-Accel-Expires"等
2 proxy_ignore_headers field ...

 


【说明】本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!