NGINX 反向代理

我想通过上一章如何测试Nginx的高性能,想必大家对于NGINX作为一个高性能的web服务器毫无异议;但是NGINX的功能绝不局限于简单的web服务器,NGINX在互联网扮演的角色也并非只是作为web服务器,其实在实际的应用场景下,NGINX更多是用来做web的反向代理.

什么是反向代理:

首先,什么是反响代理服务器?  我认为维基百科已经有一个很好的定义了:

在计算机网络中,反向代理是代理服务器的一种。它根据客户端的请求,从后端的服务器上获取资源,然后再将这些资源返回给客户端。与前向代理不同,前向代理作为一个媒介将互联网上获取的资源返回给相关联的客户端,而反向代理是在服务器端作为代理使用,而不是客户端。

使用反响代理有什么好处:

并发

官方测试Nginx在24G内存的机器上,能够处理的并发请求连接数达到过200万。由于Nginx使用基于事件驱动的架构能够并发处理百万级别的TCP连接,高度模块化 的设计和自由的许可证使得扩展Nginx功能的第三方模块层出不穷,而且优秀的设计带来了极佳的稳定性,因此其作为Web服务器的反向代理被广泛应用到大流量的网站上,包括腾讯、新浪、网 易、淘宝等访问量巨大的网站。

可扩展性:反向代理可以从后端服务器池中添加删除服务器来响应负载; 

七层路由:拥有更完善的控制机制;如请求速率;连接限制;各种授权方案;

缓存:  虽说nginx的缓存是通过硬盘实现的;不过现在不是有什么固态硬盘么?

弹性:   加密和SSL加速 负载均衡  缓存静态内容  压缩  减速上传  安全  更多.....

 

Nginx作为反向代理的特点

  · 接收用户请求是异步的,即先将用户请求全部接收下来,再一次性发送后后端web服务器,极大的减轻后       端web服务器的压力;

· nginx代理和后端web服务器间无需长连接;

· 发送响应报文时,是边接收来自后端web服务器的数据,边发送给客户端的;

· 调度灵活。NGINX工作在网络协议栈的第七层,能够对HTTP应用请求进行解析和分流,支持比较复杂的正则规则,具有更优化的负载均衡效果。

· 网络依赖型低。NGINX对网络的依赖程度非常低,理论上讲,只要能够ping通就可以实施负载均衡,而且可以有效区分内网和外网流量。

· 支持服务器检测。NGINX能够根据应用服务器处理页面返回的状态码、超时信息等检测服务器是否出现故障,并及时返回错误的请求重新提交到其它节点上。

 

NGINX VS  LVS

  相对于LVS,NGINZ主要用于网络七层的调度,在灵活和有效性方面更具优势,同时它对服务器健康状态的检测也避免了用户访问过程中的连接断线。但是,网络七层信息处理的复杂度也使得NGINX在负载能力和稳定性方面与LVS相比有较大的差距。另外,它目前支持HTTP应用和EMALL应用,在应用场景上不如LVS丰富,而且也不具备现成的双机热备方案。总体而言,实际场景中可以考虑LVS和NGINX的结合使用,其中LVS部署在前端用于处理四层的负载均衡,当需要更细节的负载调度是再启用NGINX以优化调度效果

 

涉及的模块

·Proxy:标准的HTTP模块,实现反向代理功能

·Upstream:标准的HTTP模块,对后端web服务器调度做负载均衡功能;

·FastCGI:标准HTTP模块,将php动态请求代理至后端PHP服务器; 


proxy模块的指令:

proxy模块的可用配置指令非常多,它们分别用于定义proxy模块工作时的诸多属性,如连接超时时长、代理时使用http协议版本等。下面对常用的指令做一个简单说明。

proxy_connect_timeout:nginx将一个请求发送至upstream server之前等待的最大时长;

proxy_cookie_domain:将upstream server通过Set-Cookie首部设定的domain属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量;

proxy_cookie_path: 将upstream server通过Set-Cookie首部设定的path属性修改为指定的值,其值可以为一个字符串、正则表达式的模式或一个引用的变量;

