首页 > 代码库 > nginx网站服务

nginx网站服务

Nginx网站服务

   随着计算机与Internet技术的蓬勃发展,形形***的web站点称为直接面向用户的中坚力量,在各种网站服务器中,Apache  HTTP Server毫无疑问是其中的佼佼者,微软公司的IIS位居第二。但是在这里介绍的是另一个web服务器软件——nginx,由俄罗斯的Igor  Sysoev开发,在短短数年内市场占有率迅速跃居第三位的轻重级、高性能HTTP服务软件。

  • Apache服务器和nginx服务器的比较

  • apache服务器

优点

    1)、Apache对客户端的响应式支持并发的,运行httpd这个daemon进程之后,它会同时产生多个子进程/线程,每个子进程/线程分别对客户端的请求进行响应。

       Apache两种工作模式:

prefork模式:每个子进程都只有一个线程,效率高但是消耗内存大,是linux下的默认模式;

worker模式:每个子进程有多个线程,内存消耗低,但是一个线程崩溃会牵连其他同子进程的线程。

2)、apache可以提供静态和动态的服务,比如说对于PHP的解析不是通过性能比较差的CGI实现的,而是通过支持php的模块来实现的(通常是mod_php5,或者apxs2

 

缺点

通常称为Apache的这种Serverprocess-based server ,也就是基于多进程的HTTPServer,因为它需要对每个用户请求创建一个子进程/线程进行响应;
这样的缺点是,如果并发的请求非常多(这在大型门户网站是很常见的)就会需要非常多的线程,从而占用极多的系统资源CPU和内存。因此对于并发处理不是Apache的强项

  1. 2.    nginx服务器

目前来说出现了另一种WebServer,在并发方面表现更加优越,叫做asynchronous servers异步服务器。最有名的为NginxLighttpd。所谓的异步服务器是事件驱动程序模式的event-driven,除了用户的并发请求通常只需要一个单一的或者几个线程。因此占用系统资源就非常少。这几种又被称为lightweight web server。举例,对于10,000的并发连接请求,nginx可能仅仅使用几M的内存;而Apache可能需要使用几百M的内存资源
我们可以使用nginx或者lighttpd来作为HTTPServer来使用。
nginx
Apache类似都通过各种模块可以对服务器的功能进行丰富的扩展,同样都是通过conf配置文件对各种选项进行配置。对于PHP等,nginx没有内置的模块来对PHP进行支持,而是通过FastCGI来支持的。
nginx
则没有自己提供处理PHP的功能,需要通过第三方的模块来提供对PHP进行FastCGI方式的集成。

Nginx(发音engine  x)专为性能优化而开发,其最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力(单台物理服务器可支持3000050000个并发请求)。正因为如此,大量提供社交网站、新闻资讯、电子商务以及虚拟主机等服务的企业纷纷选择Ngnix来提供WEB服务。

  • nginx安装以及运行控制

目前nginx最新稳定版本是1.4.0,开发版本1.7.3,其安装文件可以从http://www.nginx.org官方下载,下面以1.0.8稳定版为例,介绍nginx的安装和运行控制。

  1. 1.     编译安装nginx

1)、安装支持软件

       Nginx的配置以及运行需要pcrezlib等软件包的支持,因此需要预先安装这些软件的开发包,以便于提供相应的库和头文件,确保nginx的安装顺利完成。

        查看是否已安装

       [root@localhost~]# rpm  -q  pcre zlib

       若没安装则可使用yum安装

[root@localhost~]# yum  -y  install  pcre-devel zlib-devel

     2)、创建运行用户、组

[root@localhost~]# useradd  -M  -s /sbin/nologin  nginx

注:

 Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,一百年更准确的控制其访问权限,增加灵活性、降低安全风险。

     3)、编译安装nginx

[root@localhost~]#  tar zxf  nginx-1.0.8.tar.gz

[root@localhost~]#  cd nginx-1.0.8

