一、正向代理反向代理简介
正向代理
这里就好比外面的的因特网像是一个巨大的资源库 ,那么资源就分布在因特网的各个节点上我们局域网的客户端要访问外面的资源,那么就需要经过 正向代理服务器 才能对各个资源进行访问
这里的局域网内的机器借助了代理服务器访问局域网外部的资源,这主要是为了增强局域网内部的网络安全性,使得外网的威胁因素影响不到内部的网络 这里的代理服务器起到了防火墙的作用 同时也可以对局域网内的访问进行必要 监控和管理 ,正向代理服务器不支持外部对内部网络的访问请求
反向代理
与正向代理相反
如果我们的局域网向Internet提供资源,让internet上的其他用户可以访问我们局域网内部资源,也可以设置一个代理服务器 ,他提供的服务就叫做反向代理 (Reverse proxy)服务,
归纳起来就是说:
● 正向代理服务器用来让局域网客户机接入外网以访问外网资源
● 反向代理服务器是让外网的用户接入局域网中的站点以访问网点中的资源,
在正向代理中我们是客户端 目的是访问外网资源
在反向代理中我们是站点目的是把站点的资源发布出去让其他客户端能够访问
二、正向代理的基本操作指令
指令名称 | 用途 |
resolver | 指定 DNS ip地址 默认端口53 |
resolver_timeout | 设置解析超时时间 |
proxy_pass | 代理服务器的协议地址 |
resolver
该指令用于指定DNS服务器的IP地址。DNS服务器的主要工作是对域名的解析工作,将域名转变为对应的ip地址。该指令的语法为
server {
resolver 8.8.8.8 valid =30s;
#解读: 设置DNS服务器的IP;NDS的主要操作是做域名解析,将域名的映射为对应的IP地址
#time 有些情况下 我们的数据包在一定的时间内不能被传递到目的地,
#但是又不能让这个数据包无线的存在,于是我们可以设定一个时间 ,
#当数据包在这段时间内没有到达目的地就会被丢弃 然后发送者会受到一个消息
#并且决定要不要重新发送该数据包
listen 80;
server_name localhost;
}
resolver_timeout 指令
该指令用于设置DNS服务器解析超时时间
server {
resolver 8.8.8.8 valid =30s;
resolver_timeout 100s;
#设置DNS服务器的解析超时时间
listen 80;
server_name localhost;
#charset koi8-r;
proxy_pass指令
该指令用于代理服务器的协议的地址,他不仅仅nginx的代理服务更用于 nginx的反向代理服务 (在反向代理中会有详细的讲解)
proxy_pass URL ;
URL指的是 设置带代理的服务器协议和地址
在配置中比较固定一般是
server {
resolver 8.8.8.8 valid =30s;
resolver_time 100s;
#设置DNS服务器的解析超时时间
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
proxy_pass http://$http_host$request_uri;
}
其中代理服务器协议设置为Http, h t t p h o s t 和 http_host和 httphost和request两个变量是Nginx支持的动态获取主机和uri的变量
三、反向代理基本操作指令
nginx服务器的反向代理是我们工作中最常用到的,也是用到最多的功能之一,涉及到的指令也是比较多的,各类的指令以及功能也不尽相同。
proxy_pass
设置被代理的服务器地址
upstream dailiserver{
#如果是一组服务器的话这样配置
server http:127.0.0.1:8080 weight=1;
server http:127.0.0.1:8081 weight=1;
# 1-2 ip_hash; 服务器 不会太大
# 3-5 session复制; 配置比较麻烦一点
# 5以上 redis共享 直接代码层次
ip_hash;
}
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location /server {
# 跳转的地址 被代理的服务器地址
# 如果在服务器内部指明了http://那么这里写这个http是也是可以的
proxy_pass http://dailiserver;
}
}
proxy_pass注意事项
location /html/ {
proxy_pass http://tomcat_app;
}
http://ip:port/html/test.jsp,被nginx代理后,路径http://proxy_pass/html/test.jsp
location /html/ {
proxy_pass http://tomcat_app/;
}
http://ip:port/html/test.jsp,被nginx代理后,路径http://proxy_pass/test.jsp
proxy_hide_header
默认的情况下 ,nginx服务器发送响应报文时 ,报文头中不包含"Date" “Serer” “X-Accel” 等来自被代理的服务器的头域信息 那么如果我们想要想要设置哪些头域信息被发送语法如下
Proxy_pass_header field;
#field 指的是哪些文件将被发送
proxy_pass_request_body
该指令用于配置是否将客户端的请求体发送给代理服务器,其语法结构为
proxy_pass_request_body on|off;
#默认为on 开关可以在 http块 server 或者 location 块中进行配置
proxy_pass_request_headers
该指令用于配置是否将客户端的请求头发送给代理服务器,其语法结构为
proxy_pass_request_headers on|off;
#默认为on 开关可以在 http块 server 或者 location 块中进行配置
proxy_set_header
该指令可以更改nginx服务器接收到的客户端请求的请求头信息,然后将新的请求头发给被代理的服务器,
其语法结构为
proxy_set_header field value;
#field 你要更改的信息所在的头域
#value 更该的值,支持文本,变量或者说变量的结合
默认情况下的配置
proxy_set_header host $proxy_host;
proxy_set_body
该指令可以更改nginx服务器收到的客户端请求的请求体信息,然后讲新的请求体发送给被代理的服务器
语法结构:
proxy_set_body value;
value是更改的信息,支持文本变量或者变量的组合
proxy_bind
官方解释是说他是强行将代理主机绑定到指定的ip地址
简单点就是: 在配置了多个ip主机的情况下,如果我们希望代理连接由指定的主机处理,那就用它吧
proxy_bind ip;
#ip 指的是主机ip
只有0.8.22nginx以上支持
proxy_connect_timeout
该指令配置nginx服务器与后端被代理的服务器尝试建立连接的超时时间,其语法结构为
proxy_connect_timeout time;
#Time为超时时间默认60s
proxy_read_timeout
该指令表示nginx服务器向后端被代理服务器发出read请求后等待响应超时时间
proxy_read_timeout time;
#Time为超时时间默认60s
proxy_send_timeout
该指令表示nginx服务器向后端发起write请求后等待响应的超时时间
proxy_send_timeout time;
#Time为超时时间默认60s
proxy_http_version
该指令表示设置http协议版本
proxy_http_version 1.0|1.1;
版本自己选择 1.0或者1.1稳定一点
proxy_method
该指令用于设置nginx服务器请求被代理服务器时使用的请求方法,一般为post 或者get
如果设置了该方法那么客户端的请求将会被忽略
proxy_method post|get;
注意自己选择get还是post 不要加 "" 号
proxy_ignore_client_abort
该指令用于设置客户端中断网络请求,nginx服务器是否中断被代理的服务器请求
proxy_ignore_client_abort off|on
默认off ; 极少使用 数据交互
proxy_ignore_headers
该指令我们常用于设置一些http的响应头区域 nginx服务器接收到被代理的服务器响应时不会被处理设置的头域
proxy_ignore_headers field ...
field 未设置的http响应头的区域,例如"x-accel-REdirect","x-Accel-Expires"
等