天天看點

NGINX總結

目錄

一、安裝        2

A)一般安裝        2

B)進階安裝        2

二、基本指令        3

三、配置檔案        3

A)配置檔案解釋        3

B)帶監控子產品的配置        4

C)虛拟主機的配置        5

五、事件模型介紹--I/O複用方法        7

A)标準事件模型        7

B)高效事件模型        7

六、關于LEMP的結構        8

A)Linux+Nginx+Mysql+Php        8

B)其他結構        8

七、軟體的平滑更新        10

A)簡單修改配置檔案        10

B)平滑更新二進制代碼        11

八、相關的處理信号        12

A)主程序可以處理的信号        12

B)工作程序可以處理的信号        12

一、安裝

A)一般安裝

./configure –prefix=/usr/local/nginx_2

make

make install

B)進階安裝

如果添加對網站狀态監控的功能,所需要做的工作如下

1)        安裝pcre包

tar zxvf pcre-7.2.tar.gz

cd pcre-7.2

./configure

2)        安裝nginx

./configure –prefix=/usr/local/nginx_2 --with-http_stub_status_module

狀态頁面

二、基本指令

nginx –v 顯示nginx的版本

[root@localhost sbin]# ./nginx -v

nginx version: nginx/0.5.34

nginx –V 顯示nginx的版本,編譯器和配置參數

[root@localhost sbin]# ./nginx -V

built by gcc 3.4.6 20060404 (Red Hat 3.4.6-3)

configure arguments: --prefix=/usr/local/nginx_2 --with-http_stub_status_module

nginx –t 不運作,僅僅測試配置檔案

nginx –c /to/config>為nginx指定配置檔案

[root@localhost sbin]# ./nginx -t -c /usr/local/nginx_2/conf/nginx_status.conf

2008/01/26 18:34:40 [info] 4242#0: the configuration file /usr/local/nginx_2/conf/nginx_status.conf syntax is ok

2008/01/26 18:34:40 [info] 4242#0: the configuration file /usr/local/nginx_2/conf/nginx_status.conf was tested successfully

啟動nginx

/usr/local/nginx_2/sbin/nginx –c /usr/local/nginx_2/conf/nginx_status.conf

注:如果不指定配置檔案,系統會按照Nginx安裝目錄下conf/nginx.conf的配置啟動。

退出nginx

   kill –QUIT nginx_pid

三、配置檔案

Nginx涉及到的配置檔案

koi-utf  koi-win  mime.types  mime.types.default  nginx.conf  nginx.conf.default  win-utf

其中主配置檔案是nginx.conf,主要的配置工作,都在這裡進行

mime.types檔案規定檔案的類型

A)配置檔案解釋

nginx.conf檔案

user          www        users;  規定使用者、使用者組

worker_processes 3; 規定工作程序數 預設是1

error_log logs/error.log;記錄日志檔案

pid        logs/nginx.pid; 主程序的程序号

events {

    use epoll;     規定使用的I/O複用模式

    worker_connections 1024; 規定程序的連接配接數 預設是1024

}

        最大用戶端數由worker_processes、worker_connections決定

        Max_client=worker_processes*worker_connections

                在反向代理情況下

                Max_client=worker_processes*worker_connections/4

http {

  include       conf/mime.types;

  default_type  application/octet-stream;

  log_format  main  '$remote_addr - $remote_user [$time_local] $request '

                      '"$status" $body_bytes_sent "$http_referer" '

                      '"$http_user_agent" "$http_x_forwarded_for"';

                       #規定了日志的檔案格式

   access_log  logs/access.log  main;

   keepalive_timeout  65;

    server {

        listen        80;

        server_name localhost;

        location / {

            root   html;

            index index.html index.htm;

        }

        # redirect server error pages to the static page /50x.html

        #

        error_page   500 502 503 504  /50x.html;

        location = /50x.html {

                              root   html;

                                                        }

    }

B)帶監控子產品的配置

################狀态監控######################

user          www        users;

worker_processes 3;

error_log logs/error.log;

pid        logs/nginx.pid;

    use epoll;

    worker_connections 1024;

    access_log  logs/access.log  main;

    keepalive_timeout  65;

#######################狀态監控部分############################

server{

  listen 80;

  server_name status.ceshi.com;

  location / {

               stub_status on;

                   access_log off;

             }

       }

C)虛拟主機的配置

###############虛拟主機配置文檔#########################

worker_processes  3;

error_log  logs/error.log;

   use epoll;

    worker_connections  1024;

        listen       172.20.20.244;

        listen       172.20.20.244:80;

        server_name  localhost;

            index  index.html index.htm;

