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

高性能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,在设置的时候要根据自己的需要做设置调整,要不然会达不到自己希望的目的。
分享到:
评论

相关推荐

    高性能Web服务器Nginx及相关新技术的应用实践

    Nginx(发音为 "engine x")是由俄罗斯开发者Igor Sysoev创建的一款高性能HTTP和反向代理服务器。它以其高效能、低内存消耗和稳定可靠性而闻名。自2004年发布以来,Nginx已经在包括俄罗斯最大门户网站Rambler Media...

    nginx高性能web服务器.pdf

    《Nginx高性能Web服务器》是一本深入探讨Nginx技术的权威著作,它涵盖了Nginx的基础知识、配置技巧以及优化策略。Nginx,以其高性能、轻量级和反向代理能力著称,是现代互联网架构中的关键组件。在本资料中,我们将...

    Nginx高性能Web服务器详解(完整版)pdf下载

    Nginx是一款高性能的Web服务器,它以其反向代理、负载均衡、静态文件处理和高效非阻塞I/O模型而闻名。Nginx的设计理念是轻量级、高并发,因此在处理高流量网站时表现出色。以下是Nginx的一些核心知识点: 1. **模块...

    Nginx高性能Web服务器实战教程+高清+完整书签

    《Nginx高性能Web服务器实战教程》是一本深入讲解如何利用Nginx构建高效稳定Web服务的书籍。Nginx以其高性能、轻量级、反向代理和负载均衡等特性,已经成为许多企业和开发者首选的Web服务器。这本书涵盖了从基础配置...

    淘宝Tengine 易运维的高性能Nginx服务器

    ### 淘宝Tengine:易运维的高性能Nginx服务器 #### Tengine的由来与背景 Tengine是阿里巴巴集团旗下的淘宝网针对Nginx的一些局限性进行改进后所开发的一款高性能Web服务器。Nginx自推出以来,以其出色的性能、较低...

    Nginx高性能Web服务器详解.pdf

    《Nginx高性能Web服务器详解》是一本深入探讨Nginx技术的专业书籍,由博文视点出版,电子工业出版社发行。Nginx是一款广泛应用的开源Web服务器,以其高性能、高并发处理能力以及轻量级的特性著称。本书旨在帮助读者...

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

    Nginx是一款高性能的HTTP和反向代理服务器软件,由俄罗斯程序员Igor Sysoev发起开发。它的设计理念是高并发、高性能,且资源消耗极低。Nginx的这些特点使得它非常适合用于高负载的环境,因此越来越多的网站开始使用...

    Nginx高性能Web服务器详解

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

    实战Nginx:取代Apache的高性能Web服务器+张宴.扫描版

    1. **Nginx介绍**:Nginx是一个开源的HTTP服务器和反向代理服务器,以其高性能、轻量级和稳定性著称。它采用事件驱动的非阻塞I/O模型,能够高效地处理大量并发连接,特别适合高负载的网站和应用。 2. **Nginx安装与...

    使用高性能Web服务器Nginx实现开源负载均衡.doc

    ### 使用高性能Web服务器Nginx实现开源负载均衡 #### Nginx及负载均衡介绍 ##### 1. 高性能Web服务器Nginx Nginx(发音为“Engine X”)是一款由俄罗斯开发者Igor Sysoev开发的高性能Web服务器与反向代理服务器,...

    nginx高性能web服务器详解

    **Nginx高性能Web服务器详解** Nginx是一款开源、高性能、轻量级的Web服务器/反向代理服务器,广泛应用于互联网和企业级应用中。它的设计目标是高并发、低内存占用,使得Nginx在处理静态内容和作为反向代理时表现...

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

    《Nginx高性能Web服务器实战教程》是一本深入解析Nginx服务器的实用指南,旨在帮助读者掌握如何利用Nginx构建高效、稳定的Web服务环境。Nginx以其反向代理、负载均衡、静态文件处理等功能,以及轻量级、高性能的特性...

Global site tag (gtag.js) - Google Analytics