1. 程式人生 > >Nginx 之一:編譯安裝nginx 1.8.1 及配置

Nginx 之一:編譯安裝nginx 1.8.1 及配置

一:基介紹

  官網地址www.nginx.org,nginx是由1994年畢業於俄羅斯國立莫斯科鮑曼科技大學的同學為俄羅斯rambler.ru公司開發的,開發工作最早從2002年開始,第一次公開發布時間是2004年10月4日,版本號是0.1.0

 Nginx是單程序單執行緒模型,即啟動的工作程序只有一個程序響應客戶端請求,不像apache可以在一個程序內啟動多個執行緒響應可請求,因此在記憶體佔用上比apache小的很多。Nginx維持一萬個非活動會話只要2.5M記憶體。Nginx和Mysql是CPU密集型的,就是對CPU的佔用比較大,預設session在本地檔案儲存,支援將session儲存在memcache,但是memcache預設支援最大1M的課hash物件。

  nginx的版本分為開發版、穩定版和過期版,nginx以功能豐富著稱,它即可以作為http伺服器,也可以作為反向代理伺服器或者郵件伺服器,能夠快速的響應靜態網頁的請求,支援FastCGI/SSL/Virtual Host/URL Rwrite/Gzip/HTTP Basic Auth等功能,並且支援第三方的功能擴充套件。

  nginx安裝可以使用yum或原始碼安裝,推薦使用原始碼,一是yum的版本比較舊,二是使用原始碼可以自定義功能,方便業務的上的使用,原始碼安裝需要提前準備標準的編譯器,GCC的全稱是(GNU Compiler collection),其有GNU開發,並以GPL即LGPL許可,是自由的類UNIX即蘋果電腦Mac OS X作業系統的標準編譯器,因為GCC原本只能處理C語言,所以原名為GNU C語言編譯器,後來得到快速發展,可以處理C++,Fortran,pascal,objective-C,java以及Ada等其他語言,此外還需要Automake工具,以完成自動建立Makefile的工作,Nginx的一些模組需要依賴第三方庫,比如pcre(支援rewrite),zlib(支援gzip模組)和openssl(支援ssl模組)

二:安裝

1、環境準備:先安裝準備環境

yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel 

複製程式碼
  gcc為GNU Compiler Collection的縮寫,可以編譯C和C++原始碼等,它是GNU開發的C和C++以及其他很多種語言 的編譯器(最早的時候只能編譯C,後來很快進化成一個編譯多種語言的集合,如Fortran、Pascal、Objective-C、Java、Ada、 Go等。)
  gcc 在編譯C++原始碼的階段,只能編譯 C++ 原始檔,而不能自動和 C++ 程式使用的庫連結(編譯過程分為編譯、連結兩個階段,注意不要和可執行檔案這個概念搞混,相對可執行檔案來說有三個重要的概念:編譯(compile)、連結(link)、載入(load)。源程式檔案被編譯成目標檔案,多個目標檔案連同庫被連結成一個最終的可執行檔案,可執行檔案被載入到記憶體中執行)。因此,通常使用 g++ 命令來完成 C++ 程式的編譯和連線,該程式會自動呼叫 gcc 實現編譯。
  gcc-c++也能編譯C原始碼,只不過把會把它當成C++原始碼,字尾為.c的,gcc把它當作是C程式,而g++當作是c++程式;字尾為.cpp的,兩者都會認為是c++程式,注意,雖然c++是c的超集,但是兩者對語法的要求是有區別的。
  automake是一個從Makefile.am檔案自動生成Makefile.in的工具。為了生成Makefile.in,automake還需用到perl,由於automake建立的釋出完全遵循GNU標準,所以在建立中不需要perl。libtool是一款方便生成各種程式庫的工具。
  pcre pcre-devel:在Nginx編譯需要 PCRE(Perl Compatible Regular Expression),因為Nginx 的Rewrite模組和HTTP 核心模組會使用到PCRE正則表示式語法。   zlip zlib-devel:nginx啟用壓縮功能的時候,需要此模組的支援。   openssl openssl-devel:開啟SSL的時候需要此模組的支援。
