Nginx基础php
Nginx ("engine x") 是一个高性能的HTTP和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。html
Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的Rambler.ru 站点开发的,它已经在该站点运行超过四年多了。Igor 将源代码以类BSD许可证的形式发布。自Nginx 发布四年来,Nginx已经由于它的稳定性、丰富的功能集、 示例配置文件和低系统资源的消耗而闻名了。前端
目前国内各大门户网站已经部署了Nginx,如新浪、网易、腾讯等;国内几个重要的视频分享网站也部署了Nginx,如六房间、酷6等。 新近发现Nginx 技术在国内日趋火热,愈来愈多的网站开始部署Nginx。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较适合。
Web服务器要为用户提供服务,必须以某种方式,工做在某个套接字上。通常Web服务器在处理用户请求是,通常有以下三种方式可选择:git
多进程方式:为每一个请求启动一个进程来处理。因为在操做系统中,生成进程、销毁进程、进程间切换都很消耗CPU和内存,当负载高是,性能会明显下降。 优势: 稳定性!因为采用独立进程处理独立请求,而进程之间是独立的,单个进程问题不会影响其余进程,所以稳定性最好。 缺点: 资源占用!当请求过大时,须要大量的进程处理请求,进程生成、切换开销很大,并且进程间资源是独立的,形成内存重复利用。 多线程方式:一个进程中用多个线程处理用户请求。因为线程开销明显小于进程,并且部分资源还能够共享,所以效率较高。 优势:开销较小!线程间部分数据是共享的,且线程生成与线程间的切换所需资源开销比进程间切换小得多。 缺点:稳定性!线程切换过快可能形成线程抖动,且线程过多会形成服务器不稳定。 异步方式:使用非阻塞方式处理请求,是三种方式中开销最小的。但异步方式虽然效率高,但要求也高,由于多任务之间的调度若是出现问题,就可能出现总体故障,所以使用异步工做的,通常是一些功能相对简单,但却符合服务器任务调度、且代码中没有影响调度的错误代码存在的程序。 优势:性能最好!一个进程或线程处理多个请求,不须要额外开销,性能最好,资源占用最低。 缺点:稳定性!某个进程或线程出错,可能致使大量请求没法处理,甚至致使整个服务宕机。
#编译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
[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
#!/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.conf
,conf.d/*.conf
;web
[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
Mainapache