nginx 反向代理和正向代理功能 第六章
一:Nginx作为正向代理服务器:
1.正向代理:代理(proxy)服务也可以称为是正向代理,指的是将服务器部署在公司的网关,代理公司内部员工上外网的请求,可以起到一定的安全作用和管理限制作用,正向代理不支持从外网向内网访问资源,一般正向代理被称作上网行为管理,进行七层代理或者四层代理,nginx 的七层代理在实际工作中与直接访问的行为有区别,实际应用中不建议使用,例如在访问百度时就需要代理服务器转发请求时将host 值修改为百度的域名,否则你的访问请求会被拒绝。
server {
listen ;
server_name localhost ;
resolver 114.114.114.114;
resolver_timeout 5s;
location / {
proxy_pass $scheme://$http_host/$request_uri;
proxy_set_header Host $http_host;
proxy_buffers 4k;
proxy_max_temp_file_size ;
proxy_connect_timeout ;
proxy_cache_valid 10m;
proxy_cache_valid 1h;
proxy_cache_valid any 1m;
}
}

二:Nginx作为反向代理服务器:
反向代理:反向代理也叫reverse proxy,指的是代理外网用户的请求到内部的指定web服务器,并将数据返回给用户的一种方式,这是用的比较多的一种方式。
反向代理的常用指令:
1.proxy_pass:用来设置将请求转发给的后端服务器的主机,可以是主机名、IP地址:端口的方式,也可以代理到通过upstream设置的主机组,如下:
upstream webserver {
server 10.2.61.23: weight= max_fails= fail_timeout=;
#server 10.2.61.21: backup;
#server 10.2.61.23: weight= max_fails= fail_timeout=;
}
server {
listen ;
server_name localhost;
location / {
proxy_pass http://webserver;
proxy_set_header Host $host;
#add_header Host $upstream_addr ;
add_header X_Via $server_addr; #添加服务器地址到报文头部
add_header X-Cache $upstream_cache_status; #添加缓存状态到报文头部
proxy_cache first;
proxy_cache_valid 10m;
proxy_set_header X_Forworded_For $remote_addr;
}
location ~* ^/aab/ {
add_header webserver $upstream_addr;
proxy_pass http://webserver;
proxy_set_header X_Forworded_For $remote_addr;
}
}
2:proxy_hide_header:用于nginx服务器作为反向代理的时候,在返回给客户端http响应的时候,隐藏后端服务版本(如php版本)的信息,可以设置在http/server或location块,如下:
Nginx会将上游服务器的响应转发给客户端,但默认不会转发以下HTTP头部字段:Date、Server、X-Pad和X-Accel-*。使用proxy_hide_header后可以任意地指定哪些HTTP头部字段不能被转发。例如:
proxy_hide_header Cache-Control;
proxy_hide_header MicrosoftOfficeWebServer;
注:如果是nginx直接作为web服务器,要隐藏版本信息的话,使用fastcgi_hide_header:
3:proxy_pass_header:与proxy_hide_header功能相反,proxy_pass_header会将原来禁止转发的header设置为允许转发,可以设置在http/server或location块例如:
proxy_pass_header X-Accel-Redirect;
4:proxy_pass_request_body:是否向后端服务器发送HTTP包体部分,可以设置在http/server或location块,如下:
proxy_pass_request_body on|off; #默认为on
5:proxy_pass_request_headers:是否将客户端的请求头部转发给后端服务器,可以设置在http/server或location块,如下:
proxy_pass_request_headers on | off; #默认为on
6:proxy_set_header:可以更改或添加客户端的请求头部信息内容,并转发之后端服务器,比如在后端服务器想要获取客户端的真实IP的时候,就要更改每一个报文的头部,如下:
proxy_set_header HOST $remote_addr; #添加HOST到报文头部,其值为客户端的公网IP地址
7:proxy_set_body:更改nginx服务器接收到的客户端请求的请求内容,然后将修改后的请求转发给后端的服务器,用法如下:
proxy_set_body value; #其中value为要修改的目标内容,可以是变量、文本或者变量的组合。
8:proxy_ip:Nginx 0.8.22版本及以上支持此功能,用于Nginx配置了多个基于域名或IP的主机的情况下,可以指定代理连接到特定的主机处理,就是强制将客户端请求绑定到指定的IP地址:
proxy_bind x.x.x.x;
9:proxy_connect_timeout:配置nginx服务器与后端服务器尝试建立连接的超时时间,默认为60秒,用法如下:
proxy_connect_timeout 10s; #10s为自定义nginx与后端服务器建立连接的超时时间
10:proxy_read_time:配置nginx服务器向后端服务器或服务器组发起read请求后,等待的超时时间:
proxy_read_time 10s; #默认为60秒
11:proxy_send_time; 配置nginx项后端服务器或服务器组发起write请求后,等待的超时时间:
proxy_send_time 10s; #默认为60s
12:proxy_http_version:用于设置nginx提供代理服务的HTTP协议的版本:
proxy_http_version 1.0|1.1;
13:proxy_method:设置nginx服务器请求后端服务器时使用的方法,一般为POST或者GET,客户端的请求方法将被忽略:
proxy_method GET|PUT;
14:proxy_ignore_client_abort:设置在客户端网络中断请求时,nginx服务器是否中断对被代理服务器的请求:
proxy_ignore_client_abort off|on; #默认为off,当客户端网络中断请求时,nginx服务器中断其对后端服务器的请求。
15:proxy_ignore_headers:设置nginx不处理后端服务器返回的数据中包含某些指定字段的报文,可以指定的有:”X-Accel-Redirect”, “X-Accel-Expires”, “Expires”或”Cache-Control”:
proxy_ignore_headers Expires;
16:proxy_redirect:修改后端服务器返回的响应头部中的location货refresh,与proxy_pass配合使用:
当上游服务器返回的响应是重定向或刷新请求(如HTTP响应码是301或者302)时,proxy_redirect可以重设HTTP头部的location或refresh字段。
17:proxy_intercept_errors:设置nginx服务器返回客户端的错误状态,当后端服务器返回大于等于400的错误码的是,如果本功能是打开的,则nginx服务器返回自定义的错误页面(使用error page定义的),如果没有开启就将后端服务器返回的HTTP状态直接返回给客户端,默认为关闭:
proxy_intercept_errors on | off;
18:proxy_headers_hash_max_size:设置nginx保存HTTP报文头的hash表的上限,默认为512字节:
proxy_headers_hash_bucket_size 512;#申请nginx保存HTTP报文头的hash表的空间大小,默认为64个字节
proxy_headers_hash_max_size 512; #上限
server_names_hash_max_szie 512; #设置服务器名称的上限
server_namse_hash_bucket_size 512; #申请空间大小
19:proxy_headers_hash_bucket_size:#申请nginx保存HTTP报文头的hash表的空间大小,默认为64个字节
proxy_headers_hash_bucket_size 512; #默认为64字节
20:proxy_net_upstream:当使用了upstream的时候,可以定义在发生了特定的情况下将请求依次交给下一个组内的服务器处理,状态包括:

