【知識積累】大數據旅程-Nginx 簡介

一、Nginx

  • Nginx是一個高性能的HTTP和反向代理服務器,也是一個IMAP/OP3/SMTP代理服務器。
  • 第一個公開版本0.1.0發佈於2004年10月4日
  • 源代碼以BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的小號而聞名。
  • Nginx能夠支撐5萬併發連接(官方),且cpu、內存等資源消耗卻非常低,運行非常穩定。
  • 1.0.1發佈於2011年6月1日
  • Nginx是一款輕量級的Web服務器/方向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like協議下發行。
  • 其特點是佔有內存少,併發能力高。

二、Nginx和Apache比較

1、Nginx相對於Apache的優點

  • 輕量級,同樣起web服務,比apache佔用更少的內存及資源
  • 抗併發,nginx處理請求是異步非阻塞的,而apache是阻塞性的,在高併發下nginx能保持低資源低消耗高性能
  • 高度模塊化的設計,編寫模塊相對簡單
  • 社區活躍,各種高性能模塊出品迅速

2、Apache相對於nginx的優點

  • rewrite比nginx的rewrite強大
  • 模塊多
  • bug比nginx少

3、Nginx配置比Apache簡單
4、Apache是同步多進程模型,一個連接對應一個進程;Nginx是異步的,多個連接(萬級別)可以對應一個進程。apache一個連接一個進程,ngingx多個連接對應一個進程,進程數和CPU物理核心數相等,如果是四核服務器,那nginx進程數是4個。

三、進程切換

如果計算器只有一個內核,那同時處理多任務時,就需要進程切換。當物理時間中斷產生,CPU調用進程調度程序,進程調度程序記錄內核所有創建的進程,選擇一個空閒的程序,走地址入口執行該程序,就是將該程序從寄存器、緩存中刷回內存,將原程序放回寄存器和緩存中。

四、異步IO

  • 阻塞
  • 異步 - 輪詢和事件

五、安裝tenginx

https://blog.csdn.net/axin1240101543/article/details/90574807

六、加入Linux服務

1、創建文件nginx

2、編輯nginx修改默認的nginx安裝路徑

#!/bin/sh
#
# nginx - this script starts and stops the nginx daemon
#
# 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/darren/nginx/sbin/nginx"  #修改爲nginx的安裝路徑
prog=$(basename $nginx)

NGINX_CONF_FILE="/opt/darren/nginx/conf/nginx.conf"  #修改爲nginx的安裝路徑

[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx

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
    killall -9 nginx
}

restart() {
    configtest || return $?
    stop
    sleep 1
    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

3、附加權限

chmod +x nginx

4、啓動

service nginx start/stop/restart/status

5、加入服務

chkconfig nginx on

七、熱加載

1、原理

nginx是一個模塊化開發軟件,支持熱加載、熱升級
當niginx啓動後,nginx有兩個進程master和worker,worker用來處理所有的請求,當你更新了nginx的配置文件,重新加載,由master去讀取配置文件,創建一個新的worker進程,接收新的請求,老的worker進程處理完之前的請求後,銷燬老的worker進程。

2、命令

service nginx reload

3、爲什麼worker的用戶是nobody?

因爲是一個用來處理請求的進程,如果黑客攻擊,只能拿到nobody的權限,而不是root權限。

八、配置文件

1、單個後臺worker process進程的最大併發連接數

worker_connections:1024

2、併發總數(max_clients)

worker_processes*worker_connections

3、在設置了反向代理的情況下

max_clients=(worker_processes*worker_connections)/4
why:經驗值
worker_connections的大小與物理內存大小有關,max_clients必須小於系統可以打開的最大文件數。

4、操作系統能創建多少文件描述符?

系統可以打開的最大文件數和內存大小成正比,一般1GB內存的機器上可以打開的文件數大約是10W左右。worker_connections的值需根據worker_processes進程數目和系統可以打開的最大文件總數進行適當設置,使得併發總數小於操作系統可以打開的最大文件數目,其實質也就是根據主機的物理CPU和內存進行配置,當然理論上的併發總數可能會和實際有所偏差,因爲主機還有其他的工作進程需要消耗系統資源。

5、進程最多可以創建多少個文件描述符?

  • 查看:ulimit -a

  • 修改:ulimit -SHn 5000

6、events(參考時間模型):默認選取級別的最高的模型

類型:【kqueue | rtsig | epoll | /dev/poll | select | poll】

  • select(輪詢)
  • epoll模型(事件):Linux2.6以上版本內核中的高性能網絡I/O模型
  • kqueue模型:freeBSD

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章