Nginx反向代理以及性能优化
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
nginx实现反向代理
补充3
补充4
在location中如果有重定向的话,那么就用重定向 后的uri替换掉代理节点中的uri location / {
rewrite /(.*)$ /index.php?name=$1 break; proxy_pass http://www.baidu.com:80/img; }
proxy_pass http://www.jdb.com/;
<<< 错误写法
proxy_pass http://www.jdb.com/img; <<< 错误写法
}
此时,如果请求的url是 http://www.baidu.com/book/stu/a.php ,
就会代理成 http://www.jdb.com/book/stu/a.php
02
Nginx 实现页面缓存
N g i点n x击实添现加页标面题缓文存字
Nginx缓存的基本思路: 利用请求的局部性原理,将请求过的内容在本地建Fra Baidu bibliotek一 个副本,下次访问时不再连接到后端服务器,直接响应 本地内容 Nginx服务器启动后,会对本地磁盘上的缓存文件进行扫 描,在内存中建立缓存索引,并有专门的进程对缓存文 件进行过期判断、更新等进行管理
nginx的配置中,可以使用变量 内置变量:nginx自带的 自定义变量:用户定义的,定义方法: set 变量名 变量值
nginx实现反向代理
补充1
补充2
location /admin { proxy_pass http://www.ydy.com/; proxy_pass http://www.ydy.com;
nginx学习分享
CONTENTS
1
Nginx实现反向代理
2
Nginx实现页面缓存
3
Nginx实现负载均衡
01
Nginx 做反向代理
正向代理与反向代理
现实生活中的例子
1、正向代理:访问google.com
如上图,因为目前google已被和谐,我们需要vpn才能科学访问google.com vpn对于“我们”来说,是可以感知到的(我们连接vpn),vpn对于”google服务器”来说,是不可感 知的(google只知道有http请求过来)。 对于人来说可以感知到,但服务器感知不到的服务器,我们叫他正向代理服务器。
正向代理与反向代理
现实生活中的例子
2、反向代理:通过反向代理实现负载均衡
如上图,我们访问baidu.com的时候,百度有一个代理服务器, 通过这个代理服务器,可以做负载均衡,路由到不同的server。
总结
说白了:“正向”、 “反向”是相对于人 的感知来说的。人能 感受到的代理就是正 向代理,人感受不到 的代理就是反向代理
实现反向代理的模块
指令语法
模块 :ngx_http_proxy_module 指令: proxy_pass:指定上游服务器的ip和端口
proxy_set_header:添加一个新的首部
演示配置
反向代理的例子 location / {
proxy_pass http://10.220.5.180; proxy_set_header X-Real-IP $remote_addr proxy_set_header Host $proxy_host; }
Syntax: proxy_pass URL; Default: — Context: location, if in location, limit_except 例子:proxy_pass http://10.220.5.196:8000;
Syntax: proxy_set_header field value; Default: proxy_set_header Host $proxy_host; Context: http, server, location
缓存格式:key-value格式 key储存在内存中:就是将请求的uri value储存在磁盘上:就是缓存的数据
需要注意的是Nginx缓存需要结合反向代理一起才能实现
问题
对于缓存,我们大概会有以下问题:
(1)缓存文件放在哪儿? (2)如何指定哪些请求被缓存? (3)缓存的有效期是多久? (4)过了有效期的数据是否还能使用? (5)对于某些请求,是否可以不走缓存?
此代理服务器,对于“我们”来说是不可感知的(我们只能感知到访问的是百度的服务器,不知道中间还 有代理服务器来做负载均衡)。
对于人来说不可感知,但对于服务器来说是可以感知的,我们叫他反向代理服务器。
nginx实现反向代理
nginx是高度模块化的,各个功能都封装在模块中,而各个模块的初始化则是根据配置文件来进行的。
} 请求的url 是http://www.jdb.com/admin/a.html 如果代理方式是 proxy_pass http://www.ydy.com/; 那么去www.ydy.com的根目录下找a.html
如果代理方式是 proxy_pass http://www.ydy.com; 那么去www.zxhk.com的跟目录下的admin找a.html
如果location中使用了模式匹配(正则),那么,location中的url会
直接补充到代理节点的后面,此时,上游服务器的的后面不能有任何
内容,包括 /
location ~ \.php$ {
proxy_pass http://www.jdb.com;
<<< 正确写法
proxy_pass http://www.jdb.com:80; <<< 正确写法
此时,如果请求的url是 http://www.jdb.com/bajie , 就会代理成 www.baidu.com/index.php?name=bajie
rewrite语法:rewrite regex(表达式) replacement(替换项) flag(标志位)。
标志位: break: 本条规则匹配完成后,终止匹配,不再匹配后面的规则 last: 相当于apache里面的[L]标记,表示rewrite,完成重写指 令,之后搜索相应的URI或location permanent: 返回301永久重定向,浏览器地址会显示跳转后的URL 地址 redirect: 返回302临时重定向,浏览器地址会显示跳转后的URL 地址