部署Nginx服务器


常见的web服务器:

unix和linux平台下:

--Apache、Nginx、Lighttpd、

--Tomcat、IBM WebSphere

windows平台下:

--微软公司的IIS(Internet Information Server)


Nginx简介:

--Nginx是俄罗斯人编写的十分轻量级的HTTP服务器

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



一、Nginx安装与配置

1.nginx的安装


 因为Nginx的安装有依赖,为了方便建议先把开发工具和开发库安装。因为nginx支持地址重写,修改用户的访问的目标地址(perl+正则表达式),所以依赖pcre;要支持https安装openssl;


因为nginx的进程所有者是nginx,在安装nginx之前先创建nginx用户。


#useradd -M -s /sbin/nologin nginx

安装依赖包,yum源已经配置好:


#yum -y install pcre-devel pcre

#yum -y install openssl



Nginx 用源码包安装,源码包安装四步走:解压、配置、编译、安装。

解压之后进入到目录下


#tar -zxvf nginx-0.8.55.tar.gz

#cd  nginx-0.8.55.tar.gz

#./configure  \

> --prefix=/usr/local/nginx   \

> --user=nginx  \

> --group=nginx \

> --with-http_stub_status_module \

> --with-http_ssl_module


#make    &&    make    install

#cd   /usr/local/nginx/

#ls

conf   配置文件    nginx.conf  主配置文件  

html  网页目录

logs   日志文件存放目录

sbin   启动服务的脚本文件存放目录


2启动nginx服务(默认监听80端口)


#service  httpd  stop    httpd服务监听的也是80端口,两者不能同时开启

#chkconfig  --level  35  httpd  off



#cd /usr/local/nginx/sbin/

#./nginx  [选项]

-h                             查看帮助信息

-v查看nginx版本

-V查看编译参数

-t测试默认配置文件

-c 指定配置文件


#./nginx             利用脚本启动服务,默认的配置文件在conf/nginx.conf



#netstat  -utnlap | grep :80//查看状态


监听端口   80

进程名       nginx

传输协议    tcp

进程所有者   nginx



3.停止服务用杀进程的方式:


pkill   -信号     进程名

kill     -信号     pid号


信号:

TERM或INT 快速关闭

QUIT  从容关闭,关闭主进程顺便关闭工作子进程

HUP           重载配置用新的配置开始新的工作进程从容关闭旧的工作进程

USR1  重新打开日志文件

USR2  平滑升级可执行程序

WINCH  从容关闭工作进程,不会立即关闭子进程


例:

  pkill  -HUP  nginx

  pkill  -9  nginx


4访问nginx


在浏览器中输入web服务器的网址,跟httpd服务的访问是同样的


二、平滑升级nginx服务软件版本


平滑升级:在不停止服务的情况下升级软件版本


#tar  -zxvf  nginx-1.0.9...tar.gz


#cd 解压目录


#./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module --with-http_ssl_module


注:这里的配置选项要和低版本的配置选项相同,至于怎么查看低版本的配置选项用,用前面讲过的-V,在忘记选项的情况下可以用/.nginx -h 查看帮助


#make //编译


#mv  /usr/local/nginx/sbin/nginx   /usr/local/nginx/sbin/nginxold

#cp objs/nginx    /usr/local/nginx/sbin/

#make  upgrade

//注意这里是在高版本的目录下执行的

************************************************************************

注:编译完高版本的nginx之后,会生成一个新的目录objs。把低版本目录中的nginx启动脚本改名,或者移除,把objs下的新的nginx脚本拷贝到原来的启动目录,也就是以新换旧

************************************************************************

#./nginx -v  //查看一下软件版本


配置完成之后检查一下新的配置文件是否正确


#/usr/local/nginx/sbin/nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful


配置正确之后平滑升级:


#kill -USR2 `cat /usr/local/nginx/logs/nginx.pid`

sleep 1

#test -f /usr/local/nginx/logs/nginx.pid.oldbin

#kill -QUIT `cat /usr/local/nginx/logs/nginx.pid.oldbin`


也可以用netstat查看一下当前运行的nginx服务的进程号,用kill -USR2 进程号平滑升级,升级期间服务不需要停止;



二、Nginx虚拟主机


有三种方式:


基于ip地址虚拟主机(通过ip地址区分用户访问)  listen   ip:端口号


基于端口虚拟主机(通过端口区分用户访问)  listen  端口号


基于域名虚拟主机(通过主机名区分用户访问) server_name xxx.xxx.xxx


vim  安装目录/conf/nginx.conf


配置容器:(虚拟主机的配置是在这个容器中加以配置的)

http  {

     server  {


           location   /  {



            }


     }

}


配置文件的有效配置行如下:

[root@localhost conf]# grep -v -E '#|^$' nginx.conf

worker_processes  1;

events {

   worker_connections  1024;

}

http {

   include       mime.types;

   default_type  application/octet-stream;

   sendfile        on;

   keepalive_timeout  65;

   server {

          listen       80;               //默认监听80端口

          server_name  localhost;

          location / {

           root   html;

           index  index.html   index.htm;

           }

          error_page   500 502 503 504  /50x.html;

           location = /50x.html {

           root   html;

            }

   }

}


配置基于端口的虚拟主机:

http://192.168.1.100:8000    ---->  web8000

http://192.168.1.100:8090    ---->  web8090


