nginx学习笔记

室内nginx技术交流

简介:

Nginx(发音同 engine x)是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,在中国使用nginx网站用户有:新浪网易、 腾讯等。

特点:

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

在window下面安装很简单,下面已目前最新版本安装(nginx-1.5.6 )举例说明:

  在nginx官网下载nginx-1.5.6.zip安装包

  解压到指定目录(如 d:/nginx-1.5.6) 即可使用。

   进入到解压后的目录nginx-1.5.6

   启动: nginx.exe

   停止: nginx -s stop

   重启: nginx -s reload

•进入到安装包目录,执行以下语句

tar -zxvf  nginx-1.5.6.tar.gz

•然后解压后目录输入

   cd nginx-1.5.6

•接着开始编译源代码

      ./configure --user=wap7 --group=wap --prefix=/home/wap7/nginx1.5.6/ --with-openssl=/usr/local/openssl --without-http_proxy_module --without-http_rewrite_module --with-pcre=/usr/local/pcre-8.10

• ./configure  有很多可选项,这里就几种常用的选项做一些说明
•--user=<user> - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的用户。如果没有指定,默认为 nobody。
•--group=<group> - 在nginx.conf中没有指定user指令的情况下,默认的nginx使用的组。如果没有指定,默认为 nobody。
•--prefix=<path> - Nginx安装路径。如果没有指定,默认为 /usr/local/nginx。
•--sbin-path=<path> - Nginx可执行文件安装路径。只能安装时指定,如果没有指定,默认为<prefix>/sbin/nginx。
•--without-http_rewrite_module --with-pcre=/usr/local/pcre-8.10

 启用rewrite模块  需要用到pcre库

•--with-openssl=/usr/local/openssl --without-http_proxy_module

 启用ssl连接 需要用到openssl库

 

•make && make install

   安装完成 !

•到安装目录的sbin目录下

    启动:./nginx

    停止:./nginx –s stop

    重启: ./nginx –s reload

配置:

全局配置

•#启动进程,通常设置成和cpu的数量相等
worker_processes  4;

 

•#全局错误日志及PID文件

     error_log   logs/error.log;

      pid         conf/nginx.pid;

 

