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的这种Server为process-based server ,也就是基于多进程的HTTPServer,因为它需要对每个用户请求创建一个子进程/线程进行响应;
这样的缺点是,如果并发的请求非常多(这在大型门户网站是很常见的)就会需要非常多的线程,从而占用极多的系统资源CPU和内存。因此对于并发处理不是Apache的强项。
2. nginx服务器
目前来说出现了另一种WebServer,在并发方面表现更加优越,叫做asynchronous servers异步服务器。最有名的为Nginx和Lighttpd。所谓的异步服务器是事件驱动程序模式的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并发连接的高处理能力(单台物理服务器可支持30000~50000个并发请求)。正因为如此,大量提供社交网站、新闻资讯、电子商务以及虚拟主机等服务的企业纷纷选择Ngnix来提供WEB服务。
nginx安装以及运行控制
目前nginx最新稳定版本是1.4.0,开发版本1.7.3,其安装文件可以从http://www.nginx.org官方下载,下面以1.0.8稳定版为例,介绍nginx的安装和运行控制。
1. 编译安装nginx
(1)、安装支持软件
Nginx的配置以及运行需要pcre、zlib等软件包的支持,因此需要预先安装这些软件的开发包,以便于提供相应的库和头文件,确保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-devel和zlib-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
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支持标准的进程信号,通过kill和killall命令发送HUP信号表示重载配置、QUT信号表示退出进程,KILL信号表示杀死进程。
[root@localhost ~]# killall -s HUP nginx
[root@localhost ~]# killall -s QUIT nginx
(3)、使用nginx服务脚本
为了使nginx服务的启动、停止、重载等操作更加方便,可以编写nginx服务脚本,并使用chkconfig和service工具来进行管理,也更加符合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 //添加为系统服务
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.com、www.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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。