mkdir  /web8000//创建网站根目录

mkdir  /web8090


echo  web8000 > /web8000/index.html    //创建测试主页

echo   web8090 > /web8090/index.html


#vim  nginx-1.conf//编辑新建的配置文件


http {


   server  {

    listen  8000;

        location / {

              root /web8000;

              index   index.html;

         }

   }

   server  {

         listen  8090;

         location / {

              root /web8090;

              index   index.html;

          }

   }    

}


[root@localhost sbin]# ./nginx -c /usr/local/nginx/conf/nginx1.conf

//启动时用-c指定启动时的配置文件

[root@localhost sbin]# netstat -untlap | grep nginx

tcp        0      0 0.0.0.0:8000                0.0.0.0:*                   LISTEN      25423/nginx        

tcp        0      0 0.0.0.0:8080                0.0.0.0:*                   LISTEN      25423/nginx        

tcp        0      0 0.0.0.0:8090                0.0.0.0:*                   LISTEN      25423/nginx


ot@localhost sbin]# elinks  --dump http://192.168.1.100:8000

  web8000

[root@localhost sbin]# elinks  --dump http://192.168.1.100:8090

  web8090

[root@localhost sbin]# elinks  --dump http://192.168.1.100:8080

                              Welcome to nginx!

[root@localhost sbin]#


基于ip地址虚拟主机(通过ip地址区分用户访问)

*生产环境中要有对应ip地址的物理网卡。


http://192.168.1.100      -------->    web100

http://192.168.1.200      -------->    web200


vim  nginx1.conf


http  {

server  {

    listen  192.168.1.100:80;

        location / {

              root /web8000;

              index   index.html;

         }

   }

   server  {

         listen  192.168.1.200:80;

         location / {

              root /web8090;

              index   index.html;

          }

   }

}


基于域名的虚拟主机(通过主机名区分用户的访问)

http://www.tarena.com   ---------->   www

http://bbs.tarena.com     ---------->   bbs


http {

server  {

    listen  80;

    server_name  www.tarena.com;

        location / {

              root /web8000;

              index   index.html;

         }

   }

   server  {

         listen  80;

         server_name bbs.tarena.com;

         location / {

              root /web8090;

              index   index.html;

          }

   }


}



三、nginx用户认证+访问控制


location /{


root html;

index index.html;

allow 192.168.8.1;//只允许192.168.8.1访问

deny all;

auth_basic "auth-domain";

//基本摘要类型,引号中为提示信息,可自由发挥

auth_basic_user_file /usr/local/nginx/conf/authuser.txt;

//指定



}

当配置为: deny 192.168.8.1;


  allow all;//只拒绝192.168.8.1访问




四、配置反向代理



#vim /usr/local/ngix/conf/nginx.conf


upstream sergrp{//定义源服务器组,名字可自由发挥

server 192.168.1.10:80;

server 192.168.1.20:80;



}

       http{

server {

listen 80;

server_name www.tarena.com;

location / {

... ...

proxy_pass http://sergrp;//调用前面定义的服}务组

  }

}



 upstream 定义后台web服务器,用名称区分多个upstream,访问的时候平均分配访问流量


生产环境中web服务器装的是相同的网页,这样用户访问的时候实现负载均衡



 这里的192.168.1.10与192.168.1.20上分别部署web服务器,可以用apache也可以用nginx无所谓,这里的nginx只是配置了一个代理服务器



五、nginx负载均衡


nginx目前支持四种分配方式:


--轮询(默认的):权重为1;每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉能自动剔除


--Weight 指定轮询几率,权重和访问比率成正比,通常用于后端服务器性能不同的情况,默认值为1


--ip_hash 每个请求按访问ip的hash结果分配,这样可以让每个访客固定访问一个后端服务器,可以解决session的问题


--Fair 按后端服务器的相应时间来分配请求 ,响应时间短的优先分配;但不是默认支持的,需要安装第三方软件(哪个服务器的响应时间快把请求发给哪个服务器)

  下载ip_fair包并装包



--设置服务器组主机状态


状态类型:


--down :表示当前sever暂时不参与负载

--max_fails:允许请求失败的次数(默认是1),当超过此次数时,返回              proxy_next_upstream模块定义的错误

--fail_timeout :max_fails次失败后,暂停提供服务的时间


--backup:当其他所有的非backup机器down或者忙的时候,请求会发给backup机器,所以这台机器压力会最轻



注:max_fails与fail_timeout组合用timeout的单位是秒;



upstream sergrp{


#ip_hash;

#server 192.168.8.5:80 weight=2;

server 192.168.8.5:80 down;

server 192.168.8.4:80;

server 192.168.8.6:80 backup;

server 192.168.8.3:80 max_fails=2 fail_timeout=30;






}


心得:

1其实nginx的平滑升级,就相当于重新安装一个新的源码包,只不过从原来的源码包安装四步走解压--配置--编译--安装,改为解压--配置--编译--升级。


2需要注意的是,配置高版本的时候配置选项要和低版本当时的配置相同,用-V 查看原有的配置;


3再一个需要注意的是,用新的启动脚本代替原来的启动脚本;


4最后一个需要注意的是make upgrade的时候是在 高版本的目录下,不要搞混


5构建虚拟主机的部分其实跟apache(httpd)服务是相同的原理。