Nginx作为web前端缓存和反向代理

Nginx简介

                   Nginx是一个高性能的HTTP服务器和反向代理服务器,也是IMAP/POP3/SMTP 代理服务器。

                  作为HTTP服务器的基础功能:   1)处理静态文件,索引文件以及自动索引

                                                                           2)反向代理加速(无缓存),简单的负载均衡和容错

                                                                           3)FastCGI,简单的负载均衡和容错

                                                                           4)模块化的结构

                                                                           5)SSL 和 TLS SNI 支持

                   主要结构和扩展:   1)一个主进程和多个工作进程,工作进程运行于非特权用户

                                                     2)kqueue (FreeBSD4.1+), epoll (Linux 2.6+), rt signals (Linux 2.2.19+), /dev/poll (Solaris 711/99+), select, 以及poll 支持

                                                     3)kqueue支持的不同功能包括 EV_CLEAR, EV_DISABLE (临时禁止事件), NOTE_LOWAT,EV_EOF, 有效数据的数目,错误代码

                                                     4)sendfile (FreeBSD 3.1+),sendfile (Linux 2.2+), sendfile64 (Linux 2.4.21+), 和 sendfilev (Solaris 8 7/01+) 支持

                                                     5)输入过滤(FreeBSD 4.1+) 以及 TCP_DEFER_ACCEPT (Linux 2.4+) 支持

                                                     6)10,000 非活动的 HTTP keep-alive 连接仅需要 2.5M 内存

                                                     7)最小化的数据拷贝操作

                    选择nginx的理由:   1) 处理高连接并发效果很好。官方测试可以处理 50,000 个并发连接数(主要采用了epool和kqueue网络I/O模型)

                                                        2) 内存消耗少

                                                        3) 可作为负载均衡服务器

                                                        4) 配置简单,稳定性较高

                    反向代理(reverse proxy)以代理服务器来接受internet上的连接请求,将请求转发内部网络上的服务器,并将服务器上的结果返回给internet上请求连接的客户端,代理服务器表现得就像一个服务器。

                    普通的代理服务器不支持外部网络对内部网络的访问。当一个代理服务器(没有真实的数据)能够代理外部网络访问内部,成为反向代理服务。

配置安装

                            安装环境:     ubuntu-12.04

                            预先安装一些模块需要的第三方库:        

                                                                                          apt-get install openssl

                                                                                          apt-get install libssl0.9.8

                                                                                          apt-get install libssl-dev

                                                                                          apt-get install libpcre3 libpcre3-dev

                                                                                          (gzip->zlib库   rewrite->pcre库  ssl->openssl库)

                            安装:tar zxvf nginx-1.0.2.tar.gz

                                       cd nginx-1.0.2

                                       ./configure--user=www --group=www --prefix=/usr/local/nginx --add-module=../ngx_cache_purge-1.2(第三方模块需要预先下载解压,用来除去指定的url缓存) --with-http_stub_status_module --with-http_ssl_module 

                                        make

                                        make install(在root权限下)

配置文件(代理tomcat服务器):

user www  www;//nginx的用户组和group组

worker_processes 2;#进程数,一般为cpu的2倍

error_log  /usr/local/nginx/logs/nginx_jsp_error.logcrit;#错误日志文件

pid  /usr/local/nginx/logs/nginx.pid;

worker_rlimit_nofile 65535;#打开文件上限

events {

   use epoll;

   worker_connections 65535;#每个进程处理最大连接数

}

