本帖最后由 yonghu 于 2013-7-17 09:13 编辑
Nginx是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服 nginx相对于apache的优点: 轻量级,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能 Nginx 是一个安装非常的简单 , 配置文件非常简洁(支持perl语法), Bugs 非常少的服务器: Nginx 配置简洁, Apache 复杂 Nginx 静态处理性能比 Apache 高 nginx处理静态文件好,耗费内存少 nginx的负载能力比apache高很多。 Nginx优于apache的主要两点:1.Nginx本身就是一个反向代理服务器 2.Nginx支持7层负载均衡;Nginx可能会 apache支持更高的并发 nginx,配置文件简洁,正则配置让很多事情变得简单运行效率高,占用资源少,代理功能强大,很适合做前端响应服务器,Nginx并发性比较好,CPU内存占用低
apache 相对于nginx 的优点: rewrite ,比nginx 的rewrite 强大 Apache在处理动态有优势; 一般来说,需要性能的web 服务,用nginx 。如果不需要性能只求稳定,那就apache 作为 Web 服务器:相比 Apache,Nginx 使用更少的资源,支持更多的并发连接,体现更高的效率,在高连接并发的情况下,Nginx是Apache服务器不错的替代品: Apache 对 PHP 支持比较简单,Nginx 需要配合其他后端用 Apache 的组件比 Nginx 多 apache是同步多进程模型,一个连接对应一个进程;nginx是异步的,多个连接可以对应一个进程 nginx处理动态请求的能力较弱,一般动态请求要apache去做,nginx只适合静态和反向。 nginx没有自己提供处理PHP的功能,需要通过第三方的模块来提供对PHP进行FastCGI方式的集成。
Nginx(发音enginex)专为性能优化而开发,其最知名的优点是它的稳定性和低系统资源消耗,以及对HTTP并发连接的高处理能力(单台物理服务器可支持30000~50000个并发请求)。正因为如此,大量提供社交网站、新闻资讯、电子商务以及虚拟主机等服务的企业纷纷选择Ngnix来提供WEB服务。 2、Nginx的安装及运行控制: 目前Nginx的最新稳定版本为1.0.8,开发版本为1.1.6,其安装文件可以从官方网站http://www.nginx.org下载,下面以稳定版为例,介绍nginx的安装和运行控制。 编译安装Nginx 1)安装支持软件: Nginx的配置及运行需要pcre、zlib等软件包的支持,因此应预先安装这些软件的开发包(devel),以便提供相应的库和头文件,确保Nginx的安装顺利完成。 [iyunv@nginx ~]# yum -y install pcre-devel zlib-devel
2)创建运行用户、组: Nginx服务程序默认以nobody身份运行,建议为其创建专门的用户账号,以便更准确地控制其访问权限,增加灵活性、降低安全风险。 如:创建一个名为nginx的用户,不建立宿主目录,也禁止登录到shell环境。 [iyunv@nginx ~]# useradd -M -s /sbin/nologin nginx
3)编译安装nginx: 释放nginx源码包 [iyunv@nginx ~]# tar zfxv nginx-1.0.8.tar.gz
编译前配置: [iyunv@nginx ~]# cd nginx-1.0.8
[iyunv@nginx nginx-1.0.8]# ./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module
注:配置前可以参考:./configure--help给出说明 编译并安装:
至此Nginx安装完成,为了使Nginx服务器的运行更加方便,可以为主程序nginx创建链接文件,以便管理员直接执行nginx命令就可以调用Nginx的主程序。 [iyunv@nginx nginx-1.0.8]# ln -s /usr/local/nginx/sbin/nginx/usr/local/sbin/ [iyunv@nginx nginx-1.0.8]# ls -l /usr/local/sbin/nginx
Nginx的运行控制: 与apache的主程序httpd类似,Nginx的主程序也提供了”-t”选项用来对配置文件进行检查,以便找出不当或错误的配置。配置文件nginx.conf默认位于安装目录下的conf/子目录中。若要检查位于其他位置的配置文件,可使用”-c”选项来指定路径。 [iyunv@nginx ~]# nginx -t
启动、停止Nginx: 直接运行nginx即可启动Nginx服务器,这种方式将使用默认的配置文件,若要改用其他配置文件,需添加”-c配置文件路径”选项来指定路径。需要注意的是,若服务器中已安装有httpd等其他WEB服务软件,应采取措施避免冲突。
通过检查 Nginx程序的监听状态,或者在浏览器中访问此WEB服务(默认页面将显示“Welcome to nginx!”),可以确认Nginx服务是否正常运行。
或使用elinks浏览器(需安装elinks软件包。yum-y installelinks)【nss_compat_ossl 和elinks】
注意:要在防火墙上允许80端口的通信。 停止Nginx服务: #Killall -9 nginx 当Nginx进程运行时,PID号默认存放在logs/目录下的nginx.pid文件中,因此若改用kill命令,也可以根据nginx.pid文件中的PID号来进行控制。 为了使Nginx服务的启动、停止、重载等操作更加方便,可以编写Nginx服务脚本,并使用chkconfig和service工具来进行管理,也更加符合RHEL系统的管理习惯。
脚本内容如下: #!/bin/bash # chkconfig: 2345 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 -t &> /dev/null if [ $? -eq 0 ] then $PROG echo "Nginx service start success." else $PROG -t fi ;; stop) kill -s QUIT $(cat $PIDF) echo "Nginx service stop success." ;; restart) $0 stop $0 start ;; reload) $PROG -t &> /dev/null if [ $? -eq 0 ] then kill -s HUP $(cat $PIDF) echo "reload Nginx config success." else $PROG -t fi ;; *) echo "Usage: $0 {start|stop|restart|reload}" exit 1 esac 截图如下:
注:通过kill或killall命令发送HUP信号表示重载配置, 用新的配置开始新的工作进程
关闭旧的工作进程。QUIT信号表示退出进程,KILL信号表示杀死进程。通过”-s”选项指定信号种类。 添加为系统服务。 [iyunv@nginx ~]# chmod +x /etc/init.d/nginx [iyunv@nginx ~]# chkconfig --add nginx
这样一来,就可以通过nginx脚本来启动、停止、重启、重载Nginx服务器了。 3、配置文件nginx.conf: 在Nginx服务器的主配置文件nginx.conf中,包括全局配置、I/O事件配置、HTTP配置这三大块内容,配置语句的格式为”关键字值;”(末尾以分号表示结束),以”#”开始的部分表示注释。 1)全局配置 由各种配置语句组成,不使用特定的界定标记。全局配置部分包括运行用户、工作进程数、错误日志、PID存放位置等基本设置。 常用配置项: usernobody; //运行用户,Nginx的运行用户实际是编译时指定的nginx,若编译时未指定则默认为nobody worker_processes 2; //指定nginx启动的工作进程数量,建议按照cpu数目来指定,一般为它的倍数 worker_cpu_affinity 00000001 00000010; //为每个进程分配cpu,上例中将2个进程分配到两个cpu,当然可以写多个,或者将一个 进程分配到多个cpu worker_rlimit_nofile 102400; //这个指令是指当一个nginx进程打开的最多文件数目,理论值应该是最多打开文件数(ulimit -n)与nginx进程数相除,但是nginx分配请求并不是那么均匀,所以最好与ulimit -n的值 保持一致。(通过”ulimit –n 数值”可以修改打开的最多文件数目) error_loglogs/error.log; //全局错误日志文件的位置 pidlogs/nginx.pid;//PID文件的位置 2)I/O事件配置: 使用”events {}”界定标记,用来指定Nginx进程的I/O响应模型,每个进程的连接数等设置 events { use epool;//使用epool模型,对于2.6以上的内核,建议使用epool模型以提高性能 worker_connections 4096;//每个进程允许的最多连接数(默认为1024),每个进程的连接数应根据实际需要来定,一般在10000以下,理论上每台nginx服务器的最大连接数为worker_processes*worker_connections,具体还要看服务器的硬件、带宽等。 } 3)HTTP配置 使用”http{}”界定标记,包括访问日志、HTTP端口、网页目录、默认字符集、连接保持、以 及虚拟主机、PHP解析等一系列设置。其中大部分配置语句包含在子界定标记”servier {}”内。 http {
#设定mime类型,即conf/目录下的mime.types文件中的设定。
includemime.types;
default_type application/octet-stream;
#设定日志格式
log_formatmain'$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; #设定access log
access_log logs/access.log main;
sendfileon;//支持文件发送(下载)
keepalive_timeout 65;//连接保持超时
#设定虚拟主机
server {//用来配置虚拟主机
listen80; //WEB服务的监听设置,可以采用”IP地址:端口”形式
server_name www.lnmp.com;//网站名,称可以写多个名称,用空格分隔
location / {//表示如何匹配后面的路径的index index.html; //默认首页root html; //网页根目录位置,默认为Nginx安装目录下的html/子目录,root语句用来设置特定访问位置的网页文档路径,根据需要可改为/var/www/html等其他路径。 }
charset gb2312;//网页的默认字符集
#设定本虚拟主机的访问日志
access_log logs/www.lnmp.com.access.log main; error_page 500 502 503 504/50x.html; //内部错误的反馈页面 location = /50x.html { root html; }
}
} Nginx的location 基本语法:
location [=|~|~*|^~] /uri/ { … } 示例1: location = / {
# 只匹配 / 查询。
} location/ { #匹配任何查询,因为所有请求都已 / 开头。但是正则表达式规则和长的块规则将被优先和查询匹配 } 示例2: location ^~ /images/ {
# 匹配任何以 /images/ 开头的任何查询并且停止搜索。任何正则表达式将不会被测试。
} 示例3: location ~* \.(gif|jpg|jpeg)$ {
# 匹配任何以 gif、jpg 或 jpeg 结尾的请求。
} 4、状态统计及虚拟主机应用: 1)Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的WEB访问情况。配置 编译参数时可添加—with-http_stub_stastus_module来启用此模块。要使用Nginx的状态统计功能,除了启用内建模块以外,还需要修改nginx.conf文件,指定访问位置并打开stub_status配置。在http{}配置的server{}子配置内添加如下配置项:
[iyunv@nginx ~]# vim /usr/local/nginx/conf/nginx.conf location /status { stub_status on; access_log off; auth_basic "Nginx status"; auth_basic_user_file /usr/local/nginx/.htpasswd; }
注:location/status //匹配任何包含/tongji的任何查询 stub_statuson //打开状态统计功能 Access_logoff //关闭此位置的日志记录 Nginx 支持为目录添加密码认证,使用apache 的 htpasswd 来创建密码文件 htpasswd-c/usr/local/nginx/.htpasswd用户名
保存修改过的nginx.conf文件并重启nginx服务使修生效。 新的配置生效后,在浏览器中访问Nginx服务器的/tongji网站位置(http://web服务器 IP/status)可以看到状态统计信息
如上图所示:其中”Active connections”表示当前的活动连接数;而”server accepts handled requests”表示已经处理的连接信息,三个数字依次表示已处理的连接数、成功的TCP握手次数、已处理的请求数. 客户端访问控制:
注:allow 允许规则,deny拒绝规则;规则的执行是按从上向下执行,匹配某条规则后将不 再检查其他规则。 2)虚拟主机: 使用Nginx搭建虚拟主机服务器时,每个虚拟WEB站点拥有独立的”server {}”配置段,各自 监听的IP地址、端口号可以单独指定,当然网站名称也是不同的。 例如:要创建两个站点www.benet.com和www.accp.com 为两个虚拟WEB主机分别建立根目录,并准备测试首页 [iyunv@nginx ~]# mkdir -p /var/www/benet [iyunv@nginx ~]# echo "www.benet.com" > /var/www/benet/index.html [iyunv@nginx ~]# mkdir -p /var/www/accp /www/accp[iyunv@nginx ~]# echo "www.accp.com" > /var/www/accp/index.html
调整nginx.conf配置文件---域名虚拟主机 配置两个”server {}”区域,分别对应两个WEB站点,指定各自的网站名称、监听地址、网站 根目录、访问日志等信息,然后重载配置 server { listen 80; server_name www.benet.com 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 accp.com; charset utf-8; access_log logs/accp.access.log main; location / { root /var/www/accp; index index.html index.php; } }
测试: 使用浏览器分别通过www.benet.com和www.accp.com访问两个WEB站点(注意域 名解析。 使用浏览器分别通过www.benet.com和www.accp.com访问两个WEB站点(注意域名解析。
测试成功。
|