原创——Nginx基础

Nginx基础php

1、Nginx概述:

  Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。html

  Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布四年来,Nginx已经由于它的稳定性、丰富的功能集、 示例配置文件和低系统资源的消耗而闻名了。前端

   目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。 新近发现Nginx 技术在国内日趋火热,愈来愈多的网站开始部署Nginx。nginx

2、相比主流的Apache,我为何要选Nginx?

  Nginx才短短几年,就拿下了web服务器大笔江山,众所周知,Nginx在处理大并发静态请求方面,效率明显高于httpd,甚至能轻松解决C10K问题c++

一、Nginx和Apache相比优势:
  轻量级:一样起web服务,比apache占用更少的内存及资源;   抗并发:nginx 处理请求是异步非阻塞的,而apache 则是阻塞型的,在高并发下nginx 能保持低资源低消耗高性能;   高度模块化的设计:编写模块相对简单;   社区活跃:各类高性能模块出品迅速。
2、Nginx做为Web服务器:
  相比Apache,Nginx使用更少的资源,支持更多的并发链接,体现更高的效率。   Nginx做为负载均衡服务器:
  Nginx既能够在内部直接支持Rails和PHP程序对外进行服务, 也能够支持做为HTTP代理服务器对外进行服务. Nginx采用C进行编写, 不管是系统资源开销仍是CPU使用效率都不错。   Nginx做为邮件代理服务器:
  Nginx 同时也是一个很是优秀的邮件代理服务器(最先开发这个产品的目的之一也是做为邮件代理服务器)。
Nginx 启动特别容易, 而且几乎能够作到7
*24不间断运行,即便运行数个月也不须要从新启动. 你还可以不间断服务的状况下进行软件版本的升级。
3、Nginx配置简洁,Apache复杂:   Nginx静态处理性能比Apache高3倍以上;   Apache对PHP支持比较简单,Nginx须要配合其余后端(php-fpm或者fastcgi);   Apache的组件比Nginx多。
4、Nginx与Apache最核心的区别:
  在于apache是同步多进程模型,一个链接对应一个进程;nginx是异步的,多个链接(万级别)能够对应一个进程。
五、nginx处理静态文件好,耗费内存少:
  apache有先天不支持多核心处理负载鸡肋的缺点,建议使用nginx作前端,后端用apache。大型网站建议用nginx自带的集群功能。
六、从使用状况来看:
  nginx的负载能力比apache高不少。Nginx改完配置能-t测试一下配置有没有问题,apache重启的时候发现配置出错了,会很崩溃,改的时候都会很是当心翼翼如今看有好多集群站,前端nginx抗并发,后端apache集群,配合的也不错。
七、nginx处理动态请求是鸡肋,通常动态请求要apache去作,nginx只适合静态和反向。

八、Nginx优于apache的主要两点:
  1.Nginx自己就是一个反向代理服务器;
  2.Nginx支持7层负载均衡,Nginx可能会比apache支持更高的并发。

十、你对web server的需求决定你的选择。大部分状况下Nginx都优于Apache,好比说静态文件处理PHP-CGI的支持、反向代理功能、前端apache、维持链接等等。在Apache+PHP(prefork)模式下,若是PHP处理慢或者前端压力很大的状况下,很容易出现Apache进程数飙升,从而拒绝服务的现象。
十一、能够看一下nginx lua模块:https://github.com/chaoslaw...apache比nginx多的模块,可直接用lua实现apache是最流行的,why?大多数人懒得更新到nginx或者学新事物。
十二、对于nginx,它配置文件写的很简洁,正则配置让不少事情变得简单运行效率高,占用资源少,代理功能强大,很适合作前端响应服务器
1三、Apache在处理动态有优点,Nginx并发性比较好,CPU内存占用低,若是rewrite频繁,那仍是Apache较适合。

3、3种web服务器工做模型比较:

  Web服务器要为用户提供服务,必须以某种方式,工做在某个套接字上。通常Web服务器在处理用户请求是,通常有以下三种方式可选择:git

多进程方式:为每一个请求启动一个进程来处理。因为在操做系统中,生成进程、销毁进程、进程间切换都很消耗CPU和内存,当负载高是,性能会明显下降。
优势: 稳定性!因为采用独立进程处理独立请求,而进程之间是独立的,单个进程问题不会影响其余进程,所以稳定性最好。
缺点: 资源占用!当请求过大时,须要大量的进程处理请求,进程生成、切换开销很大,并且进程间资源是独立的,形成内存重复利用。

多线程方式:一个进程中用多个线程处理用户请求。因为线程开销明显小于进程,并且部分资源还能够共享,所以效率较高。
优势:开销较小!线程间部分数据是共享的,且线程生成与线程间的切换所需资源开销比进程间切换小得多。
缺点:稳定性!线程切换过快可能形成线程抖动,且线程过多会形成服务器不稳定。