複製程式碼

 2、下載nginx 安裝包:  官網地址:http://nginx.org/

截止得到當前,最新的版本為1.8.1,在linux使用wget下載:

複製程式碼
[[email protected] ~]# wget http://nginx.org/download/nginx-1.8.1.tar.gz 
--2016-04-23 10:22:55-- http://nginx.org/download/nginx-1.8.1.tar.gz Resolving nginx.org (nginx.org)... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ... Connecting to nginx.org (nginx.org)|206.251.255.63|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 833473 (814K) [application/octet-stream] Saving to: ‘nginx-1.8.1.tar.gz.1100%[==============================================================================================================>] 833,473 251KB/s in 3.2s 2016-04-23 10:23:00 (251 KB/s) - ‘nginx-1.8.1.tar.gz.1’ saved [833473/833473]
複製程式碼

3、解壓安裝包:

[[email protected] ~]# tar  xvf nginx-1.8.1.tar.gz
[[email protected] ~]# cd nginx-1.8.1 [[email protected] nginx-1.8.1]$ ls auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src

4、編譯nginx:make

編譯是為了檢查系統環境是否符合編譯安裝的要求,比如是否有gcc編譯工具,是否支援編譯引數當中的模組,並根據開啟的引數等生成Makefile檔案為下一步做準備:

複製程式碼
[[email protected] nginx-1.8.1]# ./configure  --prefix=/usr/local/nginx  --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --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  --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_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/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
複製程式碼

結果如下:

5、生成指令碼及配置檔案:make

編譯步驟,根據Makefile檔案生成相應的模組

6、安裝:make install

建立目錄,並將生成的模組和檔案複製到相應的目錄: 

備註:nginx完成安裝以後,有四個主要的目錄:

複製程式碼
conf:儲存nginx所有的配置檔案,其中nginx.conf是nginx伺服器的最核心最主要的配置檔案,其他的.conf則是用來配置nginx相關的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params兩個檔案,配置檔案一般都有個樣板配置檔案,是檔名.default結尾,使用的使用將其複製為並將default去掉即可。
html目錄中儲存了nginx伺服器的web檔案,但是可以更改為其他目錄儲存web檔案,另外還有一個50x的web檔案是預設的錯誤頁面提示頁面。
logs:用來儲存nginx伺服器的訪問日誌錯誤日誌等日誌,logs目錄可以放在其他路徑,比如/var/logs/nginx裡面。
sbin:儲存nginx二進位制啟動指令碼,可以接受不同的引數以實現不同的功能。
複製程式碼

 

7、啟動:

將監聽埠改為8090,避免80埠衝突:

listen       8090;

8、通過命令啟動和關閉nginx:

複製程式碼
[[email protected] sbin]# /usr/local/nginx/sbin/nginx/nginx
nginx: [emerg] getpwnam("nginx") failed  #沒有nginx使用者

[[email protected] sbin]# /usr/local/nginx/sbin/nginx/nginx nginx: [emerg] mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory) #目錄不存在 [[email protected] sbin]# /usr/local/nginx/sbin/nginx/nginx #直到沒有報錯,才算啟動完成
複製程式碼

9、重讀配置檔案和關閉服務:

[[email protected] local]# /usr/local/nginx/sbin/nginx/nginx  #啟動 服務
[[email protected] local]# /usr/local/nginx/sbin/nginx/nginx   -s  reload  #不停止服務重讀配置檔案
[[email protected] local]# /usr/local/nginx/sbin/nginx/nginx -s stop #停止服務  #停止服務

10.驗證埠是否開啟:

