Nginx (五)


一、ngx_http_proxy_module
1、 proxy_pass URL;
2、 proxy_set_header field value;
3、 proxy_cache_path;  代理缓存模块
4、 proxy_cache zone | off;
5、 proxy_cache_key string;
6、 proxy_cache_valid [code ...] time;
7、 proxy_cache_use_stale;
8、 proxy_cache_methods GE
9、 proxy_hide_header field;
10、 proxy_connect_timeout time;
11、 proxy_send_timeout time;
12、 proxy_read_timeout time;

http反向代理

一、ngx_http_proxy_module

The ngx_http_proxy_module module allows passing requests to another
server.
1、 proxy_pass URL;
Context:location, if in location, limit_except
注意: proxy_pass后面的路径不带uri时,其会将location的uri传递给后端主机
server {
...
server_name HOSTNAME;
location /uri/ {
proxy_pass http://host[:port]; 最后没有/
}
...
}
上面示例: http://HOSTNAME/uri --> http://host/uri
http://host[:port]/ 意味着: http://HOSTNAME/uri --> http://host/

proxy_pass后面的路径是一个uri时,其会将location的uri替换为proxy_pass的uri
server {
...
server_name HOSTNAME;
location /uri/ {
proxy_pass http://host/new_uri/;
}
...
}
http://HOSTNAME/uri/ --> http://host/new_uri/
如果location定义其uri时使用了正则表达式的模式,则proxy_pass之后必须不能使用uri; 用户请求时传递的uri将直接附加代理到的服务的之后
server {
...
server_name HOSTNAME;
location ~|~* /uri/ {
proxy_pass http://host; 不能加/
}
...
}
http://HOSTNAME/uri/ --> http://host/uri/
不加斜线后面有*.jpg之类的都能显示出来,只要用正则表达式就不能用uri
负载机:107 centos7
后端机器:106 centos6
后端机器:108 centos7
实验目的:
访问107机器www.a.com/.imgs文件转发到108机器
访问107机器www.a.com/.html文件转发到106机器
后端机启动http服务

106
cd /var/www/html
cat index.html 
Welcome to centos6 106

108
cd /var/www/html
cat index.html 
centos7 108
负载机107
location 代理功能必须放在location if语句块里面,只要访问根数据都会调度到某个服务器上面去调度到106机器上面
106机器查看日志显示负载机107访问
为了测试看的更清楚些,创建a.html,在107负载机上面更容易查看
107负载机查看日志,访问网页看到的是106后端机里面的内容
进入正题
访问107机器www.a.com/.imags文件转发到108机器
访问107机器www.a.com/.html文件转发到106机器
测试跳转到108机器
108机器
访问images目录107负载机做反向代理到108机器上
107测试跳转到106机器
106机器
访问107机器下的a.html,b.html
107机器
访问图片后缀的更合理些108图片后缀(静态),106php后缀(动态)
106机器安装php模块
yum install php
cd /var/www/html
vim a.php
service httpd restart
108机器
图片存放到html目录下面
图片比较小
实现了代理动静分离
server_name HOSTNAME;
location /uri/ {
proxy_pass http://host[:port]; 最后没有/
}
最后ip后面加斜线做测试 ,前面测试都没有加斜线
加斜线效果就不一样了,相当于置换 images=/var/www/html/,相当于看到的是/var/www/html/下的aa.jpg
没有斜线代表补加uri
2、 proxy_set_header field value;
设定发往后端主机的请求报文的请求首部的值

remote_addr代表客户端的IP,但它的值不是由客户端提供的,而是服务端根据客户端的ip指定的,当
你的浏览器访问某个网站时,假设中间没有任何代理,那么网站的web服务器(Nginx,Apache等)
就会把remote_addr设为你的机器IP,如果你用了某个代理,那么你的浏览器会先访问这个代理,然后
再由这个代理转发到网站,这样web服务器就会把remote_addr设为这台代理机器的IP。

正如上面所述,当你使用了代理时,web服务器就不知道你的真实IP了,为了避免这个情况,代理
服务器通常会增加一个叫做x_forwarded_for的头信息,把连接它的客户端IP(即你的上网机器IP)
加到这个头信息里,这样就能保证网站的web服务器能获取到真实IP

Context: http, server, location
proxy_set_header X-Real-IP $remote_addr;     X-Real-IP首部名
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;   可以看到多层首部代理地址
标准格式如下:
X-Forwarded-For: client1, proxy1, proxy2