异步方式:使用非阻塞方式处理请求,是三种方式中开销最小的。但异步方式虽然效率高,但要求也高,由于多任务之间的调度若是出现问题,就可能出现总体故障,所以使用异步工做的,通常是一些功能相对简单,但却符合服务器任务调度、且代码中没有影响调度的错误代码存在的程序。
优势:性能最好!一个进程或线程处理多个请求,不须要额外开销,性能最好,资源占用最低。
缺点:稳定性!某个进程或线程出错,可能致使大量请求没法处理,甚至致使整个服务宕机。

4、编译安装Nginx

一、安装Nginx

#编译nginx环境前须要先把gcc等开发库之类提早装好;
[root@realserver1 ~]# yum -y install gcc gcc-c++ automake autoconf libtool make
#安装pcre是为了支持rewrite,
#zlib是为了支持gzip压缩
#openssl是为了支持https;
[root@realserver1 ~]# yum install -y pcre-devel.x86_64 pcre-devel.x86_64  zlib.x86_64 zlib-devel.x86_64  openssl-devel.x86_64 openssl.x86_64
[root@realserver1 ~]# groupadd www 
[root@realserver1 ~]# useradd -r -g www www  -s /sbin/nologin   #运行nginx的用户和用户组
[root@realserver1 nginx-1.8.1]# mkdir -pv /opt/application/nginx
mkdir: created directory `/opt/application'
mkdir: created directory `/opt/application/nginx'
[root@realserver1 tools]# tar -xf nginx-1.8.1.tar.gz
[root@realserver1 tools]# cd nginx-1.8.1
[root@realserver1 nginx-1.8.1]# ./configure --prefix=/opt/application/nginx/ --user=www --group=www --with-http_stub_status_module --with-http_ssl_module --with-http_spdy_module --with-http_gzip_static_module --with-http_realip_module --with-ipv6
# --with-http_stub_status_module 启用nginx状态监控
# --with-http_ssl_module 启用HTTPS加密
# --with-http_spdy_module 启用spdy支持,缩短为网页加载时间
# --with-http_gzip_static_module  启用静态压缩
# --with-http_realip_module 作代理时获取客户端真实IP
# --with-ipv6 支持ipv6
[root@realserver1 nginx-1.8.1]# make ;make install

 二、建立nginx启动脚本

[root@realserver1 ~]# vim /etc/rc.d/init.d/nginx
[root@realserver1 ~]# chmod 755 /etc/rc.d/init.d/nginx
[root@realserver1 ~]# service nginx start
Starting nginx:                                            [  OK  ]
[root@realserver1 ~]# chkconfig --add nginx
[root@realserver1 ~]# chkconfig nginx on
[root@realserver1 ~]# chkconfig --list nginx
nginx              0:off      1:off  2:on  3:on    4:on     5:on     6:off

三、测试成功

[root@realserver1 nginx-1.8.1]# curl -I localhost
HTTP/1.1 200 OK
Server: nginx/1.8.1
Date: Thu, 03 Nov 2016 08:30:16 GMT
Content-Type: text/html
Content-Length: 612
Last-Modified: Thu, 03 Nov 2016 08:28:24 GMT
Connection: keep-alive
ETag: "581af528-264"
Accept-Ranges: bytes

四、Nginx脚本内容

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig:   - 85 15
# description:  Nginx is an HTTP(S) server, HTTP(S) reverse \
#               proxy and IMAP/POP3 proxy server
# processname: nginx
# config:      /usr/local/nginx/conf/nginx.conf
# pidfile:     /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/opt/application/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/opt/application/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}
stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}
restart() {
    configtest || return $?
    stop
    start
}
reload() {
    configtest || return $?
    echo -n $"Reloading $prog: "
    killproc $nginx -HUP
    RETVAL=$?
    echo
}
force_reload() {
    restart
}
configtest() {
  $nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
    status $prog
}
rh_status_q() {
    rh_status >/dev/null 2>&1
}
case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart|configtest)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
            ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
        exit 2
esac

 5、Nginx配置文件讲解github

一、Nginx安装文件组成

主配置文件nginx.confconf.d/*.confweb

[root@realserver1 nginx]# tree -f .
.
├── ./client_body_temp
├── ./conf
│   ├── ./conf/fastcgi.conf
│   ├── ./conf/fastcgi.conf.default
│   ├── ./conf/fastcgi_params
│   ├── ./conf/fastcgi_params.default
│   ├── ./conf/koi-utf
│   ├── ./conf/koi-win
│   ├── ./conf/mime.types
│   ├── ./conf/mime.types.default
│   ├── ./conf/nginx.conf
│   ├── ./conf/nginx.conf.default
│   ├── ./conf/scgi_params
│   ├── ./conf/scgi_params.default
│   ├── ./conf/uwsgi_params
│   ├── ./conf/uwsgi_params.default
│   └── ./conf/win-utf
├── ./fastcgi_temp
├── ./html
│   ├── ./html/50x.html
│   └── ./html/index.html
├── ./logs
│   ├── ./logs/access.log
│   ├── ./logs/error.log
│   └── ./logs/nginx.pid
├── ./proxy_temp
├── ./sbin
│   └── ./sbin/nginx
├── ./scgi_temp
└── ./uwsgi_temp

9 directories, 21 files

 二、说说主配置./conf/nginx.conf文件

Mainapache

相关文章
相关标签/搜索