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