分析类型
在proxy里面添加新的字段,客户端本身不带字段,人为插上首部,服务器就能收到首部
把后端首部信息修改,把监控的对应日志首部信息加上
vim vhosts.conf 添加首部信息
108机器要在http配置文件中设置头部信息
vim /etc/httpd/conf/httpd.conf 在客户端显示首部 ,首部信息必须加 " i "
引用格式
重启httpd服务
访问刷新代理机器地址,查看日志信息得到真实ip
强制刷新 -f
 vip公网地址,后端是私网地址,
后端rsserv1
后端rsserv2
客户端把请求发送给vip

公网客户端访问107代理机器公网ip
107机器两个网卡  一个公网,一个内网
客户端访问107公网会转发到106机器
客户端访问107看到的信息实际上是从106转发过去的,
106测试
108机器测试性能
ab -c 100 -n 2000 http://172.18.0.107/m.html
107机器
代理缓存模块
3、 proxy_cache_path; 
定义可用于proxy功能的缓存; Context:http
proxy_cache_path path [levels=levels] [use_temp_path=on|off]
keys_zone=name:size [inactive=time] [max_size=size]
[manager_files=number] [manager_sleep=time]
[manager_threshold=time] [loader_files=number] [loader_sleep=time]
[loader_threshold=time] [purger=on|off] [purger_files=number]
[purger_sleep=time] [purger_threshold=time];

http代码段定义path路径  levels 设置缓存文件目录层次;levels=1:2:2 表示三级目录
keys_zone 设置缓存名字和共享内存大小
inactive 在指定时间内没人访问则被删除  过期时间
max_size 最大缓存空间,如果缓存空间满,默认覆盖掉缓存时间最长的资源。
vim /etc/nginx/nginx.conf 设置pass路径
调用keys_zone 设置缓存名字
vim /etc/httd/conf/vhost.conf
nginx -t
nginx -s reload
访问 107  curl http://172.18.0.107/m.html
107机器 
-文件夹名字叫pcache 里面还没有缓存,访问一次里面就有缓存
在有缓存的情况下再去测试加速访问很明显 ab -c 100 -n 2000 http://172.18.0.107/m.html
4、 proxy_cache zone | off; 默认off
指明调用的缓存,或关闭缓存机制; Context:http,
server, location

5、 proxy_cache_key string;
缓存中用于“键”的内容
默认值: proxy_cache_key $scheme$proxy_host$request_uri;
6、 proxy_cache_valid [code ...] time;
定义对特定响应码的响应内容的缓存时长
定义在http{...}中
示例:
proxy_cache_valid 200 302 10m;
proxy_cache_valid 404 1m;
示例:
在http配置定义缓存信息
proxy_cache_path /var/cache/nginx/proxy_cache
levels=1:1:1 keys_zone=proxycache:20m
inactive=120s max_size=1g;
调用缓存功能,需要定义在相应的配置段,如server{...};
proxy_cache proxycache;
proxy_cache_key $request_uri;   请求的uri
proxy_cache_valid 200 302 301 1h;      响应码缓存    时间
proxy_cache_valid any 1m;   其他内容响应1分钟

7、 proxy_cache_use_stale;
proxy_cache_use_stale error | timeout |
invalid_header | updating | http_500 | http_502 |
http_503 | http_504 | http_403 | http_404 | off ...
在被代理的后端服务器出现哪种情况下,可以真接使用过期的缓存响应客户端

 8、 proxy_cache_methods GET | HEAD | POST ...;
对哪些客户端请求方法对应的响应进行缓存, GET和HEAD方法总是被缓存
 9、 proxy_hide_header field;
By default, nginx does not pass the header fields
“Date”, “Server”, “X-Pad”, and “X-Accel-...” from the
response of a proxied server to a client. 用于隐藏后端服务器特定的响应首部

10、 proxy_connect_timeout time;
定义与后端服务器建立连接的超时时长,如超时会出现502错误,默认为60s,一般不建议超出75s,

11、 proxy_send_timeout time;
把请求发送给后端服务器的超时时长;默认为60s

 12、 proxy_read_timeout time;
等待后端服务器发送响应报文的超时时长, 默认为60s

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,580评论 18 139
  • 上一篇《WEB请求处理一:浏览器请求发起处理》,我们讲述了浏览器端请求发起过程,通过DNS域名解析服务器IP,并建...
    七寸知架构阅读 80,910评论 21 356
  • 1.Linux下如何用命令查看实时日志(完整命令) tail -f 路径.log查看前多少行 tai-200f 路...
    qianyewhy阅读 2,239评论 0 11
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,119评论 29 470
  • 有人说这个世界本是脏的,若要坚持干净,就只能被排斥
    月光早茶阅读 214评论 1 0