1. 初識(shí)Nginx
1 Nginx的三個(gè)主要應(yīng)用場(chǎng)景

三個(gè)主要應(yīng)用場(chǎng)景為:
- 靜態(tài)資源服務(wù)(通過(guò)本地文件系統(tǒng)提供服務(wù))
- 反向代理服務(wù)
- API服務(wù)(OpenRestydeng )
1.1 反向代理服務(wù)
1.1.1 負(fù)載均衡
負(fù)載均衡,一般包含兩方面的含義。
-
一方面是,將單一的重負(fù)載分擔(dān)到多個(gè)網(wǎng)絡(luò)節(jié)點(diǎn)上做并行處理,每個(gè)節(jié)點(diǎn)處理結(jié)束后將結(jié)構(gòu)匯總返回給用戶,這樣可以大幅提高網(wǎng)絡(luò)系統(tǒng)的處理能力;
-
第二個(gè)方面的含義是,將大量的前段并發(fā)訪問(wèn)或數(shù)據(jù)流量分擔(dān)到多個(gè)后端網(wǎng)絡(luò)節(jié)點(diǎn)上分別處理,這樣可以有效減少前端用戶等待響應(yīng)的時(shí)間。
Web服務(wù)器、FTP服務(wù)器、企業(yè)關(guān)鍵應(yīng)用服務(wù)器等關(guān)鍵應(yīng)用服務(wù)器等網(wǎng)絡(luò)應(yīng)用方面談到的負(fù)載均衡問(wèn)題,基本隸屬于后一方面的含義。
因此,Nginx服務(wù)器的負(fù)載均衡主要是對(duì)大量前端訪問(wèn)和流量進(jìn)行分流,以保證前端用戶訪問(wèn)效率。可以說(shuō),在絕大多數(shù)的Nginx應(yīng)用中,都會(huì)或多或少涉及它的負(fù)載均衡服務(wù)。
復(fù)制均衡策略
即內(nèi)置策略和擴(kuò)展策略。
-
內(nèi)置策略主要包括輪詢、加權(quán)輪詢和IP hash三種;
-
擴(kuò)展策略主要通過(guò)第三方模塊實(shí)現(xiàn),種類比較豐富,常見(jiàn)的有url hash、fair等。
在默認(rèn)情況下,內(nèi)置策略會(huì)被編譯進(jìn)Nginx內(nèi)核,使用時(shí)只需要在Nginx服務(wù)器配置中設(shè)置相關(guān)參數(shù)即可;
擴(kuò)展策略不會(huì)編譯進(jìn)Nginx內(nèi)核,需要手動(dòng)將第三方模塊編譯到Nginx內(nèi)核。
輪詢
輪詢策略比較簡(jiǎn)單,就是將前端請(qǐng)求按順序(時(shí)間順序或者排列次序)逐一分配到不同的后端節(jié)點(diǎn)上,對(duì)于出現(xiàn)問(wèn)題的后端節(jié)點(diǎn)自動(dòng)排除。
加權(quán)輪詢
加權(quán)輪詢策略,顧名思義,就是在基本的輪詢策略上考慮各后端節(jié)點(diǎn)接受請(qǐng)求的權(quán)重,指定各后端節(jié)點(diǎn)被輪詢到的幾率。
加權(quán)輪詢策略主要用于后端節(jié)點(diǎn)不均的情況。根據(jù)后端節(jié)點(diǎn)性能的實(shí)際情況,我們可以在Nginx服務(wù)器的配置文件中調(diào)整權(quán)值,使得整個(gè)網(wǎng)絡(luò)對(duì)前端請(qǐng)求達(dá)到最佳的響應(yīng)能力。
IP hash
IP hash策略,是將前端的訪問(wèn)IP進(jìn)行hash操作,然后根據(jù)hash結(jié)果將請(qǐng)求分配給不同的后端節(jié)點(diǎn)。
事實(shí)上,這種策略可以看作是一種特殊的輪詢策略。
通過(guò)Nginx的實(shí)現(xiàn),每個(gè)前端訪問(wèn)IP會(huì)固定訪問(wèn)一個(gè)后端節(jié)點(diǎn)。這樣做的好處是避免考慮前端用戶的session在后端多個(gè)節(jié)點(diǎn)上共享的問(wèn)題。
url hash
擴(kuò)展策略中的url hash在形式上和IP hash相近,不同之處在于,IP hash策略是對(duì)前端訪問(wèn)IP進(jìn)行了hash操作,而url hash策略是對(duì)前端請(qǐng)求的url進(jìn)行了hash操作。url hash策略的優(yōu)點(diǎn)在于,如果后端有緩存服務(wù)器,它能夠高緩存效率,同時(shí)也解決了session的問(wèn)題;但其缺點(diǎn)是,如果后端節(jié)點(diǎn)出現(xiàn)異常,它不能自動(dòng)排除該節(jié)點(diǎn)。后端節(jié)點(diǎn)出現(xiàn)異常會(huì)導(dǎo)致Nginx服務(wù)器返回503錯(cuò)誤。
fair
擴(kuò)展的第三方模塊fair則是從另一個(gè)角度來(lái)實(shí)現(xiàn)Nginx服務(wù)器負(fù)載均衡策略的。該模塊將前端請(qǐng)求轉(zhuǎn)發(fā)到一個(gè)最近負(fù)載最小的后臺(tái)節(jié)點(diǎn)。Nginx通過(guò)后端節(jié)點(diǎn)對(duì)請(qǐng)求的響應(yīng)時(shí)間來(lái)判斷負(fù)載情況。響應(yīng)時(shí)間短的節(jié)點(diǎn)負(fù)載相對(duì)就輕。得出判斷結(jié)果后,Nginx就將前端請(qǐng)求轉(zhuǎn)發(fā)到選中的負(fù)載最輕的節(jié)點(diǎn)。
least_conn
最少連接
1.1.2 Web緩存
Squid在Web服務(wù)器領(lǐng)域中是一款相當(dāng)流行的開(kāi)源代理服務(wù)器和Web緩存服務(wù)器。作為網(wǎng)頁(yè)服務(wù)器的前置緩存服務(wù)器,在很多優(yōu)秀的站點(diǎn)中,它被用以緩存前端請(qǐng)求,從而提高Web服務(wù)器的性能;而且,它還可以緩存萬(wàn)維網(wǎng)、域名系統(tǒng)或者其他網(wǎng)絡(luò)搜索等,為一個(gè)集體提供網(wǎng)路資源共享服務(wù)。
Nginx服務(wù)器從0.7.48版本開(kāi)始,也支持了和Squid類似的緩存功能。
Nginx服務(wù)器的Web緩存服務(wù)主要由Proxy_Cache相關(guān)指令集和FastCGI_Cache相關(guān)指令集構(gòu)成。
其中,Proxy_Cache主要用于在Nginx服務(wù)器提供反向代理服務(wù)時(shí),對(duì)后端源服務(wù)器的返回內(nèi)容進(jìn)行URL緩存;
FastCGI_Cache主要用于對(duì)FastCGI的動(dòng)態(tài)程序進(jìn)行緩存。
另外還有一款常用的第三方模塊ngx_cache_purge也是Nginx服務(wù)器Web緩存功能中經(jīng)常用到的。它主要用于清除Nginx服務(wù)器上指定的URL緩存。
到Nginx 0.8.32版本,Proxy_Cache和FastCGI_Cache兩部分的功能已經(jīng)比較完善,再配合第三方的ngx_cache_purge模塊,Nginx服務(wù)器已經(jīng)具備了Squid所擁有的Web緩存加速功能和清除指定URL緩存的功能;
同時(shí),Nginx服務(wù)器對(duì)多核CPU的調(diào)度比Squid更勝一籌,性能高于Squid,而在反向代理、負(fù)載均衡等其他方面,Nginx也不遜于Squid。這使得Nginx服務(wù)器可以同時(shí)作為負(fù)載均衡服務(wù)器和Web緩存服務(wù)器來(lái)使用,基本可以取代Squid。
2 Nginx的優(yōu)點(diǎn)
nginx的優(yōu)點(diǎn)
-
輕量級(jí),同樣起web服務(wù)比apache占用更少內(nèi)存及資源;
-
Nginx 異步非阻塞的方式處理高并發(fā)請(qǐng)求,能保持低資源、低消耗、高性能;
-
高度模塊化設(shè)計(jì),編寫(xiě)模塊相對(duì)簡(jiǎn)單,生態(tài)圈強(qiáng)大。
-
核心優(yōu)點(diǎn):高并發(fā)、高性能、高可擴(kuò)展、高可靠性、熱部署、BSD許可證。
Nginx為什么性能高、占用內(nèi)存少?
- Nginx采用多進(jìn)程模式,對(duì)每個(gè)worker進(jìn)程來(lái)說(shuō),獨(dú)立的進(jìn)程不需要加鎖,互不影響;
- 一個(gè)進(jìn)程退出后,其他進(jìn)程繼續(xù)工作,服務(wù)不會(huì)中斷,master進(jìn)程則很快啟動(dòng)新的worker進(jìn)程;
- worker進(jìn)程異常退出肯定是程序有bug導(dǎo)致,但也只會(huì)影響當(dāng)前worker上的請(qǐng)求,不會(huì)影響到其他進(jìn)程的請(qǐng)求,降低風(fēng)險(xiǎn);
- Nginx采用異步非阻塞的方式去處理請(qǐng)求,更加高效。
3 Nginx的組成
- Nginx二進(jìn)制可執(zhí)行文件
- 由各模塊源碼編譯出的一個(gè)文件
nginx.conf配置文件- 控制
nginx的行為
- 控制
access.log訪問(wèn)日志- 記錄每一條http請(qǐng)求信息
error.log錯(cuò)誤日志- 定位問(wèn)題
4 編譯安裝Nginx
4.1 下載Nginx
nginx下載地址:http://nginx.org/download/
在官網(wǎng)找最新穩(wěn)定版使用:http://nginx.org/en/download.html
cd /opt
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -xvf nginx-1.16.1.tar.gz
cd nginx-1.16.1/
4.2 介紹各目錄
# ls
auto CHANGES CHANGES.ru conf configure contrib html LICENSE man README src
-
auto:包含了很多會(huì)在執(zhí)行configure進(jìn)行編譯配置時(shí)調(diào)用的檢測(cè)代碼。
-
CHANGES:Nginx的版本更新細(xì)節(jié)記錄。英文版。
-
CHANGES.ru:Nginx的版本更新細(xì)節(jié)記錄。俄文版。
-
conf:Nginx提供的一些默認(rèn)配置文件。
-
configure:根據(jù)系統(tǒng)環(huán)境設(shè)定Nginx編譯選項(xiàng)的執(zhí)行腳本。
-
contrib:網(wǎng)友貢獻(xiàn)的一些有用腳本(對(duì)我來(lái)說(shuō),里面的vim設(shè)置很有用,README中有使用方法)。
-
把contrib/vim下的文件移入~/.vim目錄下,讓vim識(shí)別nginx的配置文件節(jié)點(diǎn); cp -r contrib/vim/* ~/.vim
-
-
html:提供了兩個(gè)默認(rèn)html頁(yè)面,比如index.html的Welcome to nginx!。
-
LICENSE:聲明的Nginx源碼許可協(xié)議。
-
man:Nginx的Man手冊(cè),本文文件,可直接用vi或記事本打開(kāi)。
-
README:讀我文件,內(nèi)容很簡(jiǎn)單,通告一下官網(wǎng)地址。
-
src:Nginx源碼,分門別類,比如實(shí)現(xiàn)事件的event等,很清晰。
4.3 Configure
先安裝相關(guān)依賴
gzip模塊需要zlib庫(kù)
rewrite模塊需要pcre庫(kù)
ssl功能需要openssl庫(kù)
yum -y install gcc gcc-c++ make zlib-devel pcre-devel openssl-devel
然后運(yùn)行configure文件
# ./configure --help
- --prefix :指定安裝目錄
- --with:新增模塊
- --without:刪除默認(rèn)模塊
運(yùn)行期中與路徑相關(guān)的各種參數(shù)
--prefix=PATH #指向安裝目錄
--sbin-path=PATH #指向(執(zhí)行)程序文件(nginx)
--conf-path=PATH #指向配置文件(nginx.conf)
--error-log-path=PATH #指向錯(cuò)誤日志目錄
--http-log-path=PATH #指定訪問(wèn)日志目錄
--pid-path=PATH #指向pid文件(nginx.pid)
--lock-path=PATH #指向lock文件(nginx.lock)(安裝文件鎖定,防止安裝文件被別人利用,或自己誤操作。)
--builddir=PATH #指向編譯目錄
--http-client-body-temp-path=PATH #設(shè)定http客戶端請(qǐng)求臨時(shí)文件路徑
--http-proxy-temp-path=PATH #設(shè)定http代理臨時(shí)文件路徑
--http-fastcgi-temp-path=PATH #設(shè)定http fastcgi臨時(shí)文件路徑
--http-uwsgi-temp-path=PATH #設(shè)定http uwsgi臨時(shí)文件路徑
--http-scgi-temp-path=PATH #設(shè)定http scgi臨時(shí)文件路徑
--user=USER #指定程序運(yùn)行時(shí)的非特權(quán)用戶
--group=USER #指定程序運(yùn)行時(shí)的非特權(quán)用戶組
--with-rtsig_module #啟用rtsig模塊支持(實(shí)時(shí)信號(hào))
--with-file-aio #啟用file aio支持(一種APL文件傳輸格式)
--with-ipv6 #啟用ipv6支持
--with-select_module #啟用select模塊支持(一種輪詢模式,不推薦在高載環(huán)境下使用)禁用:--without-select_module
--with-poll_module #啟用poll模塊支持(功能與select相同,與select特性相同,為一種輪詢模式,不推薦在高載環(huán)境下使用)
--with-http_ssl_module #啟用支持https請(qǐng)求,需已安裝openssl
--with-http_realip_module #啟用ngx_http_realip_module支持(這個(gè)模塊允許從請(qǐng)求標(biāo)頭更改客戶端的IP地址值,默認(rèn)為關(guān))
--with-http_addition_module #啟用ngx_http_addition_module支持(作為一個(gè)輸出過(guò)濾器,支持不完全緩沖,分部分響應(yīng)請(qǐng)求)
--with-http_xslt_module #啟用ngx_http_xslt_module支持(過(guò)濾轉(zhuǎn)換XML請(qǐng)求)
--with-http_image_filter_module #啟用支持傳輸JPEG/GIF/PNG 圖片過(guò)濾,默認(rèn)為不啟用,gd庫(kù)要用到
--with-http_sub_module #啟用ngx_http_sub_module支持(允許用一些其他文本替換nginx響應(yīng)中的一些文本)
--with-http_dav_module #啟用ngx_http_dav_module支持(增加PUT,DELETE,MKCOL:創(chuàng)建集合,COPY和MOVE方法)
--with-http_flv_module #啟用ngx_http_flv_module支持(提供尋求內(nèi)存使用基于時(shí)間的偏移量文件)
--with-http_gzip_static_module #啟用ngx_http_gzip_static_module支持(在線實(shí)時(shí)壓縮輸出數(shù)據(jù)流)
--with-http_random_index_module #啟用ngx_http_random_index_module支持(從目錄中隨機(jī)挑選一個(gè)目錄索引)
--with-http_secure_link_module #啟用ngx_http_secure_link_module支持(計(jì)算和檢查要求所需的安全鏈接網(wǎng)址)
--with-http_degradation_module #啟用ngx_http_degradation_module支持(允許在內(nèi)存不足的情況下返回204或444碼)
--with-http_stub_status_module #啟用ngx_http_stub_status_module支持(獲取nginx自上次啟動(dòng)以來(lái)的工作狀態(tài))
--with-http_perl_module #啟用ngx_http_perl_module支持(該模塊使nginx可以直接使用perl或通過(guò)ssi調(diào)用perl)
--with-mail #啟用POP3/IMAP4/SMTP代理模塊支持
--with-mail_ssl_module #啟用ngx_mail_ssl_module支持
--add-module= #啟用外部模塊支持
--with-cpu-opt= #指定編譯的CPU,可用的值為: pentium,opteron, amd64, sparc32, sparc64, ppc64等
--with-pcre #啟用pcre庫(kù)(默認(rèn)會(huì)自動(dòng)去找rpm包安裝的pcre庫(kù)文件以及模塊)
--with-pcre= #指向pcre庫(kù)文件目錄(如果是源碼安裝就需要指定,rpm包安裝就不需要指定了)
--with-pcre-opt= #在編譯時(shí)為pcre庫(kù)設(shè)置附加參數(shù)
--with-perl_modules_path= #設(shè)定perl模塊路徑
--with-perl= #設(shè)定perl庫(kù)文件路徑
--with-debug #啟用debug日志
安裝額外的echo模塊
cd /opt
git clone https://github.com/openresty/echo-nginx-module
./configure \
--prefix=/etc/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=nginx \
--group=nginx \
--with-compat \
--with-file-aio \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-pcre \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' \
--with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' \
--add-module=/opt/echo-nginx-module
執(zhí)行完后,會(huì)生成objs目錄
目錄下的關(guān)鍵文件ngx_modules.c,它決定了我們編譯nginx時(shí),哪些模塊會(huì)被編譯進(jìn)nginx
4.4 中間件介紹
中間件放在objs/src目下
4.5 編譯
make -j 4
- -j 參數(shù),指定編譯時(shí)的CPU數(shù)量,可加快編譯速度
執(zhí)行完后,在objs目錄下生成二進(jìn)制可執(zhí)行文件
注意:如何這時(shí),我們是升級(jí)nginx,現(xiàn)在就不需要
make install了
4.6 安裝
make install
執(zhí)行完成后,會(huì)在--prefix目錄下生成四個(gè)目錄,我這里是/home/clay目錄下
- conf: 配置文件目錄
- html:默認(rèn)的靜態(tài)頁(yè)面存放目錄
- logs:默認(rèn)access和error log存放目錄
- sbin:二進(jìn)制可執(zhí)行文件
nginx存放目錄
安裝nginx,個(gè)人還是推薦yum源安裝(里面自動(dòng)包含了日志切割等)
可以yum源安裝完成之后,再定制化模塊,二次編譯
5 Nginx配置語(yǔ)法
- 配置文件由指令與指令塊構(gòu)成
- 每條指令以
;分號(hào)結(jié)尾,指令與參數(shù)見(jiàn)以空格符號(hào)分隔 - 指令塊以
{ }大括號(hào)將多條指令組織在一起 include語(yǔ)句允許組合多個(gè)配置文件以提升可維護(hù)性- 使用
#符號(hào)添加注釋,提高可讀性 - 使用
$符號(hào),使用變量 - 部分指令的參數(shù)支持正則表達(dá)式
Example
http {
include mime.types;
upstream thwp {
server 127.0.0.1:8080;
}
server {
listen 443 http2;
# Nginx配置語(yǔ)法
limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
location ~* \.(gif|jpg|jpeg)$ {
proxy_cache my_cache;
expires 3m;proxy_cache_key $host$uri$is_args$args;
proxy_cache_valid 200 304 302 1d;
proxy_pass http://thwp;
}
}
}
5.1 配置參數(shù)
5.1.1 時(shí)間單位
- ms:milliseconds
- s:seconds
- m:minutes
- h:hours
- d:days
- w:weeks
- M:months,30 days
- y:years,365 days
5.1.2 空間單位
- b/B:bytes
- k/K:kilobytes
- m/M:megabytes
- g/G:gifabytes
6 Nginx配置文件結(jié)構(gòu)
nginx配置文件如下:
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
include /usr/share/nginx/modules/\*.conf;
events {
worker_connections 1024;
}
http {
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 /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
include /etc/nginx/conf.d/\*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /usr/share/nginx/html;
include /etc/nginx/default.d/\*.conf;
location / {
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
}
6.1 基本結(jié)構(gòu)
- 全局塊
events塊http塊
在http塊中,又包含http全局塊、多個(gè)server塊。
每個(gè)server塊中,可以包含server全局塊和多個(gè)location塊。
在同一配置塊中嵌套的配置塊,各個(gè)之間不存在次序關(guān)系。
配置文件支持大量可配置的指令,絕大多數(shù)指令不是特定屬于某一個(gè)塊的。同一個(gè)指令放在不同層級(jí)的塊中,其作用域也不同,一般情況下,高一級(jí)塊中的指令可以作用域自身所在的塊和此塊包含的所有低層級(jí)塊。如果某個(gè)指令在兩個(gè)不同層級(jí)的塊中同時(shí)出現(xiàn),則采用“就近原則”,即以較低層級(jí)塊中的配置為準(zhǔn)。
6.2 全局塊
通常包括配置運(yùn)行Nginx服務(wù)器的用戶(組)、允許生成的worker process數(shù)、Nginx進(jìn)程PID存放路徑、日志的存放路徑和類型以及配置文件引入等。
6.3 events塊
events塊涉及的指令主要影響Nginx服務(wù)器與用戶的網(wǎng)絡(luò)連接。常用到的設(shè)置包括是否開(kāi)啟對(duì)多worker process下的網(wǎng)絡(luò)連接進(jìn)行序列化,是否允許同時(shí)接收多個(gè)網(wǎng)絡(luò)連接,選取哪種事件驅(qū)動(dòng)模型處理連接請(qǐng)求,每個(gè)worker process可以同時(shí)支持的最大連接數(shù)等。
這一部分的指令對(duì)Nginx服務(wù)器的性能影響較大,在實(shí)際配置中應(yīng)該根據(jù)實(shí)際情況靈活調(diào)整。
6.4 http塊
http塊是Nginx服務(wù)器配置中重要部分,代理、緩存和日志定義等絕大多數(shù)的功能和第三方模塊可以放在這個(gè)模塊中。
- http
- upstream
- server
- location
6.5 server塊
server塊和“虛擬主機(jī)”的概念密切聯(lián)系。為了加深相關(guān)配置的理解,在介紹server塊之前,簡(jiǎn)單了解一下虛擬主機(jī)的相關(guān)內(nèi)容。
虛擬主機(jī),又稱虛擬服務(wù)器、主機(jī)空間或網(wǎng)頁(yè)空間,它是一種技術(shù)。該技術(shù)是為了節(jié)省互聯(lián)網(wǎng)服務(wù)器硬件成本而出現(xiàn)的。這里的“主機(jī)”或“空間”是由實(shí)體的服務(wù)器延伸而來(lái),硬件系統(tǒng)可以基于服務(wù)器群,或者單個(gè)服務(wù)器等。對(duì)外表現(xiàn)為多個(gè)服務(wù)器,從而充分利用服務(wù)器硬件資源。從用戶角度看,一臺(tái)虛擬主機(jī)和一臺(tái)獨(dú)立的硬件主機(jī)是完全一樣的。
在使用Nginx服務(wù)器提供Web服務(wù)是,利用虛擬主機(jī)的技術(shù)就可以避免為每一個(gè)要運(yùn)行的網(wǎng)站提供單獨(dú)的Nginx服務(wù)器,也無(wú)需為每個(gè)網(wǎng)站對(duì)應(yīng)運(yùn)行一組Nginx進(jìn)程。虛擬主機(jī)技術(shù)使得Nginx服務(wù)器可以在同一臺(tái)服務(wù)器上只運(yùn)行一組Nginx進(jìn)程,就可以運(yùn)行多個(gè)網(wǎng)站。
和http塊相同,server塊也可以包含自己的全局塊,同時(shí)可以包含多個(gè)location塊。在server全局塊中,最常見(jiàn)的兩個(gè)配置項(xiàng)是本虛擬主機(jī)的監(jiān)聽(tīng)配置和本虛擬主機(jī)的名稱或IP配置。
6.6 location塊
每個(gè)server塊中可以包含多個(gè)location塊。從嚴(yán)格意義上說(shuō),location其實(shí)是server塊的一個(gè)指令,只是由于其在整個(gè)Nginx配置文檔中起著重要的作用,而且Nginx服務(wù)器在許多功能上的靈活性往往在location指令的配置中體現(xiàn)出來(lái)。
7 Nginx命令行
- 格式:
nginx -s reload - 幫助:
-?-h - 使用指定的配置位置:
-c - 指定配置指令:
-g - 指定運(yùn)行目錄:
-p - 發(fā)送信號(hào):
-s- 立刻停止服務(wù):
stop - 優(yōu)雅的停止服務(wù):
quit - 重載配置文件:
reload - 重新開(kāi)始記錄日志文件:
reopen
- 立刻停止服務(wù):
- 測(cè)試配置文件是否有語(yǔ)法錯(cuò)誤:
-t-T - 打印
nginx的版本信息、編譯信息:-v-V
7.1 重載配置文件
nginx -s reload
7.2 熱部署
只是更換二進(jìn)制文件
- 備份舊的nginx文件
cd /home/clay/sbin/
cp nginx nginx.old
2)將新的編譯好的二進(jìn)制文件,替換掉現(xiàn)在正在運(yùn)行的二進(jìn)制文件
首先重新編譯出一個(gè)nginx二進(jìn)制可執(zhí)行文件,./configure然后make,千萬(wàn)不要make install,執(zhí)行那make就可以了
cd /opt/nginx-1.16.1/
cp -f objs/nginx /home/clay/sbin/
3)給master進(jìn)程發(fā)送USR2信號(hào)
# ps -ef|grep nginx
root 6159 57006 0 11:18 pts/0 00:00:00 grep --color=auto nginx
root 63076 1 0 09:46 ? 00:00:00 nginx: master process /home/clay/sbin/nginx
nobody 63103 63076 0 09:46 ? 00:00:00 nginx: worker process
# kill -USR2 63076
# ps -ef|grep nginx
root 6216 63076 0 11:19 ? 00:00:00 nginx: master process /home/clay/sbin/nginx
nobody 6217 6216 0 11:19 ? 00:00:00 nginx: worker process
root 6225 57006 0 11:19 pts/0 00:00:00 grep --color=auto nginx
root 63076 1 0 09:46 ? 00:00:00 nginx: master process /home/clay/sbin/nginx
nobody 63103 63076 0 09:46 ? 00:00:00 nginx: worker process
# netstat -nplt| grep 80
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6216/nginx: master
4)關(guān)閉舊的woker進(jìn)程,kill -WINCH舊的master進(jìn)程號(hào)
# kill -WINCH 63076
# ps -ef|grep nginx
root 6216 63076 0 11:19 ? 00:00:00 nginx: master process /home/clay/sbin/nginx
nobody 6217 6216 0 11:19 ? 00:00:00 nginx: worker process
root 6842 57006 0 11:28 pts/0 00:00:00 grep --color=auto nginx
root 63076 1 0 09:46 ? 00:00:00 nginx: master process /home/clay/sbin/nginx
5)關(guān)閉舊的master進(jìn)程,kill -QUIT舊的master進(jìn)程號(hào)
# kill -QUIT 63076
# ps -ef|grep nginx
root 6216 1 0 11:19 ? 00:00:00 nginx: master process /home/clay/sbin/nginx
nobody 6217 6216 0 11:19 ? 00:00:00 nginx: worker process
root 6947 57006 0 11:30 pts/0 00:00:00 grep --color=auto nginx
7.3 切割日志文件
1)mv掉原來(lái)的日志
mv access.log access.log.bak
2)重新打開(kāi)日志文件
nginx -s reopen
簡(jiǎn)單說(shuō)明一下:
1、在沒(méi)有執(zhí)行kill -USR1 cat ${pid_path}之前,即便已經(jīng)對(duì)文件執(zhí)行了mv命令也只是改變了文件的名稱,nginx還是會(huì)向新命名的文件” access.log.20161024”中照常寫(xiě)入日志數(shù)據(jù)。原因在于linux系統(tǒng)中,內(nèi)核是根據(jù)文件描述符來(lái)找文件的
2、USR1是自定義信號(hào),也就是進(jìn)程編寫(xiě)者自己確定收到這個(gè)信號(hào)該干什么。而在nginx中它自己編寫(xiě)了代碼當(dāng)接到USR1信號(hào)的時(shí)候讓nginx重新打開(kāi)日志文件(重新打開(kāi)的日志就是配置文件中設(shè)置的位置和名稱)。

浙公網(wǎng)安備 33010602011771號(hào)