[root@localhost~]#  ./configure  --prefix=/usr/local/nginx  --user=nginx --group=nginx --with-http_stub_status_module

注:配置选项参考

     --prefix:设定nginx的安装目录

     --user—group:指定nginx运行用户和组

     --with-http_stub_ _status_ _module:启用http_stub_status_module模块以便于支持状态统计。

如果在编译过程中出现“error”报错,其中内容是“you can either  disable the module by using…….”的话,原因是pcre-develzlib-devel软件包没有安装

[root@localhost~]# make  &&  make install

     4)、其他操作

为了使nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员可以直接执行“nginx”命令就可以调用nginx主程序。

[root@localhost~]# ln  -s  /usr/local/nginx/sbin/nginx  /usr/local/sbin

[root@localhost~]#  ls -v  /usr/local/sbin/nginx

  1. 2.     Nginx的运行控制

1)、检查配置文件

       Apache的主程序httpd类似,nginx的主程序也提供了“-t”选项用来对配置文件进行检查,以便于找出不当或者是错误的配置,配置文件nginx.conf位于/usr/local/nginx/conf目录下,若要检查位于其他位置的配置文件,可使用“-c”选项指定路径。

[root@localhost ~]#  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

         2)、启动、停止nginx

              [root@localhost~]# nginx  //启动nginx

              检查是否启用

              [root@localhost~]# netstat –anpt | grep nginx

              主程序nginx支持标准的进程信号,通过killkillall命令发送HUP信号表示重载配置、QUT信号表示退出进程,KILL信号表示杀死进程。

[root@localhost ~]# killall  -s HUP  nginx

[root@localhost ~]# killall  -s QUIT  nginx

           3)、使用nginx服务脚本

                 为了使nginx服务的启动、停止、重载等操作更加方便,可以编写nginx服务脚本,并使用chkconfigservice工具来进行管理,也更加符合RHEL系统的管理习惯。

 [root@localhost~]# vim /etc/init.d/nginx

#/bin/bash

# chkconfig: - 99 20

# description: Nginx Service Control Script

PROG=“/usr/local/nginx/sbin/nginx”  

PIDF= “/usr/local/nginx/logs/nginx.pid”

case “$1” in

     start)

     $PROG

     ;;

stop)

kill -s QUIT $(cat  $PIDF)

;;

restart)

$0stop

$0start

;;

reload)

kill  -s  HUP$(cat  $PIDF)

;;

*)

echo“Usage: $0 {start|stop|restart|reload}”

exit  1

esac

exit  0

[root@localhost ~]# chmod  +x /etc/init.d/nginx

[root@localhost ~]# chkconfig  --add nginx   //添加为系统服务

  1. 3.     配置文件nginx.conf

主配置文件位于/usr/local/nginx/conf/nginx.conf,包括全局配置、I/O事件配置、HTTP配置三大块内容,配置语句的格式为“关键字  值;”(末尾以分号结束),以“#”开始的部分为注释。

1)、全局配置

      由各种配置语句组成,不使用特定的界定标记。全局配置部分包括nginx服务的运行用户、工作进程数、错误日志、PID存放位置等设置。

 全局配置的内容:

# user  nginx          //运行用户

worker_processes  1;        //工作进程数量

#error_log  logs/error.log;   //错误日志文件的位置

#pid       logs/nginx.pid   //PID文件的位置

注:worker_processe表示的工作进程数量=该服务器cpu核的1倍,user默认运行用户是nobody

2)、I/O事件配置

     使用“event{  }”界定标记,用来指定nginx进程的I/O响应模型,每个进程连接数等设置。对于2.6及以上版本内核,建议使用epoll模型以便于提高性能;每个进程的连接数根据实际需要而定,一般不超过10000(默认1024)。

配置内容:

events  {

       use   epoll;      //使用epoll模型

       worker_connections  4096 //每进程处理4096个连接

}

