Nginx的介紹和使用
1.什么是Nginx
Nginx(發音同 engine x)是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,并在一個BSD-like 協議下發行。由俄羅斯的程序設計師Igor Sysoev所開發,最初供俄國大型的入口網站及搜尋引擎Rambler(俄文:Рамблер)使用。 其特點是占有內存少,并發能力強,事實上nginx的并發能力確實在同類型的網頁伺服器中表現較好.目前中國大陸使用nginx網站用戶有:新浪、網易、 騰訊,另外知名的微網志Plurk也使用nginx。
優點:
(2)Nginx 是一個很強大的高性能Web和反向代理服務器,它具有很多非常優越的特性:
在高連接并發的情況下,Nginx是Apache服務器不錯的替代品:Nginx在美國是做虛擬主機生意的老板們經常選擇的軟件平臺之一。能夠支持高達 50,000 個并發連接數的響應,感謝Nginx為我們選擇了 epoll and kqueue作為開發模型。
(3)Nginx作為負載均衡服務器:Nginx 既可以在內部直接支持 Rails 和 PHP 程序對外進行服務,也可以支持作為 HTTP代理服務器對外進行服務。Nginx采用C進行編寫,不論是系統資源開銷還是CPU使用效率都比 Perlbal 要好很多。
作為郵件代理服務器:Nginx 同時也是一個非常優秀的郵件代理服務器(最早開發這個產品的目的之一也是作為郵件代理服務器),Last. fm 描述了成功并且美妙的使用經驗。
(4)Nginx 是一個安裝非常的簡單,配置文件非常簡潔(還能夠支持perl語法),Bugs非常少的服務器:Nginx 啟動特別容易,并且幾乎可以做到7*24不間斷運行,即使運行數個月也不需要重新啟動。你還能夠不間斷服務的情況下進行軟件版本的升級。
2.下載和安裝Nginx
Nginx的官方網站是http://nginx.org/cn/,英文主頁為http://nginx.net,從這里可以獲得Nginx的最新版本信息。Nginx有三個版本:穩定版、開發版和歷史穩定版。開發版更新較快,包含最新的功能和bug的修復,但同時也可能會遇到新的bug,開發版一旦更新穩定下來,就會被加入穩定版分支中。然而有些新功能不一定會被加到舊的穩定版中去。穩定版本更新較慢,但是bug較少,可以作為生產環境的首選,因此通常建議使用穩定版。歷史穩定版本為以往穩定版本的匯總,不包含最新的功能。
這里選擇當前的穩定版本nginx-0.7.65作為介紹對象,開始介紹編譯安裝。在安裝Nginx之前,確保系統已經安裝了gcc、 openssl-devel、 pcre-devel和zlib-devel軟件庫。
Linux開發庫是在安裝系統時通過手動選擇安裝的,gcc、 openssl-devel、zlib-devel三個軟件庫可以通過安裝光盤直接選擇安裝得到,而pcre-devel庫默認不在系統光盤中,所以這里重點介紹pcre-devel庫。
安裝Nginx所需的pcre-devel庫
安裝pcre庫是為了使Nginx支持HTTP Rewrite 模塊。下面進行安裝,過程如下。
[root@localhost home]# tar zxvf pcre-8.02.tar.gz [root@localhost home]# cd pcre-8.02 [root@localhost pcre-8.02]#./configure [root@localhost pcre-8.02]#make [root@localhost pcre-8.02]#make install開始安裝Nginx
Nginx的安裝非常簡單。在默認情況下,經過編譯安裝的Nginx包含了大部分可用模塊。可以通過“./configure --help”選項設置各個模塊的使用情況,例如對不需要的http_ssi模塊,可通過“--without-http_ssi_module”方式關閉此模塊;同理,如果需要“http_perl”模塊,那么可以通過“--with-http_perl_module”方式安裝此模塊。下面是安裝過程:
[root@localhost home]# tar zxvf nginx-0.7.65.tar.gz [root@localhost home]#cd nginx-0.7.65 [root@localhostnginx-0.7.65]#./configure \ --with-http_stub_status_module --prefix=/opt/nginx [root@localhost nginx-0.7.65]#make [root@localhost nginx-0.7.65]#make install
在上面的configure選項中“--with-http_stub_status_module”可以用來啟用 Nginx 的 NginxStatus 功能,以監控 Nginx 的當前狀態。
至此,Nginx已經安裝完成了。
3.Nginx配置
Nginx的配置文件是一個純文本文件,它一般位于Nginx安裝目錄的conf目錄下,整個配置文件是以block的形式組織的。每個block一般以一個大括號“{}”來表示,block可以分為幾個層次,整個配置文件中Main指令位于最高層,在Main層下面可以有Events、HTTP等層級,而在HTTP層中又包含有Server層,即 server block,server block中又可分為location層,并且一個server block中可以包含多個 location block。
一個完整的配置文件結構如下圖所示。
在了解完配置文件結構之后,就可以開始配置和調試Nginx了。
nginx.conf的配置文件詳解如下:
#開啟進程數 <=CPU數 worker_processes 1; #錯誤日志保存位置 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #進程號保存文件 #pid logs/nginx.pid; #等待事件 events { #每個進程最大連接數(最大連接=連接數x進程數) worker_connections 1024; } http { #文件擴展名與文件類型映射表 include 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; #打開發送文件 sendfile on; #tcp_nopush on; #連接超時時間 #keepalive_timeout 0; keepalive_timeout 65; #打開gzip壓縮 #gzip on; #設定請求緩沖 client_header_buffer_size 1k; large_client_header_buffers 4 4k; #設定負載均衡的服務器列表 upstream myproject { #weigth參數表示權值,權值越高被分配到的幾率越大 #max_fails 當有#max_fails個請求失敗,就表示后端的服務器不可用,默認為1,將其設置為0可以關閉檢查 #fail_timeout 在以后的#fail_timeout時間內nginx不會再把請求發往已檢查出標記為不可用的服務器 #這里指定多個源服務器,ip:端口,80端口的話可寫可不寫 server 192.168.1.78:8080 weight=5 max_fails=2 fail_timeout=600s; #server 192.168.1.222:8080 weight=3 max_fails=2 fail_timeout=600s; } #第一個虛擬主機 server { #監聽IP端口 listen 80; #主機名 server_name localhost; #設置字符集 #charset koi8-r; #本虛擬server的訪問日志 相當于局部變量 #access_log logs/host.access.log main; #對本server"/"啟用負載均衡 location / { #root /root; #定義服務器的默認網站根目錄位置 #index index.php index.html index.htm; #定義首頁索引文件的名稱 proxy_pass http://myproject; #請求轉向myproject定義的服務器列表 #以下是一些反向代理的配置可刪除. # proxy_redirect off; # proxy_set_header Host $host; # proxy_set_header X-Real-IP $remote_addr; # proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # client_max_body_size 10m; #允許客戶端請求的最大單文件字節數 # client_body_buffer_size 128k; #緩沖區代理緩沖用戶端請求的最大字節數, # proxy_connect_timeout 90; #nginx跟后端服務器連接超時時間(代理連接超時) # proxy_send_timeout 90; #后端服務器數據回傳時間(代理發送超時) # proxy_read_timeout 90; #連接成功后,后端服務器響應時間(代理接收超時) # proxy_buffer_size 4k; #設置代理服務器(nginx)保存用戶頭信息的緩沖區大小 # proxy_buffers 4 32k; #proxy_buffers緩沖區,網頁平均在32k以下的話,這樣設置 # proxy_busy_buffers_size 64k; #高負荷下緩沖大小(proxy_buffers*2) # proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大于這個值,將從upstream服務器傳 } location /upload { alias e:/upload; } #設定查看Nginx狀態的地址 location /NginxStatus { stub_status on; access_log off; #allow 192.168.0.3; #deny all; #auth_basic "NginxStatus"; #auth_basic_user_file conf/htpasswd; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # 定義錯誤提示頁面 error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { #多監聽 # listen 8000; #主機名 # listen somename:8080; # server_name somename alias another.alias; # location / { #WEB文件路徑 # root html; #默認首頁 # index index.html index.htm; # } #} # HTTPS server HTTPS SSL加密服務器 # #server { # listen 443; # server_name localhost; # ssl on; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_timeout 5m; # ssl_protocols SSLv2 SSLv3 TLSv1; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } #} }
4.nginx啟動,重啟,關閉命令
停止操作
停止操作是通過向nginx進程發送信號(什么是信號請參閱linux文 章)來進行的
步驟1:查詢nginx主進程號
ps -ef | grep nginx
在進程列表里 面找master進程,它的編號就是主進程號了。
步驟2:發送信號
從容停止Nginx:
kill -QUIT 主進程號
快速停止Nginx:
kill -TERM 主進程號
強制停止Nginx:
pkill -9 nginx
另外, 若在nginx.conf配置了pid文件存放路徑則該文件存放的就是Nginx主進程號,如果沒指定則放在nginx的logs目錄下。有了pid文 件,我們就不用先查詢Nginx的主進程號,而直接向Nginx發送信號了,命令如下:
kill -信號類型 '/usr/nginx/logs/nginx.pid'
平滑重啟
如果更改了配置就要重啟Nginx,要先關閉Nginx再打開?不是的,可以向Nginx 發送信號,平滑重啟。
平滑重啟命令:
kill -HUP 住進稱號或進程號文件路徑
或者使用
/usr/nginx/sbin/nginx -s reload
注意,修改了配置文件后最好先檢查一下修改過的配置文件是否正 確,以免重啟后Nginx出現錯誤影響服務器穩定運行。判斷Nginx配置是否正確命令如下:
nginx -t -c /usr/nginx/conf/nginx.conf
或者
/usr/nginx/sbin/nginx -t
平滑升級
如果服務器正在運行的Nginx要進行升級、添加或刪除模塊時,我們需 要停掉服務器并做相應修改,這樣服務器就要在一段時間內停止服務,Nginx可以在不停機的情況下進行各種升級動作而不影響服務器運行。
步驟1:
如 果升級Nginx程序,先用新程序替換舊程序文件,編譯安裝的話新程序直接編譯到Nginx安裝目錄中。
步 驟2:執行命令
kill -USR2 舊版程序的主進程號或進程文件名
此時舊的Nginx主進程將會把自己的進程文件改名為.oldbin,然后執行新版 Nginx。新舊Nginx會同市運行,共同處理請求。
這時要逐步停止舊版 Nginx,輸入命令:
kill -WINCH 舊版主進程號
慢慢舊的工作進程就都會隨著任務執行完畢而退出,新版的Nginx的工作進程會逐漸取代舊版 工作進程。
此 時,我們可以決定使用新版還是恢復到舊版。
不重載配置啟動新/舊工作進程
kill -HUP 舊/新版主進程號
從容關閉舊/新進程
kill -QUIT 舊/新主進程號
如果此時報錯,提示還有進程沒有結束就用下面命令先關閉舊/新工作進程,再關閉主進程號:
kill -TERM 舊/新工作進程號
來自:http://blog.csdn.net/shimiso