一、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