Nginx的介紹:
Nginx ("engine x") 是一個高性能的 HTTP 和 反向代理 服務器,也是一個IMAP/POP3/SMTP 代理服務器。 Nginx 是由 Igor Sysoev 爲俄羅斯訪問量第二的 Rambler.ru 站點開發的,第一個公開版本0.1.0發佈於2004年10月4日。其將源代碼以類BSD許可證的形式發佈,因它的穩定性、豐富的功能集、示例配置文件和低系統資源的消耗而聞名。2011年6月1日,nginx 1.0.4發佈。
Nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,供俄國大型的入口網站及搜索引擎Rambler(俄文:Рамблер)使用。其特點是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,在中國使用nginx網站用戶有:新浪、網易、騰訊等。
以上我們瞭解了nginx的由來,那麼接下來我們研究研究nginx的基本架構、基本功能、擴展能能,nginx的特性以及模塊的類型:
Nginx的基本架構:
一個master進程,生成一個或多個worker
事件驅動: epoll, kqueue, /dev/poll (event ports)
消息通知:select, poll, rt signals
支持sendfile, sendfile64
支持AIO
支持mmap
由此我們可以得出結論;nginx: 非阻塞、事件驅動、一個master生成一個或多個worker, 每個worker響應n個請求;
基本功能:
靜態資源的web服務器,能緩存打開的文件 描述符
http, smtp, pop3協議的反向代理服務器,緩存、負載均衡;
支持FastCGI (fpm)
模塊化,非DSO機制,過濾器zip,SSI及圖像大小調整;
支持SSL
擴展功能:
基於名稱和IP的虛擬主機;
支持keepalive
支持平滑升級
定製訪問日誌 ,支持使用日誌緩衝區提高日誌存儲性能
支持url rewrite
支持路徑別名
支持基於IP及用戶的訪問控制
支持速率限制,支持併發數限制
Nginx的特性:
模塊化設計、較好擴展性
高可靠性; master-->worker
低內存消耗; 10000個keep-alive連接在Nginx僅消耗2.5MB
支持熱部署;不停機而更新配置文件、更換日誌文件、更新服務器程序版本
模塊類型:
核心模塊
Standard HTTP modules
Optional HTTP modules
Mail modules
3rd party modules
nginx的安裝方式:
安裝Nginx可以採用YUM方法,Nginx官方提供的源可以保證安裝最新版本的穩定程序;但是在生產環境中,我們可以根據自己的需求,通過編譯源碼的方式來安裝。
下面以編譯安裝nginx-1.6.2.tar.gz進行說明:
1、解決依賴關係: # yum groupinstall "Development Tools" "Server Platform Deveopment" -y # yum install openssl-devel pcre-devel -y
2、添加用戶nginx,實現以之運行nginx服務進程: # groupadd -r nginx # useradd -r -g nginx nginx
3、創建編譯安裝存放的位置文件: #mkdir -pv /var/tmp/nginx/{client,proxy,fastcgi}
4、編譯、安裝: #./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --user=nginx --group=nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/nginx.lock --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_module --with-http_flv_module --with-http_mp4_module --http-client-body-temp-path=/var/tmp/nginx/client --http-proxy-temp-path=/var/tmp/nginx/proxy --http-fastcgi-temp-path=/var/tmp/nginx/fastcgi # make && make install
5、檢查語法:#/usr/local/nginx/sbin/nginx -t 啓動nginx服務:#/usr/local/nginx/sbin/nginx 查看80端口是否處於監聽狀態:#ss -tnl 打開瀏覽器輸入當前主機的地址會出現nginx的默認頁面
說明:
1、Nginx可以使用Tmalloc(快速、多線程的malloc庫及優秀性能分析工具)來加速內存分配,使用此功能需要事先安裝gperftools,而後在編譯nginx添加--with-google_perftools_module選項即可。
2、如果想使用nginx的perl模塊,可以通過爲configure腳本添加--with-http_perl_module選項來實現,但目前此模塊仍處於實驗性使用階段,可能會在運行中出現意外,因此,其實現方式這裏不再介紹。如果想使用基於nginx的cgi功能,也可以基於FCGI來實現,具體實現方法請參照網上的文檔。
3、爲nginx提供SysV init腳本:
新建文件/etc/rc.d/init.d/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: /etc/nginx/nginx.conf # config: /etc/sysconfig/nginx # pidfile: /var/run/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="/usr/local/nginx/sbin/nginx" prog=$(basename $nginx) NGINX_CONF_FILE="/etc/nginx/nginx.conf" [ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx lockfile=/var/lock/subsys/nginx make_dirs() { # make required directories user=`nginx -V 2>&1 | grep "configure arguments:" | sed 's/[^*]*--user=\([^ ]*\).*/\1/g' -` options=`$nginx -V 2>&1 | grep 'configure arguments:'` for opt in $options; do if [ `echo $opt | grep '.*-temp-path'` ]; then value=`echo $opt | cut -d "=" -f 2` if [ ! -d "$value" ]; then # echo "creating" $value mkdir -p $value && chown -R $user $value fi fi done } start() { [ -x $nginx ] || exit 5 [ -f $NGINX_CONF_FILE ] || exit 6 make_dirs 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 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
附:./configure編譯使用的選項說明:
1、--prefix=<path> - Nginx安裝路徑。如果沒有指定,默認爲 /usr/local/nginx; 2、--conf-path=<path> - 在沒有給定-c選項下默認的nginx.conf的路徑。如果沒有指定,默認爲<prefix>/conf/nginx.conf; 3、--user=<user> - 在nginx.conf中沒有指定user指令的情況下,默認的nginx使用的用戶。如果沒有指定,默認爲 nobody; 4、--group=<group> - 在nginx.conf中沒有指定user指令的情況下,默認的nginx使用的組。如果沒有指定,默認爲 nobody; 5、--error-log-path=<path> - 在nginx.conf中沒有指定error_log指令的情況下,默認的錯誤日誌的路徑。如果沒有指定,默認爲 <prefix>/logs/error.log; 6、--http-log-path=<path> - 在nginx.conf中沒有指定access_log指令的情況下,默認的訪問日誌的路徑。如果沒有指定,默認爲 <prefix>/logs/access.log; 7、--pid-path=<path> - 在nginx.conf中沒有指定pid指令的情況下,默認的nginx.pid的路徑。如果沒有指定,默認爲 <prefix>/logs/nginx.pid; 8、--lock-path=<path> - nginx.lock文件的路徑; 9、--with-http_ssl_module -支持SSL 10、--with-http_stub_status_module - 啓用 "server status" 頁 11、--with-http_gzip_static_module -啓動預壓縮功能 12、--with-http_flv_module - 啓用ngx_http_flv_module 13、--with-http_mp4_module -開啓nginx對flv視頻流的支持 14、--http-client-body-temp-path=/var/tmp/nginx/client-設置路徑的HTTP客戶端請求體的臨時文件 15、--http-proxy-temp-path=/var/tmp/nginx/proxy-設置HTTP代理的臨時文件的路徑 16、--http-fastcgi-temp-path=/var/tmp/nginx/fastcgi-設置臨時文件的HTTP請求
以上只是個人對nginx的小總結,不足之處,望各位兄弟姐妹指出,感激不盡下篇將是對nginx的配置文件進行詳細解析