複製程式碼
[[email protected] sbin]# ps -ef | grep nginx
root     13228     1  0 Apr23 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx/nginx #nginx的主程序,只有一個主程序 nginx 13229 13228 0 Apr23 ? 00:00:00 nginx: worker process #nginx工作程序,預設只有一個,可以通過修改nginx.conf中的worker_processes 1; 引數啟動多個工作程序 root 13295 1400 0 00:01 pts/0 00:00:00 grep --color=auto nginx [[email protected] local]# lsof -i:8090 #顯示佔用8090的程序 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 13337 root 6u IPv4 5932680 0t0 TCP *:8090 (LISTEN) nginx 13338 nginx 6u IPv4 5932680 0t0 TCP *:8090 (LISTEN)
複製程式碼

 11、通過給nginx的主程序ID號傳送訊號啟動或停止nginx:

獲取nginx主程序號的辦法:

[[email protected] nginx]# cat /var/run/nginx/nginx.pid   #檢視nginx的pid檔案,此檔案儲存的就是nginx的主程序id
13337  #次ID是隨機的,每次啟動都不一樣的
[[email protected] nginx]# ps -ef   | grep nginx #過濾nginx的程序號 root 13337 1 0 00:05 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx/nginx nginx 21568 13337 0 10:58 ? 00:00:00 nginx: worker process

支援的訊號:

複製程式碼
[[email protected] nginx]# kill  -QUIT 13337  #平緩關閉Nginx,即不再接受新的請求,但是等當前請求處理完畢後再關閉Nginx。
[[email protected] nginx]# kill  -TERM  21665 #快速停止Nginx服務 [[email protected] nginx]# kill -HUP 21703 #使用新的配置檔案啟動程序然後平緩停止原有的nginx程序,即平滑重啟。 [[email protected] nginx]# kill -USR1 21703 #重新開啟配置檔案,用於nginx 日誌切割 日期切割的指令碼: #!/bin/bash PID=`cat /var/run/nginx/nginx.pid` mv /var/log/nginx/access.log /var/log/nginx/`date +%Y_%m_%d:%H:%M:%S`.access.log kill -USR1 $PID [[email protected] nginx]# kill -USR2 21703 #使用新版本的nginx檔案啟動服務,然後在平緩停止原有的nginx服務,即平滑升級。 [[email protected] nginx]# kill -WINCH 21703 #平滑停止nginx的工作程序,用於nginx平滑升級。
複製程式碼

 

三:nginx 主配置檔案:nginx.conf

3.1:預設配置:配置檔案預設儲存在path/conf當中,預設的配置檔案為nginx.conf,以下是編譯安裝後的預設配置:

複製程式碼
[[email protected] conf]# grep -v "#" nginx.conf | grep -v  "^$"   #全域性生效,主要設定nginx的啟動使用者/組,啟動的工作程序數量,Nginx的PID路徑,日誌路徑等。 worker_processes 1; #預設啟動一個工作程序 events { #events設定快,主要影響nginx伺服器與使用者的網路連線,比如是否允許同時接受多個網路連線,使用哪種事件驅動模型處理請求,每個工作程序可以同時支援的最大連線數,是否開啟對多工作程序下的網路連線進行序列化等。 worker_connections 1024; #設定nginx可以接受的最大併發,多個程序只和 } http { #http塊是Nginx伺服器配置中的重要部分,快取、代理和日誌格式定義等絕大多數功能和第三方模組都可以在這設定,http塊可以包含多個server塊,而一個server塊中又可以包含多個location塊,server塊可以配置檔案引入、MIME-Type定義、日誌自定義、是否啟用sendfile、連線超時時間和單個連結的請求上限等。 include mime.types; #副檔名與檔案型別對映表 default_type application/octet-stream; #預設檔案型別 sendfile on; #是否呼叫 sendfile 函式(zero copy -->零copy方式)來輸出檔案,普通應用開啟,可以大幅提升nginx的讀檔案效能,如果伺服器是下載的就需要關閉, keepalive_timeout 65; #長連線超時時間,單位是秒 server { #設定一個虛擬機器主機,可以包含自己的全域性快,同時也可以包含多個locating模組。比如本虛擬機器監聽的埠、本虛擬機器的名稱和IP配置,多個server 可以使用一個埠,比如都使用8090埠提供web服務、 listen 8090; #server的全域性配置,配置監聽的埠 server_name localhost; #本server的名稱,當訪問此名稱的時候nginx會呼叫當前serevr內部的配置程序匹配。 location / { #location其實是server的一個指令,為nginx伺服器提供比較多而且靈活的指令,都是在location中提現的,主要是基於nginx接受到的請求字串,對使用者請求的UIL進行匹配,並對特定的指令進行處理,包括地址重定向、資料快取和應答控制等功能都是在這部分實現,另外很多第三方模組的配置也是在location模組中配置。 root html; #相當於預設頁面的目錄名稱,預設是相對路徑,可以使用絕對路徑配置。 index index.html index.htm; } error_page 500 502 503 504 /50x.html; #錯誤頁面的檔名稱 location = /50x.html { #location處理對應的不同錯誤碼的頁面定義到/50x.html,這個跟對應其server中定義的目錄下。 root html; #定義預設頁面所在的目錄 } } }
複製程式碼

 3.2:配置nginx 主程序的啟動使用者和工作程序數:

