nginx 安装详解

Nginx网站服务php

Nginx是一个高性能的 HTTP 反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服html

nginx相对于apache的优势:前端

  • 轻量级,比apache 占用更少的内存及资源nginx

  • 抗并发,nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能web

  • Nginx 是一个安装很是的简单 , 配置文件很是简洁(支持perl语法), Bugs 很是少的服务器: 正则表达式

  • Nginx 配置简洁, Apache 复杂shell

  • Nginx 静态处理性能比 Apache apache

  • nginx处理静态文件好,耗费内存少vim

  • nginx的负载能力比apache高不少。后端

  • Nginx优于apache的主要两点:1.Nginx自己就是一个反向代理服务器 2.Nginx支持7层负载均衡;Nginx可能会

  • apache支持更高的并发

  • nginx,配置文件简洁,正则配置让不少事情变得简单运行效率高,占用资源少,代理功能强大,很适合作前端响应服务器Nginx并发性比较好,CPU内存占用低


apache 相对于nginx 的优势:

  • rewrite ,比nginx rewrite 强大

  • Apache在处理动态有优点;

  • 通常来讲,须要性能的web 服务,用nginx 。若是不须要性能只求稳定,那就apache

  • 做为 Web 服务器:相比 ApacheNginx 使用更少的资源,支持更多的并发链接,体现更高的效率,在高链接并发的状况下,NginxApache服务器不错的替代品:

  • Apache PHP 支持比较简单,Nginx 须要配合其余后端用

  • Apache 的组件比 Nginx

  • apache是同步多进程模型,一个链接对应一个进程;nginx是异步的,多个链接能够对应一个进程

  • nginx处理动态请求的能力较弱,通常动态请求要apache去作,nginx只适合静态和反向。

  • nginx没有本身提供处理PHP的功能,须要经过第三方的模块来提供对PHP进行FastCGI方式的集成。

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

2Nginx的安装及运行控制:

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

编译安装Nginx

1)安装支持软件:

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

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

2)建立运行用户、组:

Nginx服务程序默认以nobody身份运行,建议为其建立专门的用户帐号,以便更准确地控制其访问权限,增长灵活性、下降安全风险。

如:建立一个名为nginx的用户,不创建宿主目录,也禁止登陆到shell环境。

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

3)编译安装nginx

释放nginx源码包

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

编译前配置:

[root@nginx ~]# cd nginx-1.0.8

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

注:配置前能够参考:./configure--help给出说明

  • --prefix:设定Nginx的安装目录

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

  • --with-http_stub_status_module:启用http_stub_status_module模块以支持状态统计

编译安装:

至此Nginx安装完成,为了使Nginx服务器的运行更加方便,能够为主程序nginx建立连接文件,以便管理员直接执行nginx命令就能够调用Nginx的主程序。

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

[root@nginx nginx-1.0.8]# ls -l /usr/local/sbin/nginx

Nginx的运行控制:

apache的主程序httpd相似,Nginx的主程序也提供了”-t”选项用来对配置文件进行检查,以便找出不当或错误的配置。配置文件nginx.conf默认位于安装目录下的conf/子目录中。若要检查位于其余位置的配置文件,可以使用”-c”选项来指定路径。

[root@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服务脚本,并使用chkconfigservice工具来进行管理,也更加符合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

截图以下:

注:经过killkillall命令发送HUP信号表示重载配置, 用新的配置开始新的工做进程
关闭旧的工做进程。QUIT信号表示退出进程,KILL信号表示杀死进程。经过”-s”选项指定信号种类

添加为系统服务。

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

[root@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,具体还要看服务器的硬件、带宽等。

}

3HTTP配置

使用”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;

}
}
}

Nginxlocation

基本语法:
location [=|~|~*|^~] /uri/ { … }

  • =表示作精确匹配
    ~ :
    为区分大小写匹配
    ~*:
    为不区分大小写匹配
    !~ :
    !~*分别为区分大小写不匹配及不区分大小写不匹配

  • 正则表达式匹配,其中:
    文件及目录匹配,其中:
    -f !-f用来判断是否存在文件
    -d!-d用来判断是否存在目录
    -e!-e用来判断是否存在文件或目录
    -x !-x用来判断文件是否可执行

示例1:

location = / {
#
只匹配 / 查询。
}

location/ {

#匹配任何查询,由于全部请求都已 / 开头。可是正则表达式规则和长的块规则将被优先和查询匹配

}

示例2:

location ^~ /p_w_picpaths/ {
#
匹配任何以 /p_w_picpaths/ 开头的任何查询而且中止搜索。任何正则表达式将不会被测试。
}

示例3:

location ~* \.(gif|jpg|jpeg)$ {
#
匹配任何以 gifjpg jpeg 结尾的请求。
}

4、状态统计及虚拟主机应用:

1)Nginx内置了HTTP_STUB_STATUS状态统计模块,用来反馈当前的WEB访问状况。配置

编译参数时可添加—with-http_stub_stastus_module来启用此模块。要使用Nginx的状态统计功能,除了启用内建模块之外,还须要修改nginx.conf文件,指定访问位置并打开stub_status配置。在http{}配置的server{}子配置内添加以下配置项:


[root@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.comwww.accp.com

为两个虚拟WEB主机分别创建根目录,并准备测试首页

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

[root@nginx ~]# echo "www.benet.com" > /var/www/benet/index.html

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

/www/accp[root@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.comwww.accp.com访问两个WEB站点(注意域名解析。)

使用浏览器分别经过www.benet.comwww.accp.com访问两个WEB站点(注意域名解析。)

测试成功。

下接http://wenzhongxiang.blog.51cto.com/6370734/1251583,是Nginx的延伸。



本文出自 “听闻” 博客,请务必保留此出处http://wenzhongxiang.blog.51cto.com/6370734/1251063