proxy_hide_header:设定发送给客户端的报文中需要隐藏的首部;

proxy_pass:指定将请求代理至upstream server的URL路径;

proxy_set_header:将发送至upsream server的报文的某首部进行重写;

proxy_redirect:重写location并刷新从upstream server收到的报文的首部;

proxy_send_timeout:在连接断开之前两次发送至upstream server的写操作的最大间隔时长;

  如下面的一个示例:

  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  client_max_body_size 10m;
  client_body_buffer_size 128k;
  proxy_connect_timeout 30;
  proxy_send_timeout 15;
  proxy_read_timeout 15;

upstream模块:

与proxy模块结合使用的模块中,最常用的当属upstream模块。upstream模块可定义一个新的上下文,它包含了一组宝岛upstream服务器,这些服务器可能被赋予了不同的权重、不同的类型甚至可以基于维护等原因被标记为down。

upstream模块常用的指令有:

ip_hash:基于客户端IP地址完成请求的分发,它可以保证来自于同一个客户端的请求始终被转发至同一个upstream服务器;

keepalive:每个worker进程为发送到upstream服务器的连接所缓存的个数;

least_conn:最少连接调度算法;

server:定义一个upstream服务器的地址,还可包括一系列可选参数,如:

weight:权重;

max_fails:最大失败连接次数,失败连接的超时时长由fail_timeout指定;

fail_timeout:等待请求的目标服务器发送响应的时长;

backup:用于fallback的目的,所有服务均故障时才启动此服务器;

down:手动标记其不再处理任何请求;

例如:

upstream backend {
server www.magedu.com weight=5;
server www2.magedu.com:8080 max_fails=3 fail_timeout=30s;
}

upstream模块的负载均衡算法主要有三种,轮调(round-robin)、ip哈希(ip_hash)和最少连接(least_conn)三种。

此外,upstream模块也能为非http类的应用实现负载均衡,如下面的示例定义了nginx为memcached服务实现负载均衡之目的。

upstream memcachesrvs {
server 172.16.100.6:11211;
server 172.16.100.7:11211;
}