注:nginx正常提供服务的连接数已超过的个数=工作进程数x 每进程处理的连接数。

示例:工作进程为8,每进程处理连接数4096,则nginx正常提供服务连接数已超过3万个(8x4096=32768

当然,具体还要看服务器硬件,网络带宽等物理连接。

3)、HTTP配置

     使用“http{ }”界定标记,包括访问日志、HTTP断开、网页目录、默认字集,连接保持,以及虚拟web主机、php解析等一系列设置,其中大部分配置语句都包含在子界定标记“server {  }”。

 配置内容:

http {

include        mime.types;

default_type  application/octet-stream;

log_format  main  ‘$remote_addr  -  $remote_usder [$time_local]  “$request” ‘

              ‘$status  $body_bytes_sent “$http_x_forwarded_for” ‘ ;

              ‘ ”$http_user_agent” “$http_x_forwarded_for”‘ ;

access_log  logs/access.log   main;   //访问日志位置

sendfile     on                   //支持文件发送(下载)

keepalive_timeout   65;             //连接保持超时

server  {                          //web服务的监听配置

 listen   80;                      //监听地址以及端口号

也可采用“IP地址:端口”形式作为监听地址

server_name  www.benet.com     //网站名称(FQDN

charset  utf-8;                     //网页的默认字符集

location  / {

        root html                //根目录配置

    root语句用来设置特定的访问位置的网页文档路径,默认为nginx安装目录下html/子目录,也可根据需要改为/var/www/html等其他路径

        index index.html  index.php  //默认首页(索引页)

     }

error_page  500 502  503  504  /50x.html;   //内部错误的反馈页面

location  =  /50.html  {            //错误页面设置

        root html

      }

}

}

  • nginx状态统计

nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的web访问情况,配置编译参数可添加- - with- -http_stub_status_module来启用此模块。除此之外,还要修改nginx.conf文件来指定访问位置并打开stub_status配置。

[root@localhost ~]# vi /usr/local/nginx/conf/nginx.conf

……省略部分信息

http {

……省略部分信息

   server {

…….省略部分信息

   添加内容:

   location~  /status  {        //访问目录为/status

         stub_status    on   //打开状态统计功能

         access_log   off     //关闭此位置的日志目录

        }

}

}

[root@localhost ~]# service  nginx  restart

  检查方法:

   在浏览器上登录http//www.benet.com/status ,若出现统计信息则表示完成。

  • 基于域名的虚拟web主机

每个虚拟web站点拥有独立的“server“配置,各自的监听地址、端口号可单独指定,当然网站名称也是不同的。

示例:www.benet.comwww.accp.com

1)、准备网站目录以及测试文件

[root@localhost ~]#mkdir  -p /var/www/benet

[root@localhost ~]# echo  “<h1>benet.com</h1>”  > /var/www/benet/index.html

[root@localhost ~]# mkdir  -p /var/www/accp

[root@localhost ~]# echo  “<h1>accp.com</h1>”  > /var/www/accp/index.html

      2)、调整nginx.conf文件

       [root@localhost~]# vi  /usr/local/nginx/conf/nginx.conf

          ……省略部分信息

http{

……省略部分信息

         server{

              listen  80;

              server_name  www.benet.com;

              charset  utf-8;

              access_log  logs/benet.access.log  main;

              location  /  {

                   root  /var/www/benet;

                   index  index.html  index.php

               }

}

server {

              listen  80;

              server_name  www.accp.com;

              charset  utf-8;

               access_log  logs/accp.access.log  main;

              location  /  {

                    root  /var/www/accp;

                   index  index.html  index.php

               }

}

}

  [root@localhost~]# service  nginx  reload

    3)、访问主机进行测试,若能看到各自首页的测试内容,则表示虚拟主机配置成功。

 

 

 

 


本文出自 “程亚娟” 博客,请务必保留此出处http://812893920.blog.51cto.com/8474261/1550365

nginx网站服务