`
iegyiy
  • 浏览: 20562 次
社区版块
存档分类
最新评论

高性能Http服务器nginx

阅读更多
Nginx介绍:

Nginx是一款采用Linux 2.6内核epoll新机制开发的Web服务器软件,能极大地提高Web访问特别是小文件访问的I/O性能,是c10k问题的一个解决方案。在高并发连接的情况下,Nginx是Apache服务器不错的替代品。Nginx同时也可以作为7层负载均衡服务器来使用。

高并发连接:官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数。
内存消耗少:在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)。
配置文件非常简单:风格跟程序一样通俗易懂。
成本低廉:Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币。
支持Rewrite重写规则:能够根据域名、URL的不同,将 HTTP 请求分到不同的后端服务器群组。
内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
稳定性高:用于反向代理,宕机的概率微乎其微。
安装Nginx:

http://blog.s135.com/nginx_php_v5/

rewrite设置:  

        if ($http_user_agent ~ MSIE) {
                rewrite ^/star(.*)$ http://www.xxx.com/star/$1 break;
        }
反向代理设置:

location /star {
                proxy_pass http://www.xxx.com/star;
        }
负载均衡设置:

#设定负载均衡的服务器列表
        upstream mysvr {
                #weigth参数表示权值,权值越高被分配到的几率越大
                #本机上的Squid开启3128端口
                server 192.168.8.1:3128 weight=5;
                server 192.168.8.2:80   weight=1;
                server 192.168.8.3:80   weight=6;
        }
#对 "/" 启用负载均衡
        location / {
                        proxy_pass      http://mysvr;

                        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   90;
                        proxy_send_timeout      90;
                        proxy_read_timeout      90;
                        proxy_buffer_size       4k;
                        proxy_buffers           4 32k;
                        proxy_busy_buffers_size 64k;
                        proxy_temp_file_write_size 64k;
       }
另参考:

upstream bakend{#定义负载均衡设备的Ip及设备状态
ip_hash;
    server 127.0.0.1:9090 down;
    server 127.0.0.1:8080 weight=2;
    server 127.0.0.1:6060;
    server 127.0.0.1:7070 backup;
}
在需要使用负载均衡的server中增加
proxy_pass http://bakend/;
每个设备的状态设置为:
1.down 表示单前的server暂时不参与负载
2.weight 默认为1.weight越大,负载的权重就越大。
3.max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
4.fail_timeout:max_fails次失败后,暂停的时间。
5.backup: 其它所有的非backup机器down或者忙的时候,请求backup机器。所以这台机器压力会最轻。
URL hash设置:

1、轮询(默认)
每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight
指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。
例如:
    upstream tomcats {
         server 10.1.1.107:88 weight=10;
         server 10.1.1.132:80 weight=10;
    }
3、ip_hash
每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
例如:
    upstream tomcats {
         ip_hash;
         server 10.1.1.107:88;
         server 10.1.1.132:80;
    }

4、fair(第三方)
按后端服务器的响应时间来分配请求,响应时间短的优先分配。
5、url_hash(第三方)
按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。
nginx 开启SSI:

nginx 也有内置的SSI 模块 ngx_http_ssi_module
配置文件开启

ssi on;
ssi_silent_errors on;
ssi_types text/shtml;

这样就可以支持shtml了
利用proxy_store实现高效的静态文件缓存服务器:

location /star {
                proxy_pass http://www.xxx.com/star;

                proxy_store on;
                proxy_temp_path /opt/cache;
                proxy_set_header Host $host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header Via "s9/nginx";
                proxy_store_access user:rw group:rw all:rw;
                if ( !-e $store_file ) {
                        proxy_pass http://www.xxx.com;
                }
        }
注意需要一个定时删除缓存的脚本:

find /opt/Cache/ -type -atime 30 |xargs rm -rf {}

使用Nginx的proxy_cache缓存功能取代Squid

网上已有介绍使用Nginx的proxy_cache缓存功能取代Squid的文章,如:http://blog.s135.com/nginx_cache/

查看nginx的状态:

location /nginx_status {
    stub_status on;
    access_log   off;
    allow SOME.IP.ADD.RESS;
    deny all;
}
防盗链设置:

1 简单的通过referer判断
location ~ .*\.(gif|jpg|jpeg|png|bmp|wma|mp3|swf)$ {
      valid_referers none blocked server_names *.163.com 163.com baidu.com;
      if ($invalid_referer) {return 403;}
    expires      30d;
}
2 Nginx_HttpAccessKey_Module 插件
下载 http://wiki.nginx.org/images/5/51/Nginx-accesskey-2.0.3.tar.gz
这个需要安装额外的模块,下载模块源码,然后按照说明文档,将下载来的源码中"$HTTP_ACCESSKEY_MODULE" 替换成 "ngx_http_accesskey_module",再
1. ./configure --add-module=path/to/nginx-accesskey
完了以后再重新编译一次nginx,然后就可以在配置文件中使了。
location /download {
  accesskey             on;
  accesskey_hashmethod  md5;
  accesskey_arg         "key";
  accesskey_signature   "mypass$remote_addr";
}
这样一个下载的文件就需要 http://example.com/download/file.zip?key=09093abeac094 这样的形式进行下载
其中 key的值为 mypass和下载客户端ip 进行md5运算获得。比如在 php 中可以向如下方式输出针对客户ip的下载链接地址
1. <?
2. $ipkeyvalue = md5("mypass".$_SERVER['REMOTE_ADDR']);
3. $out_keyfile_link="<a href=http://example.com/download/testfile.rar?key=".$ipkeyvalue.">防盗链文件下载</a><br />";
4. echo $out_keyfile_link;
5. ?>
这样当一个用户将访问地址拷贝给别人时,因为访问ip不同,就造成 md5("mypass".ipaddr) 值不同,达到防盗链目的。

注意:这里accesskey_signature后面的mypass是干扰码,你可以改为自己需要的密码。
nginx限速处理:

限速使用 limit_zone, limit_conn 以及 limit_rate 进行配置
首先在 http 段配置一个 limit_zone,然后在需要的地方使用 limit_conn 和 limit_rate 进行限速设置,如下一个简单的例子
http {
  limit_zone   one  $binary_remote_addr  10m;
  server {
    location /files/ {
      limit_conn   one  1;
      limit_rate 20k;
    }
  }
}
说明:
limit_zone,是针对每个IP定义一个存储session状态的容器。这个示例中定义了一个名叫one的10m大小的容器,这个名字会在后面的limit_conn中使用。
limit_conn one 1;
限制在one中记录状态的每个IP只能发起一个并发连接。
limit_rate 20k;
对每个连接限速20k. 注意,这里是对连接限速,而不是对IP限速。如果一个IP允许三个并发连接,那么这个IP就是限速为limit_rate×3,在设置的时候要根据自己的需要做设置调整,要不然会达不到自己希望的目的。
分享到:
评论

相关推荐

    实战Nginx高性能Web服务器

    1、高性能Web服务器Nginx的配置与部署研究(1)Nginx简介及入门示例 内容:概述Nginx的背景知识和简单的入门实例。 2、高性能Web服务器Nginx的配置与部署研究(2)Nginx入门级配置与部署及“Hello World” 内容:...

    Nginx高性能Web服务器详解

    Nginx是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP代理服务器。 Nginx是一款轻量级的Web服务器/反向代理服务器以及电子邮件代理服务器,并在一个BSD-like协议下发行。由俄罗斯的程序设计师lgor ...

    Nginx高性能Web服务器实战教程

    Nginx是目前备受关注的一个高性能HTTP和反向代理服务器,具有简单、灵活的配置和极高的执行效率。本书面向Linux运维方向的用户或具备某一类编程语言c、PHP 、Java基础的读者,旨在使其快速掌握Nginx的配置与应用,...

    nginx 高性能的HTTP服务器 linux版

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器

    实战Nginx:取代Apache的高性能Web服务器 中文版

    nginx是俄罗斯人igor sysoev编写的一款高性能的http和反向代理服务器。nginx选择了epoll和kqueue作为网络i/o模型,在高连接并发的情况下,内存、cpu等系统资源消耗非常低,运行稳定。  本书系统地介绍了nginx与php...

    实战Nginx.取代Apache的高性能Web服务器

    取代Apache的高性能Web服务器 电子工业出版社 319页 第1部分 基础篇 第1章 Nginx简介 1.1 常用的Web服务器简介 1.2 Nginx简介 1.3 选择Nginx的理由 1.4 Nginx与Apache、Lighttpd的综合对比 第2章 Nginx服务器...

    nginx 高性能的HTTP服务器 windows版

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器

    centos 6.5下安装、配置高性能服务器Nginx

    centos 6.5下安装、配置高性能服务器Nginx!

    反向代理服务器 Nginx

    Nginx (engine x) 是一个轻量级的、高性能的、基于 Http 的、反向代理服务器,静态 web 服务器。 Nginx 最初是由俄罗斯人 Igor Sysoev(伊戈尔·赛索耶夫)使用 C 语言为俄罗斯访问量第 二的 Rambler.ru 站点开发的...

    实战Nginx:取代Apache的高性能Web服务器

    实战Nginx:取代Apache的高性能Web服务器,这是一本很不错的书。能够帮助大家搭建一个高性能的web服务器 第1章 Nginx简介.pdf 第2章 Nginx服务器的安装与配置.pdf 第3章 Nginx的基本配置与优化.pdf 第4章 Nginx与PHP...

    实战Nginx:取代Apache的高性能Web服务器 第一章

    张宴《实战Nginx:取代Apache的高性能Web服务器》pdf电子版下载,此资料网友共享,请购买作者正版书籍. 目录介绍: 第1部分 基础篇 第1章 Nginx简介 1.1 常用的Web服务器简介 1.2 Nginx简介 1.3 选择Nginx的理由 ...

    Nginx API文档 Nginx是一个高性能的HTTP和反向代理web服务器

    Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0...

    搭建nginx点播服务器

    Nginx是一款高性能的开源Web服务器,同时也可以用作点播(On-Demand)媒体服务器。点播服务器通常用于提供音频和视频文件的分发,以支持用户随时随地访问这些媒体内容。以下是Nginx作为点播服务器的一些特点和功能:...

    Nginx:取代apache的高性能服务器

    Nginx (“engine x”) 是俄罗斯人Igor Sysoev编写的一款高性能HTTP 和反向代理服务器。Nginx选择了epoll和kqueue作为网络I/O模型,在高连接并发的情况下,Nginx是Apache服务器不错的替代品,它能够支持高达50 000个...

    nginx-0.8.33.zip一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器

    1. Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器 。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。...

    web服务器nginx+部署前端vue项目

    Nginx 是高性能的 HTTP 和反向代理的web服务器,处理高并发能力是十分强大的,能经受高负 载的考验,有报告表明能支持高达 50,000 个并发连接数。 其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同...

    nginx-1.0.4 服务器软件下载

    Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4...

    轻量级HTTP服务器Nginx

    《高性能Linux服务器构建实战》第一章电子版本下载

Global site tag (gtag.js) - Google Analytics