proxy_next_upstream http_404 http_502; //让404报错进入max_fails计数
upstream online {
sticky;
server 172.28.70.161:8080 max_fails=0 fail_timeout=3s ;
server 172.28.70.163:8080 max_fails=0 fail_timeout=3s ; check interval=3000 rise=2 fall=1 timeout=1000 type=http;
check_http_send "GET / HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
} upstream backup {
server 172.28.22.29:7777 max_fails=0 fail_timeout=3s;
}

21:proxy_ssl_session_reuse:配置是否基于SSL协议与后端服务器建立连接,如下:
proxy_ssl_session_reuse on | off;
nginx 反向代理和正向代理功能 第六章的更多相关文章
- Nginx系列一:正向代理和反向代理、Nginx工作原理、Nginx常用命令和升级、搭建Nginx负载均衡
转自https://www.cnblogs.com/leeSmall/p/9351343.html 仅供个人学习 一.什么是正向代理.什么是反向代理 1. 正向代理,意思是一个位于客户端和原始服务器( ...
- Nginx详解(正向代理、反向代理、负载均衡原理)
Nginx配置详解 nginx概述 nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:nginx可以作为一个HTTP服务器进行 ...
- nginx反向代理与正向代理
nginx反向代理与正向代理 1 正向代理 正向代理: 原因是 客户端 ---X--- 网站,客户端不能直接访问某个网站 解决: 客户端 ----> 代理服务器(发起访问请求) ----> ...
- nginx之旅(第三篇):代理、正向代理、反向代理、代理的原理、nginx反向代理场景、nginx反向代理配置、nginx反向代理语法
一.代理服务与反向代理 什么是代理服务 代理-代理办理(代理理财.代理收货.代理购物等等). 一般情况下,如果没有特别说明,代理技术默认说的是正向代理技术.关于正向代理的概念如下: 正向代理(forw ...
- 代理_正向代理_反向代理_nginx_转
转自:Nginx 相关介绍(Nginx是什么?能干嘛?) 蔷薇Nina 关于代理 说到代理,首先我们要明确一个概念,所谓代理就是一个代表.一个渠道: 此时就设计到两个角色,一个是被代理角色,一个是 ...
- ssh 反向代理和正向代理的文章
搜索原因是,我希望访问家里内网的机器 技术要点: ssh 反向代理,正向代理 隧道 文章摘自: https://my.oschina.net/leejun2005/blog/94401 https:/ ...
- nginx反向代理和正向代理,优缺点
http://blog.csdn.net/lishaojun0115/article/details/53200629 nginx反向代理代理的是服务器,正向代理代理的是客户端, 反向代理是客户点发送 ...
- nginx反向代理与正向代理的区别
http://blog.csdn.net/m13666368773/article/details/8060481
- Nginx 虚拟主机及正向代理设置
添加虚拟主机 # vim /usr/local/nginx-1.9.0/conf/vhost/proxy.conf server { resolver 8.8.8.8; listen ; locat ...
随机推荐
- 三维计算机视觉 —— 中层次视觉 —— RCNN Family
RCNN是从图像中检测物体位置的方法,严格来讲不属于三维计算机视觉.但是这种方法却又非常非常重要,对三维物体的检测非常有启发,所以在这里做个总结. 1.RCNN - the original idea ...
- Java泛型 T.class的获取
public interface BaseDao<T> { T get(String id); } import java.lang.reflect.ParameterizedType; ...
- Solve Error: nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)" (??_U@YAPAXI@Z) already defined in libcpmt.lib(newaop.obj)
Error: nafxcw.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new[](unsigned int)&quo ...
- poj1279
板子题,求多边形内核面积. 话说jls的板子返回的是边,然后我就在冥思苦想怎么根据割边求面积啊.. 然后发现自己果然是个傻逼,求一下交点存起来就好了... //板子题到此为止了 #include &l ...
- Postman 接口测试
使用场景: 开发接口的时候需要快速调接口的时候 测试的时候需要非常方便的调用接口.通过不同的参数去测试接口的输出 这些接口调用是需要保存下来反复运行的 在运行过程中,如果有断言,检查点就更好了第三方 ...
- 异常HTTP Status 500 - Illegal access to constructor, is it public? java.lang.IllegalAccessException: Class com.opensymphony.xwork2.ObjectFactory can not access a member of class action.CoreAction with
Exception report message Illegal access to constructor, is it public? description The server encount ...
- ubuntu下设置mysql自启
- eclipse maven项目下载jar包失败解决办法
1.找到我们的本地maven仓库目录 我的是 H:\Java\maven\Repository 2.搜索出该目录下的*lastUpdated.properties文件并删除,如下图所示,可以通过模糊搜 ...
- [redis] <<The little Redis book>>的读书笔记
<<The Little Redis Book>> 请右键点击在新窗口打开,可按原始大小查看.
- LeetCode 520 Detect Capital 解题报告
题目要求 Given a word, you need to judge whether the usage of capitals in it is right or not. We define ...