Nginx均衡负载配置详解
由于公司最近平台的重构,为了提升系统横向扩展的能力。所以,在平台整个的体系架构中引入了nginx。
Nginx是一个自由、开源、高性能及轻量级的HTTP服务器及反转代理服务器,其性能与IMAP/POP3代理服务器相当。Nginx以其高性能、稳定、功能丰富、配置简单及占用系统资源少而著称。
Nginx 超越 Apache 的高性能和稳定性,使得国内使用 Nginx 作为 Web 服务器的网站也越来越多。
处理静态文件,索引文件以及自动索引;
反向代理加速(无缓存),简单的负载均衡和容错;
FastCGI,简单的负载均衡和容错;
模块化的结构。过滤器包括gzipping, byte ranges, chunked responses, 以及 SSI-filter 。在SSI过滤器中,到同一个 proxy 或者 FastCGI 的多个子请求并发处理;
SSL 和 TLS SNI 支持;
*优势
Nginx专为性能优化而开发,性能是其最重要的考量, 实现上非常注重效率 。它支持内核Poll模型,能经受高负载的考验, 有报告表明能支持高达 50,000 个并发连接数。
Nginx作为负载均衡服务器: Nginx 既可以在内部直接支持 Rails 和 PHP 程序对外进行服务, 也可以支持作为 HTTP代理服务器对外进行服务。
Nginx具有很高的稳定性。其它HTTP服务器,当遇到访问的峰值,或者有人恶意发起慢速连接时,也很可能会导致服务器物理内存耗尽频繁交换,失去响应,只能重启服务器。
例如当前apache一旦上到200个以上进程,web响应速度就明显非常缓慢了。而Nginx采取了分阶段资源分配技术,使得它的CPU与内存占用率非常低。
nginx官方表示保持10,000个没有活动的连接,它只占2.5M内存,就稳定性而言, nginx比lighthttpd更胜一筹。
Nginx支持热部署。它的启动特别容易, 并且几乎可以做到7*24不间断运行,即使运行数个月也不需要重新启动。你还能够在不间断服务的情况下,对软件版本进行进行升级。
Nginx采用C进行编写, 不论是系统资源开销还是CPU使用效率都比 Perlbal 要好很多。
关于nginx的安装,网络上有很多很好的文章。有下载源码手动编译安装的方式,还有就是yum命令安装的方式。前者可以选择你认为比较不错的版本进行安装部署,后者会安装官网提供的建议版本安装。
我写的这部分内容,是对我在部署nginx中遇到的问题进行一次说明。同时希望对一些nginx的初学者产生帮助。
#设定负载均衡的服务器列表
#均衡负载的策略有很多,有轮询方式、权重方式等
upstream admin_jiaoyu365_net{
server 10.8.25.71 max_fails=2 fail_timeout=30s;
server 10.8.26.34 max_fails=2 fail_timeout=30s;
}
server {
listen 80;
server_name admin.jiaoyu365.net;//需要进行请求分发的域名(host)
#charset koi8-r;
#access_log logs/host.access.log main;
location /{
proxy_store off;
proxy_redirect off;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $http_host;
proxy_pass http://admin_jiaoyu365_net; //注意要和上面的upstream 的名称一致
}
对于nginx的负载均衡配置主要就是要配置好upstream 以及server内容的配置。
在配置nginx的过程中还遇到了一个问题,就是关于默认虚拟主机的问题。
现象描述:
我在10.8.25.71,10.8.26.34 上分别部署站点www.365.com。我通过修改hosts修改域名的指向,全部指向到nginx的服务器。此时,虽然没有在nginx的配置文件中添加任何关于www.365.com的相关配置。依然,会出现nginx将www.365.com的请求进行了分发。这个问题困扰了我好长时间,一直搞不懂为什么。按照道理来讲我在nginx配置了请求转发的域名,才可以进行转发。
后来经过一番查询,了解到了nginx会有一个默认虚拟主机的问题。这个设置非常有用,比如别人通过ip或者未知域名访问你的网站的时候,你希望禁止显示任何有效内容,可以给他返回500.
目前国内很多机房都要求网站主关闭空主机头,防止未备案的域名指向过来造成麻烦。就可以这样设置:
server {
listen 80 default;
return 500;
}
也可以把这些流量收集起来,导入到自己的网站,只要做以下跳转设置就可以:
server {
listen 80 default;
rewrite ^(.*) http://www.jb51.net permanent; //指向你想要跳转的域名
}
浙公网安备 33010602011771号