server {
location / {
set $memcached_key "$uri?$args";
memcached_pass memcachesrvs;
error_page 404 = @fallback;
}

location @fallback {
proxy_pass http://127.0.0.1:8080;
}

FastCGI模块常用命令:

fastcgi模块的常用指令:

        fastcgi_pass: 指定fastcgi服务监听端口、地址;也支持使用Unix sock;

        fastcgi_bind: 指定联系fpm服务时使用的地址;

        fastcgi_param: 定义传递给fpm服务器的参数;

        fastcgi_index: php的主页面文件;

        结果可以缓存,缓存空间使用fastcgi_cache_path定义,使用fastcgi_cache来调用;

        fastcgi_cache_path    fastcgi数据的缓存路径

        fastcgi_cache       fastcgi启用数据缓存

        fastcgi_cache_valid    fastcgi启用并让其生效

        fastcgi_connect_timeout: 连接fastcgi服务器的超时时长;

        fastcgi_send_timeout: 向fastcgi服务传输数据的超时时长 ;

转载于:https://blog.51cto.com/12832314/1979568

nginx反向代理、负载均衡、动态请求相关推荐

  1. Nginx反向代理 负载均衡sky

    Nginx服务部署 Nginx简介 Nginx (engine x) 是一个轻量级的.高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器.Nginx是由伊戈尔·赛索耶夫为俄罗 ...

  2. Nginx 反向代理 负载均衡 虚拟主机

    Nginx 反向代理 负载均衡 虚拟主机配置 通过本章你将学会利用Nginx配置多台虚拟主机,清楚代理服务器的作用,区分正向代理和反向代理的区别,搭建使用Nginx反向搭理和负载均衡,了解Nginx常 ...

  3. nginx 反向代理负载均衡 tomcat集群应用

    nginx 反向代理负载均衡 tomcat集群应用 环境介绍: 系统:centos5.8_64 192.168.0.201:nginx服务器 192.168.0.202:tomcat服务器 192.1 ...

  4. Nginx反向代理负载均衡虚拟主机动静分离UrlRewrite防盗链

    文章目录 1. Nginx简介 1.1 Nginx背景 1.2 Nginx的优点 1.3 Nginx的功能特性及常用功能 2.Nginx安装 2.1 下载上传解压 1.2 安装 3.nginx核心概念 ...

  5. Nginx 反向代理 负载均衡 动静分离 高可用 原理

    1.Nginx简介 1.1 概述 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理服务器,特点是占有内存少,并发能力强,能经受高负载的考验,有报告表明能 ...

  6. Nginx 反向代理+负载均衡

    一.Nginx 的引入背景 ● 公司产品出现瓶颈? 我们公司项目刚刚上线的时候,并发量小,用户使用的少,所以在低并发的情况下,一个jar包启动应用就够了,然后内部tomcat返回内容给用户. 用户少, ...

  7. Tomcat集群+Nginx反向代理+负载均衡

    Tomcat集群 所谓tomcat集群,就是向外提供并行服务的多台机器,任何一台服务器宕机,其他服务器还可以代替它向外提供服务,从而不影响用户访问 为了提高tomcat集群的高可用性,还需要实现ngi ...

  8. Nginx——反向代理 负载均衡(无理论,案例实操)

    1.开篇 有关Nginx的下载安装.相关理论内容,这里就不再多说了,详情可以参考我的这几篇文章: https://szh-forever-young.blog.csdn.net/article/det ...

  9. Nginx反向代理负载均衡的容器化部署

    首先,在home目录创建microservices目录,开启第一篇章. cd ~ && mkdir microservices && cd microservices ...

  10. Nginx反向代理负载均衡

    环境准备: 总共四台机器,两台装有Nginx的机器做负载均衡,两台机器装有Apache作为WEB服务器. 机器信息 hostname IP 说明 lb01 192.168.1.19 nginx主负载均 ...

最新文章

  1. UIBezierPath路径绘图
  2. nginx+uwsgi+django1.6 配置过程
  3. Android软键盘隐藏,遮挡EidtText解决办法
  4. QT窗体控件自适应大小
  5. AI公开课:18.05.05 施尧耘(阿里云量子技术CS)—清华AI第四讲之《人工智能与量子计算》Quantum课堂笔记——带你了解量子计算
  6. Hyper-V 替换 vmwp
  7. python3 os_Python3 标准库:os
  8. Android 播放SD卡视频 Demo
  9. 双十一京东PLUS会员 VS 阿里88VIP,谁的羊毛多?
  10. exchange2010 取消OWA内更改密码选项
  11. activiti7(三):Activiti7简介与HelloWorld
  12. Vue开发与调试工具vue-devtools
  13. 消息中间件MQ与RabbitMQ面试题
  14. bitbucket 代码备份
  15. Windows10下美化字体,达到类似mac的效果
  16. CodeForces 1045A. Last chance(线段树+网络流SAP)
  17. 国内首部《数字货币词典》在新莫干山会议上启动,巴比特智库担任主编单位...
  18. 【翻译】Visual Place Recognition_ A Survey视觉场景识别综述【四】
  19. 《寓言中的经济学》简明纪要 - Part 1
  20. php注册 用cdn,国外免费CDN加速及防护:CloudFlare注册使用教程

热门文章

  1. Solaris 10 x86 上折腾Mono
  2. MySQL Workbench建表时 PK NN UQ BIN UN ZF AI Default 的含义
  3. 情感分析——深入snownlp原理和实践
  4. 产品经理刷题2020.09.20
  5. Spring框架介绍及使用(转载)
  6. Android通过百度地图API用Service和Alarm在后台定时获取地理位置信息
  7. JDK动态代理小例子
  8. python staticmethod and classmethod方法
  9. C++中的static关键字的总结
  10. nginx同IP、同端口、不同域名时的转发