user  xxxx;   #每一條指令都要以分號結尾
worker_processes  1; #可以指定啟動的固定nginx程序數,或使用auto,auto是啟動與當前CPU 執行緒相同的程序數,如CPU是四核八執行緒的就啟動八個程序的Nginx工作程序。

3.3:繫結Nginx 工作程序到不同的CPU上:

  預設Nginx是不進行保定的,繫結並不能是當前nginx程序獨佔以一核心CPU,但是可以保證此程序不會執行在其他核心上,這就極大減少了nginx 工作程序在不同cpu上的跳轉,減少了CPU對程序的資源分配與回收,因此可以有效的提升nginx伺服器的效能,配置如下:

複製程式碼
[[email protected] nginx]# grep process /proc/cpuinfo  | wc -l #確認CPU的核心數量
4
四個執行緒CPU的配置:
worker_processes  4; worker_cpu_affinity 0001 0010 0100 1000; 八個執行緒CPU的配置: worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
複製程式碼

3.4:PID和錯誤日誌檔案路徑:

複製程式碼
#pid        logs/nginx.pid;   #可以指定絕對路徑
#error_log  logs/error.log;  #指定錯誤日誌路徑
#error_log  logs/error.log  notice;  #指定一個日誌記錄級別
#error_log  logs/error.log  info;

支援的日誌級別:
語法:
error_log file [ debug | info | notice | warn | error | crit ] | [{ debug_core | debug_alloc | debug_mutex | debug_event | debug_http | debug_mail | debug_mysql } ] 日誌級別 = 錯誤日誌級別 | 除錯日誌級別; 或者 日誌級別 = 錯誤日誌級別; 錯誤日誌的級別: emerg, alert, crit, error, warn, notic, info, debug, 除錯日誌的級別: debug_core, debug_alloc, debug_mutex, debug_event, debug_http, debug_mail, debug_mysql error_log 指令的日誌級別配置分為錯誤日誌級別和除錯日誌級別,錯誤日誌只能設定一個級別,而且錯誤日誌必須書寫在除錯日誌級別的前面,另外除錯日誌可以設定多個級別,其他配置方法可能無法滿足需求。
複製程式碼

 3.5:配置檔案的引入:include

複製程式碼
include file;  #file是要匯入的檔案,支援相對路徑,一般在html目錄裡面
匯入一個conf檔案,並配置不同主機名的頁面,編輯nginx.conf主配置檔案:
include  /usr/local/nginx/conf.d/samsung.conf;  #在最後一個大括號裡面加入一項,*是匯入任何以conf結尾的配置檔案

在/usr/local/nginx/conf.d/建立一個samsung.conf,內容如下:
[[email protected] nginx]# grep -v "#" conf.d/samsung.conf | grep -v "^$" server { listen 8090; server_name samsung.chinacloudapp.cn; location / { root html; index index1.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
複製程式碼

 