######################虛拟主機部分####################

  server {

        listen      172.20.20.244;

        listen      172.20.20.244:80;

        listen      8000;

            root   www/love;

server {

       listen      172.20.20.244;

        listen      9000;

            root   www/duzhenhua;

        listen      9900;

            root   www/du;

   }

五、事件模型介紹--I/O複用方法

     與apache相類,nginx針對不同的作業系統,有不同的事件模型

      A)标準事件模型

       Select、poll屬于标準事件模型,如果目前系統不存在更有效的方法,nginx會選擇select或poll

      B)高效事件模型   

     Kqueue:使用于 FreeBSD 4.1+, OpenBSD 2.9+, NetBSD 2.0 和 MacOS X. 使用雙處理器的MacOS X系統使用kqueue可能會造成核心崩潰。

Epoll: 使用于Linux核心2.6版本及以後的系統。

/dev/poll:使用于 Solaris 7 11/99+, HP/UX 11.22+ (eventport), IRIX 6.5.15+ 和 Tru64 UNIX 5.1A+。

        Eventport:使用于 Solaris 10. 為了防止出現核心崩潰的問題, 有必要安裝安全更新檔。

六、關于LEMP的結構

     A)Linux+Nginx+Mysql+Php

    對于LEMP結構,網絡上有人搭建了,整個搭建過程可以參考:

    如果考慮将此結構應用到實際項目中,還需要具體測試。

B)其他結構

     我們大部分項目都是采用Linux+Apache+Mysql+Php,可以考慮在前端添加一個Nginx伺服器,由它來處理大量靜态頁面,其它頁面由原來系統處理。

結構圖

流程圖

七、軟體的平滑更新

     A)簡單修改配置檔案

     當系統管理者需要修改配置檔案時,不需要停機可以參考以下過程。

     kill  -HUP  Nginx_root_PID

   例如:

首先按照需要修改Nginx的配置檔案,然後使用-t參數測試配置檔案的正确性,一切驗證無誤,最後執行新的配置檔案。

[root@localhost sbin]# ps -ef|grep nginx

root      4258     1  0 16:12 ?        00:00:00 nginx: master process ./nginx

www       4259  4258  0 16:12 ?        00:00:00 nginx: worker process

www       4260  4258  0 16:12 ?        00:00:00 nginx: worker process

www       4261  4258  0 16:12 ?        00:00:00 nginx: worker process

root      4264  4220  0 16:12 pts/0    00:00:00 grep nginx

[root@localhost sbin]# kill -HUP 4258

www       4265  4258  0 16:14 ?        00:00:00 nginx: worker process

www       4266  4258  0 16:14 ?        00:00:00 nginx: worker process

www       4267  4258  0 16:14 ?        00:00:00 nginx: worker process

root      4269  4220  0 16:14 pts/0    00:00:00 grep nginx

     B)平滑更新二進制代碼

過程分析

       首先,使用新的可執行程式替換舊的,然後,發送USR2(kill –USR2 ROOT_PID)信号給主程序,主程序将重新命名它的.pid檔案為nginx.pid..oldbin,然後執行新的可執行程式,依次啟動新的主程序和工作程序。

          在這時,兩個nginx執行個體會同時運作,一起處理輸入的請求。需要逐漸停止舊的執行個體,此時需要發送WINCH信号給就的主程序,然後它的工作程序開始關閉。

                  一段時間後,舊的工作程序處理了所有已連接配接的請求後退出,就僅由新的工作程序來處理輸入的請求。

          這時,因為舊的伺服器還尚未關閉它監聽的套接字,是以通過下面幾步仍然可以恢複舊的伺服器。

a)        發送HUP信号給舊的主程序,它将在不重載配置檔案的情況下啟動它的工作程序。

b)        發送QUIT信号給新的主程序,要求其從容關閉其工作程序

c)        發送TERM信号給新的主程序,迫使其退出

d)        如果新的工作程序不退,可以發送kill指令

e)        新的主程序退出後,會恢複nginx.pid.oldbin為nginx.pid。一切照舊。

           如果更新成功,發送QUIT給舊的主程序。

八、相關的處理信号

A)主程序可以處理的信号

   TERM ,INT            快速關閉

    QUIT                        從容關閉

        HUP                                重載配置,用新的配置開始新的程序,從容關閉舊的工作程序

USR1                        重新打開日志檔案

USR2                         平滑更新可執行程式

WINCH                        從容關閉工作程序

B)工作程序可以處理的信号

TERM ,INT                         快速關閉

QUIT                                從容關閉

USR1                                重新打開日志檔案

參考網站:

<a href="http://wiki.codemongers.com/Main" target="_blank">http://wiki.codemongers.com/Main</a>

繼續閱讀