•#工作模式及连接数上限
events {
    use   epoll;             #epoll是多路复用IO(I/O Multiplexing)中的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能
    worker_connections  1024;#单个后台worker process进程的最大并发链接数
}
http节点配置
•#设置http服务器,利用它的反向代理功能提供负载均衡支持
http {
     #设定mime类型,类型由mime.type文件定义
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    #设定日志格式
    access_log    /var/log/nginx/access.log;
•   #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用,
    #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime.
    sendfile        on;
•    #连接超时时间
    keepalive_timeout  65;

    
    #开启gzip压缩
    gzip  on;
    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
•    #设置请求缓冲
    client_header_buffer_size    1k;
    large_client_header_buffers  4 4k;

            include /etc/nginx/conf.d/*.conf;
            include /etc/nginx/sites-enabled/*;

•    #设置负载均衡的服务器列表
     upstream mysvr {
    #weigth参数表示权值,权值越高被分配到的几率越大
    server 192.168.8.2:80  weight=1;
    server 192.168.8.3:80  weight=6;
    }

server配置

• server {
      #侦听80端口
        listen       80;
        #定义使用wapmail.10086.cn访问
        server_name  w;
•        #设定本虚拟主机的访问日志
        access_log  logs/ wapmail.10086.cn.access.log  main;
•    #默认请求
  location / {
          proxy_pass         http://wap_login_server; #对应一个upstream配置

                  client_max_body_size       100m; #客户端最大请求报文数据,超过这个值将拒绝请求

                 proxy_set_header   x-forward-for $remote_addr; #透传用户IP到后端服务器

                 proxy_set_header Host $host;

                proxy_pass_header  Set-Cookie; #透传cookie到后端服务器
        }

•    # 定义错误提示页面
    error_page   500 502 503 504 /50x.html;  
        location = /50x.html {
        root   /root;
    }
 
upstream配置
 

upstream 是nginx负载均衡的主要模块

•#设置负载均衡的服务器列表 

 upstream wap_login_server {

        server 172.16.200.55:9000;

        server 172.16.200.56:9000;

    }

默认是轮询负载策略,nginx提供四种负载策略

1、轮询:(默认,weight  指定权重)

2、ip_hash:  根据请求IP地址hash结果分配后台服务

3、fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配

4、url_hash:按访问url的hash结果来分配请求

location配置

 

upstream 是nginx负载均衡的主要模块

•#设置负载均衡的服务器列表 

 upstream wap_login_server {

        server 172.16.200.55:9000;

        server 172.16.200.56:9000;

    }

默认是轮询负载策略,nginx提供四种负载策略

1、轮询:(默认,weight  指定权重)

2、ip_hash:  根据请求IP地址hash结果分配后台服务

3、fair:按后端服务器的响应时间来分配请求,响应时间短的优先分配

4、url_hash:按访问url的hash结果来分配请求

rewrite配置

•Rewrite语法

    rewrite regex replacement flag

 

•其中flag标记有四种格式:
last –  终止当前rewirte,继续匹配
break – 中止rewirte,不在继续匹配
redirect – 返回临时重定向的HTTP状态302
permanent – 返回永久重定向的HTTP状态301
• Rewrite可以放在server, location 和 if 模块中。
•Rewrite主要的功能就是实现URL的重写,nginx的rewrite规则采用PCRE Perl兼容正则表达式的语法进行规则匹配,如果您需要nginx的rewrite功能,在编译nginx之前,需要编译安装PCRE库。
•location /wp12/ {

        rewrite "^/wp12/(.*)$" /wp/$1 break;

        proxy_pass        http://wap_rm_wp_server;

         ……省略

      }

将请求  /wp12/xxx.htm URL重写成 /wp/xxx.htm

 

nginx管理

•默认配置:log_format  main  ‘$host $remote_addr - $remote_user [$time_local] $request ‘ ‘“$status” $body_bytes_sent “$http_referer” ‘ ‘“$http_user_agent” “$http_x_forwarded_for”’;
•我们使用nginx作为反向代理,代理后端部署的实际服务地址可能不止一个。我们要了解后端服务器的响应情况,就需要在log_format中增加几个变量。
•下面列出几个重要的变量:
•$status  $upstream_status :  响应的状态码(响应正常还是出错了?)
•$request_time  $upstream_response_time :  关注性能必备!看看前台传输文件的时间,以及后台处理的时间。前者对了解网络状态有益,后者对了解服务性能有益。
•$remote_addr  $upstream_addr :  用户的IP地址,后端服务的IP地址
•$bytes_sent $body_bytes_sent  :  发送给用户端的数据量(包含HTTP头和不包含HTTP头)
•$host $request :  最重要的,搞定具体域名具体URL,不抓瞎。
•根据实际情况,把以上的变量组合放进log_format中。
 
平滑重启

如果改变了Nginx的配置文件(nginx.conf),想重启Nginx,可以发送系统信号给Nginx主进程的方式来进行。这样进程在处理完当前请求后,使用新的进程处理新的请求,然后关闭旧的进程。不过,在重启之前,要确认Nginx配置文件的语法是正确的,可通过如下命令测试配置文件是否正确:

•/nginx_home/sbin/nginx -t -c /nginx_home/conf/nginx.conf
•如果配置文件不正确,屏幕会提示配置文件的第几行出错: nginx:[emerg] invalid number of arguments in "autoindex" directive in /nginx_home/conf/nginx.conf:29

      nginx:configuration file /nginx_home/conf/nginx.conf test failed

•如果配置文件正确,屏幕将提示以下两行信息:

the configuration file /nginx_homeconf/nginx.conf syntax is ok

configuration file /nginx_home/conf/nginx.conf  test is successful

 

•这时候,就可以平滑重启了:
•对于Nginx 0.8.x之前的版本 kill -HUP `cat /usr/local/nginx/logs/nginx.pid`
对于Nginx 0.8.x之后的版本 /nginx_home/sbin/nginx -s reload

平滑升级

1、  备份旧版本的nginx可执行文件,复制新版本的nginx这行文件

            mv /opt/nginx/sbin/nginx /opt/nginx/sbin/nginx.old 

           cp objects/nginx /opt/nginx/sbin/nginx 

2、  测试新版本nginx是否正常

/opt/nginx/sbin/nginx –t –c /opt/nginx/conf/nginx.conf 

3、  平滑升级nginx

kill –USR2 `cat /nginx_home/logs/nginx.pid` 

4、  旧版本Nginx的pid变为oldbin,这是旧版本和新版本的nginx同时运行,过一段时间等就nginx处理完用户请求后,执行下面操作

5、  从容关闭旧版本的Nginx进程

kill –WINCH `cat /nginx_home/logs/nginx.oldbin` 

6、  决定是否升级到新版的nginx

 

kill –HUP `cat /nginx_home/logs/nginx.oldbin` ##nginx在不重载配置文件启动工作进程 

kill –QUIT `cat /nginx_home/logs/nginx.oldbin` ##关闭旧版nginx 

7、验证nginx是否升级成功

     /nginx_home/sbin/nginx –V ###显示类似以下信息则升级成功 

    nginx version: nginx/1.2.9

 

nginx实例

 

posted @ 2016-01-19 16:43  YOU_CAN  阅读(1180)  评论(0编辑  收藏  举报