一:基介紹

  官網地址www.nginx.org,nginx是由1994年畢業於俄羅斯國立莫斯科鮑曼科技大學的同學為俄羅斯rambler.ru公司開發的,開發工作最早從2002年開始,第一次公開發布時間是2004年10月4日,版本號是0.1.0

 Nginx是單程序單執行緒模型,即啟動的工作程序只有一個程序響應客戶端請求,不像apache可以在一個程序內啟動多個執行緒響應可請求,因此在記憶體佔用上比apache小的很多。Nginx維持一萬個非活動會話只要2.5M記憶體。Nginx和Mysql是CPU密集型的,就是對CPU的佔用比較大,預設session在本地檔案儲存,支援將session儲存在memcache,但是memcache預設支援最大1M的課hash物件。

  nginx的版本分為開發版、穩定版和過期版,nginx以功能豐富著稱,它即可以作為http伺服器,也可以作為反向代理伺服器或者郵件伺服器,能夠快速的響應靜態網頁的請求,支援FastCGI/SSL/Virtual Host/URL Rwrite/Gzip/HTTP Basic Auth等功能,並且支援第三方的功能擴充套件。

  nginx安裝可以使用yum或原始碼安裝,推薦使用原始碼,一是yum的版本比較舊,二是使用原始碼可以自定義功能,方便業務的上的使用,原始碼安裝需要提前準備標準的編譯器,GCC的全稱是(GNU Compiler collection),其有GNU開發,並以GPL即LGPL許可,是自由的類UNIX即蘋果電腦Mac OS X作業系統的標準編譯器,因為GCC原本只能處理C語言,所以原名為GNU C語言編譯器,後來得到快速發展,可以處理C++,Fortran,pascal,objective-C,java以及Ada等其他語言,此外還需要Automake工具,以完成自動建立Makefile的工作,Nginx的一些模組需要依賴第三方庫,比如pcre(支援rewrite),zlib(支援gzip模組)和openssl(支援ssl模組)

二:安裝

1、環境準備:先安裝準備環境

yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel 

複製程式碼
  gcc為GNU Compiler Collection的縮寫,可以編譯C和C++原始碼等,它是GNU開發的C和C++以及其他很多種語言 的編譯器(最早的時候只能編譯C,後來很快進化成一個編譯多種語言的集合,如Fortran、Pascal、Objective-C、Java、Ada、 Go等。)
  gcc 在編譯C++原始碼的階段,只能編譯 C++ 原始檔,而不能自動和 C++ 程式使用的庫連結(編譯過程分為編譯、連結兩個階段,注意不要和可執行檔案這個概念搞混,相對可執行檔案來說有三個重要的概念:編譯(compile)、連結(link)、載入(load)。源程式檔案被編譯成目標檔案,多個目標檔案連同庫被連結成一個最終的可執行檔案,可執行檔案被載入到記憶體中執行)。因此,通常使用 g++ 命令來完成 C++ 程式的編譯和連線,該程式會自動呼叫 gcc 實現編譯。
  gcc-c++也能編譯C原始碼,只不過把會把它當成C++原始碼,字尾為.c的,gcc把它當作是C程式,而g++當作是c++程式;字尾為.cpp的,兩者都會認為是c++程式,注意,雖然c++是c的超集,但是兩者對語法的要求是有區別的。
  automake是一個從Makefile.am檔案自動生成Makefile.in的工具。為了生成Makefile.in,automake還需用到perl,由於automake建立的釋出完全遵循GNU標準,所以在建立中不需要perl。libtool是一款方便生成各種程式庫的工具。
  pcre pcre-devel:在Nginx編譯需要 PCRE(Perl Compatible Regular Expression),因為Nginx 的Rewrite模組和HTTP 核心模組會使用到PCRE正則表示式語法。   zlip zlib-devel:nginx啟用壓縮功能的時候,需要此模組的支援。   openssl openssl-devel:開啟SSL的時候需要此模組的支援。
複製程式碼

 2、下載nginx 安裝包:  官網地址:http://nginx.org/

截止得到當前,最新的版本為1.8.1,在linux使用wget下載:

複製程式碼
[[email protected] ~]# wget http://nginx.org/download/nginx-1.8.1.tar.gz 
--2016-04-23 10:22:55-- http://nginx.org/download/nginx-1.8.1.tar.gz Resolving nginx.org (nginx.org)... 206.251.255.63, 95.211.80.227, 2001:1af8:4060:a004:21::e3, ... Connecting to nginx.org (nginx.org)|206.251.255.63|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 833473 (814K) [application/octet-stream] Saving to: ‘nginx-1.8.1.tar.gz.1100%[==============================================================================================================>] 833,473 251KB/s in 3.2s 2016-04-23 10:23:00 (251 KB/s) - ‘nginx-1.8.1.tar.gz.1’ saved [833473/833473]
複製程式碼

3、解壓安裝包:

[[email protected] ~]# tar  xvf nginx-1.8.1.tar.gz
[[email protected] ~]# cd nginx-1.8.1 [[email protected] nginx-1.8.1]$ ls auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src

4、編譯nginx:make

編譯是為了檢查系統環境是否符合編譯安裝的要求,比如是否有gcc編譯工具,是否支援編譯引數當中的模組,並根據開啟的引數等生成Makefile檔案為下一步做準備:

複製程式碼
[[email protected] nginx-1.8.1]# ./configure  --prefix=/usr/local/nginx  --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/usr/local/nginx/conf/nginx.conf --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  --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_gzip_static_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/fcgi/ --http-uwsgi-temp-path=/var/tmp/nginx/uwsgi --http-scgi-temp-path=/var/tmp/nginx/scgi --with-pcre
複製程式碼

結果如下:

5、生成指令碼及配置檔案:make

編譯步驟,根據Makefile檔案生成相應的模組

6、安裝:make install

建立目錄,並將生成的模組和檔案複製到相應的目錄: 

備註:nginx完成安裝以後,有四個主要的目錄:

複製程式碼
conf:儲存nginx所有的配置檔案,其中nginx.conf是nginx伺服器的最核心最主要的配置檔案,其他的.conf則是用來配置nginx相關的功能的,例如fastcgi功能使用的是fastcgi.conf和fastcgi_params兩個檔案,配置檔案一般都有個樣板配置檔案,是檔名.default結尾,使用的使用將其複製為並將default去掉即可。
html目錄中儲存了nginx伺服器的web檔案,但是可以更改為其他目錄儲存web檔案,另外還有一個50x的web檔案是預設的錯誤頁面提示頁面。
logs:用來儲存nginx伺服器的訪問日誌錯誤日誌等日誌,logs目錄可以放在其他路徑,比如/var/logs/nginx裡面。
sbin:儲存nginx二進位制啟動指令碼,可以接受不同的引數以實現不同的功能。
複製程式碼

 

7、啟動:

將監聽埠改為8090,避免80埠衝突:

listen       8090;

8、通過命令啟動和關閉nginx:

複製程式碼
[[email protected] sbin]# /usr/local/nginx/sbin/nginx/nginx
nginx: [emerg] getpwnam("nginx") failed  #沒有nginx使用者

[[email protected] sbin]# /usr/local/nginx/sbin/nginx/nginx nginx: [emerg] mkdir() "/var/tmp/nginx/client/" failed (2: No such file or directory) #目錄不存在 [[email protected] sbin]# /usr/local/nginx/sbin/nginx/nginx #直到沒有報錯,才算啟動完成
複製程式碼

9、重讀配置檔案和關閉服務:

[[email protected] local]# /usr/local/nginx/sbin/nginx/nginx  #啟動 服務
[[email protected] local]# /usr/local/nginx/sbin/nginx/nginx   -s  reload  #不停止服務重讀配置檔案
[[email protected] local]# /usr/local/nginx/sbin/nginx/nginx -s stop #停止服務  #停止服務

10.驗證埠是否開啟:

複製程式碼
[[email protected] sbin]# ps -ef | grep nginx
root     13228     1  0 Apr23 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx/nginx #nginx的主程序,只有一個主程序 nginx 13229 13228 0 Apr23 ? 00:00:00 nginx: worker process #nginx工作程序,預設只有一個,可以通過修改nginx.conf中的worker_processes 1; 引數啟動多個工作程序 root 13295 1400 0 00:01 pts/0 00:00:00 grep --color=auto nginx [[email protected] local]# lsof -i:8090 #顯示佔用8090的程序 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 13337 root 6u IPv4 5932680 0t0 TCP *:8090 (LISTEN) nginx 13338 nginx 6u IPv4 5932680 0t0 TCP *:8090 (LISTEN)
複製程式碼

 11、通過給nginx的主程序ID號傳送訊號啟動或停止nginx:

獲取nginx主程序號的辦法:

[[email protected] nginx]# cat /var/run/nginx/nginx.pid   #檢視nginx的pid檔案,此檔案儲存的就是nginx的主程序id
13337  #次ID是隨機的,每次啟動都不一樣的
[[email protected] nginx]# ps -ef   | grep nginx #過濾nginx的程序號 root 13337 1 0 00:05 ? 00:00:00 nginx: master process /usr/local/nginx/sbin/nginx/nginx nginx 21568 13337 0 10:58 ? 00:00:00 nginx: worker process

支援的訊號:

複製程式碼
[[email protected] nginx]# kill  -QUIT 13337  #平緩關閉Nginx,即不再接受新的請求,但是等當前請求處理完畢後再關閉Nginx。
[[email protected] nginx]# kill  -TERM  21665 #快速停止Nginx服務 [[email protected] nginx]# kill -HUP 21703 #使用新的配置檔案啟動程序然後平緩停止原有的nginx程序,即平滑重啟。 [[email protected] nginx]# kill -USR1 21703 #重新開啟配置檔案,用於nginx 日誌切割 日期切割的指令碼: #!/bin/bash PID=`cat /var/run/nginx/nginx.pid` mv /var/log/nginx/access.log /var/log/nginx/`date +%Y_%m_%d:%H:%M:%S`.access.log kill -USR1 $PID [[email protected] nginx]# kill -USR2 21703 #使用新版本的nginx檔案啟動服務,然後在平緩停止原有的nginx服務,即平滑升級。 [[email protected] nginx]# kill -WINCH 21703 #平滑停止nginx的工作程序,用於nginx平滑升級。
複製程式碼

 

三:nginx 主配置檔案:nginx.conf

3.1:預設配置:配置檔案預設儲存在path/conf當中,預設的配置檔案為nginx.conf,以下是編譯安裝後的預設配置:

複製程式碼
[[email protected] conf]# grep -v "#" nginx.conf | grep -v  "^$"   #全域性生效,主要設定nginx的啟動使用者/組,啟動的工作程序數量,Nginx的PID路徑,日誌路徑等。 worker_processes 1; #預設啟動一個工作程序 events { #events設定快,主要影響nginx伺服器與使用者的網路連線,比如是否允許同時接受多個網路連線,使用哪種事件驅動模型處理請求,每個工作程序可以同時支援的最大連線數,是否開啟對多工作程序下的網路連線進行序列化等。 worker_connections 1024; #設定nginx可以接受的最大併發,多個程序只和 } http { #http塊是Nginx伺服器配置中的重要部分,快取、代理和日誌格式定義等絕大多數功能和第三方模組都可以在這設定,http塊可以包含多個server塊,而一個server塊中又可以包含多個location塊,server塊可以配置檔案引入、MIME-Type定義、日誌自定義、是否啟用sendfile、連線超時時間和單個連結的請求上限等。 include mime.types; #副檔名與檔案型別對映表 default_type application/octet-stream; #預設檔案型別 sendfile on; #是否呼叫 sendfile 函式(zero copy -->零copy方式)來輸出檔案,普通應用開啟,可以大幅提升nginx的讀檔案效能,如果伺服器是下載的就需要關閉, keepalive_timeout 65; #長連線超時時間,單位是秒 server { #設定一個虛擬機器主機,可以包含自己的全域性快,同時也可以包含多個locating模組。比如本虛擬機器監聽的埠、本虛擬機器的名稱和IP配置,多個server 可以使用一個埠,比如都使用8090埠提供web服務、 listen 8090; #server的全域性配置,配置監聽的埠 server_name localhost; #本server的名稱,當訪問此名稱的時候nginx會呼叫當前serevr內部的配置程序匹配。 location / { #location其實是server的一個指令,為nginx伺服器提供比較多而且靈活的指令,都是在location中提現的,主要是基於nginx接受到的請求字串,對使用者請求的UIL進行匹配,並對特定的指令進行處理,包括地址重定向、資料快取和應答控制等功能都是在這部分實現,另外很多第三方模組的配置也是在location模組中配置。 root html; #相當於預設頁面的目錄名稱,預設是相對路徑,可以使用絕對路徑配置。 index index.html index.htm; } error_page 500 502 503 504 /50x.html; #錯誤頁面的檔名稱 location = /50x.html { #location處理對應的不同錯誤碼的頁面定義到/50x.html,這個跟對應其server中定義的目錄下。 root html; #定義預設頁面所在的目錄 } } }
複製程式碼

 3.2:配置nginx 主程序的啟動使用者和工作程序數:

user  xxxx;   #每一條指令都要以分號結尾
worker_processes  1; #可以指定啟動的固定nginx程序數,或使用auto,auto是啟動與當前CPU 執行緒相同的程序數,如CPU是四核八執行緒的就啟動八個程序的Nginx工作程序。

3.3:繫結Nginx 工作程序到不同的CPU上:

  預設Nginx是不進行保定的,繫結並不能是當前nginx程序獨佔以一核心CPU,但是可以保證此程序不會執行在其他核心上,這就極大減少了nginx 工作程序在不同cpu上的跳轉,減少了CPU對程序的資源分配與回收,因此可以有效的提升nginx伺服器的效能,配置如下:

複製程式碼
[[email protected] nginx]# grep process /proc/cpuinfo  | wc -l #確認CPU的核心數量
4
四個執行緒CPU的配置:
worker_processes  4; worker_cpu_affinity 0001 0010 0100 1000; 八個執行緒CPU的配置: worker_processes 8; worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000;
複製程式碼

3.4:PID和錯誤日誌檔案路徑:

複製程式碼
#pid        logs/nginx.pid;   #可以指定絕對路徑
#error_log  logs/error.log;  #指定錯誤日誌路徑
#error_log  logs/error.log  notice;  #指定一個日誌記錄級別
#error_log  logs/error.log  info;

支援的日誌級別:
語法:
error_log file [ debug | info | notice | warn | error | crit ] | [{ debug_core | debug_alloc | debug_mutex | debug_event | debug_http | debug_mail | debug_mysql } ] 日誌級別 = 錯誤日誌級別 | 除錯日誌級別; 或者 日誌級別 = 錯誤日誌級別; 錯誤日誌的級別: emerg, alert, crit, error, warn, notic, info, debug, 除錯日誌的級別: debug_core, debug_alloc, debug_mutex, debug_event, debug_http, debug_mail, debug_mysql error_log 指令的日誌級別配置分為錯誤日誌級別和除錯日誌級別,錯誤日誌只能設定一個級別,而且錯誤日誌必須書寫在除錯日誌級別的前面,另外除錯日誌可以設定多個級別,其他配置方法可能無法滿足需求。
複製程式碼

 3.5:配置檔案的引入:include

複製程式碼
include file;  #file是要匯入的檔案,支援相對路徑,一般在html目錄裡面
匯入一個conf檔案,並配置不同主機名的頁面,編輯nginx.conf主配置檔案:
include  /usr/local/nginx/conf.d/samsung.conf;  #在最後一個大括號裡面加入一項,*是匯入任何以conf結尾的配置檔案

在/usr/local/nginx/conf.d/建立一個samsung.conf,內容如下:
[[email protected] nginx]# grep -v "#" conf.d/samsung.conf | grep -v "^$" server { listen 8090; server_name samsung.chinacloudapp.cn; location / { root html; index index1.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
複製程式碼