http {

   include mime.types;

   default_type application/octet-stream;# 浏览器请求的文件媒体类型

   charset UTF_8;

   server_names_hash_bucket_size 128;# 指定服务器名称哈希表的桶大小。默认值根据CPU缓存

   client_header_buffer_size     32k;#设置客户端请求的header头缓冲区大小。(大多数1KB够了)

   large_client_header_buffers   432k;# 设置客户端请求的Header头缓冲区大小,默认4KB

   client_max_body_size          10m;#允许接收客户端请求内容的最大值,即客户端请求Header头信息中设置的Content-Length最大值

   sendfile    on;

   tcp_nopush  on;

   keepalive_timeout    65;

   tcp_nodelay on;# 允许或禁止使用套接字选项TCP_NODELAY,仅适用keep-alive

   client_body_buffer_size     512k;# 客户端请求内容的缓冲区大小(默认网页大小的2倍) 请求内容大于缓冲区,整个请求内容或部分请求内容被写入临时文件

   proxy_connect_timeout       600;#与后端服务器连接超时时间

   proxy_read_timeout          600;# 后端被代理服务器读取应答内容的超时时间

   proxy_send_timeout          600;# 代理服务器转发请求的超时时间

   proxy_buffer_size           16k;# 从被代理服务器获取第一部分应答信息的缓冲区大小,保存用户的头信息供nginx进行规则处理

   proxy_buffers               4 64k;#设置从被代理服务器读取应答信息的缓冲区数目和大小

   proxy_busy_buffers_size     128k;#系统忙的时候可以申请更大缓冲区,一般*2

   proxy_temp_file_write_size  128k;#写入proxy_temp_path临时目录数据大小。防止一个工作进程阻塞太久

   gzip on;#压缩

   gzip_min_length 1k;

   gzip_buffers    4 16k;

   gzip_http_version 1.1;

   gzip_comp_level2;

   gzip_proxied     expired no-cache no-store private auth;

   gzip_types       text/plainapplication/x-javascript text/css application/xml;

   gzip_vary        on;

   proxy_temp_path /data0/proxy_temp_path;# 指定一个本地目录缓冲较大代理请求

   proxy_cache_path /data0/proxy_cache_path levels=1:2keys_zone=cache_one:200m inactive=1d max_size=3g;# 设置缓存文件存放位置

   upstream tomcat_server {#代理tomcat服务器

            server 127.0.0.1:8080;

    }

   server {

         listen 80;

         server_name  localhost;

         index  index.html index.htmindex.jsp default.jsp index.do default.do;

         root  /data0/www;//网页存放目录

         if (-d $request_filename) {

              rewrite ^/(.*)([^/])$http://$host/$1$2/ permanent;

         }

         location  ~  ^/NginxStatus/ {//监测连接处理

                stub_status on;

                access_log  off;#不写入日志

         }

          location  ~  .*\.(jsp|jspx|do)?$ {#转发动态脚本到后端服务器

                 proxy_set_header Host $host;

                 proxy_set_headerX-Forwarded-For $remote_addr;

                 proxy_passhttp://tomcat_server;

          }

          location  ~  .*\.(gif|jpg|jpeg|png|bmp|swf|css|js)$ {//本地缓存

                 proxy_cache cache_one;

                 proxy_cache_valid 300 304 12h;#不同HTTP状态码缓存存不同时间

                 proxy_cache_valid 301 302 1m;

                 proxy_cache_valid any 1m;

                 proxy_cache_key$host$uri$is_args$args;#设置web缓存key值

                   

                 proxy_set_header Host $host;

                 proxy_set_headerX-Forwarded-For $remote_addr;

                 proxy_passhttp://tomcat_server;

           }

           location  ~  /purge(/.*){#清除url缓存

                 allow 127.0.0.1;

                 allow  192.168.0.0/16;

                 deny all;

                 proxy_cache_purge cache_one;

           }

           location  ~  .*\.(gif|jpg|jpeg|png|bmp|swf)$ { #设置expires时间

                 expires 30d;

           }

           location  ~  .*\.(js|css)?$ {

                 expires 1h;

           }

           log_format  access '$remote_addr -$remote_user [$time_local] "$request" '

                             '$status$body_bytes_sent "$http_referer" '

                              '"$http_user_agent" "$http_x_forwarded_for" ';

           access_log  /data0 /www/access.logaccess;

    }

}

 

测试

         /usr/local/nginx/sbin/nginx–t /usr/local/nginx/conf/nginx.conf  (配置文件测试)

         /usr/local/nginx/sbin/nginx-c /usr/local/nginx/conf/nginx.conf  (启动nginx)

         /usr/local/nginx/sbin/nginx-s reload                        (重新启动)

         kill-QUIT 主进程号   (终止nginx) 

         kill-HUP 主进程号  (平滑启动,重新加载配置文件)

 

1)      使用webbench -c 200 -t 30s http://localhost /examples/jsp/   //...压力测试

        

2)      在浏览器输入localhost/ NginxStatus/   查看连接情况

        

   active connections– 所有打开的连接,包括连接到后端服务器的。
   server accepts handled requests – nginx已经接受并处理13109个连接,12953个请求reading – 正在读取的请求头。
   writing – 正在读取的请求主体,正在处理的请求或者正在写入的应答。
   waiting – keepalive连接数,等于active - (reading + writing)。       

3)      使用netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'过滤后的连接数        

4)      使用top查看负载

 

PS:参考资料:http://wiki.nginx.org/Chs  及互联网各种blog资源,搜索引擎

         感谢网络,感谢搜索,感谢富有分享精神的人。

 


 


你可能感兴趣的:(扯淡服务器)