本篇內(nèi)容主要講解“Nginx相關(guān)命令有哪些”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Nginx相關(guān)命令有哪些”吧!
十年的古塔網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷推廣的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整古塔建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“古塔網(wǎng)站設(shè)計(jì)”,“古塔網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
備注:因?yàn)镃entos安裝的最小版本 所以缺的基礎(chǔ)Lib有點(diǎn)多 。。這里應(yīng)該是全的了
yum -y install gcc.x86_64 gcc-plugin-devel.x86_64 pcre-devel.x86_64 pcre-static.x86_64 pcre.x86_64 openssl-devel.x86_64 openssl-static.x86_64 openssl.x86_64 libxml2-static.x86_64 libxml2.x86_64 libxml2-devel.x86_64 libxslt-devel.x86_64 libxslt.x86_64 gd-devel.x86_64 gd.x86_64 GeoIP-devel.x86_64 GeoIP.x86_64
--prefix=PATH: 設(shè)定nginx的安裝目錄
--user=name: 設(shè)定nginx worker process 以什么用戶權(quán)限運(yùn)行,可以用過(guò)nginx.conf修改
--group=name:設(shè)定nginx worker process 以什么用戶組權(quán)限運(yùn)行,可以用過(guò)nginx.conf修改
--with-threads :nginx是否使用線程池
--with-file-aio :設(shè)定在Linux上是否使用AIO
--with-http_ssl_module https模塊,默認(rèn)不構(gòu)建,需要OpenSSL庫(kù)支持
--with-http_realip_module real_ip模塊保證后端服務(wù)器的HttpRequestHeader中的IP為客戶端實(shí)際IP,默認(rèn)不構(gòu)建;
--with-http_gunzip_module 對(duì)被gzip壓縮的響應(yīng)進(jìn)行解壓適應(yīng)無(wú)法解壓的客戶端,默認(rèn)不構(gòu)建
--with-http_gzip_static_module 向客戶端發(fā)送以gzip壓縮過(guò)的文件,默認(rèn)不構(gòu)建
--with-http_slice_module 將http大請(qǐng)求劃分成幾個(gè)小請(qǐng)求,默認(rèn)不構(gòu)建
--with-debug 支持debug日志,默認(rèn)不構(gòu)建
--with-stream 支持四層的負(fù)載均衡,默認(rèn)不構(gòu)建
./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_realip_module --with_stream
./nginx 啟動(dòng)nginx
./nignx -s stop — 快速關(guān)閉,即使有正在處理的請(qǐng)求直接關(guān)系連接
./nignx -s quit — 優(yōu)雅的關(guān)閉,不接受處理新請(qǐng)求;
./nignx -s reload — 重新載入配置
./nignx -s reopen — 重新打開(kāi)日志輸出
./nginx -t 檢測(cè)磁盤上的配置文是否合法
user nginx nginx; # 需要?jiǎng)?chuàng)建一個(gè)nginx 用戶及nginx用戶組,禁止登陸 worker_processes 8; # 一般和CPU的核心數(shù)量一致即可,假定8個(gè); # worker_cpu_affinity 00000001 00000010 00000100 00001000 00010000 00100000 01000000 10000000; # worker_cpu_affinity 僅linux系列支持,8核8位,4核心4位(0001 0010 0100 1000);設(shè)定進(jìn)程的和CPU核心的綁定關(guān)系,可以見(jiàn)減少進(jìn)程在CPU核心間調(diào)度產(chǎn)生的L123緩存的調(diào)度,從而提升效能 error_log logs/error.log info; # 設(shè)定nginx的日志位置及日志等級(jí) pid logs/nginx.pid; # 設(shè)定 nginx master進(jìn)程Id文件 worker_rlimit_nofile 65536; # 設(shè)定每個(gè)worker進(jìn)程最大句柄數(shù),linux `ulimit -n 65536` 修改 events { use epoll; # 使用的IO模型,select、poll、epoll; Linux 可用的就這三個(gè),默認(rèn)epoll; worker_connections 65536; #設(shè)定每個(gè)worker process 可以處理的連接數(shù),不能超過(guò)上面的worker_rlimit_nofile值 } http { include mime.types; # 引入文件 mime.types; default_type application/octet-stream; # 默認(rèn)的mime 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"' ; # 設(shè)定日志格式 access_log logs/access.log main; sendfile on; # 設(shè)定 nginx 是否使用 sendfile 函數(shù)輸出文件,對(duì)于下載服務(wù)時(shí)請(qǐng)關(guān)閉; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; upstream backend { # 負(fù)載均衡模塊,一個(gè)后端服務(wù)器組;像 upstream,server等等相關(guān)的東西都可以另起文件,然后include 進(jìn)來(lái); server 192.168.1.11 weight = 5; server 192.168.1.12 weight = 2; server 192.168.1.10 backup; } server { #可以有多個(gè)不同的server(name、IP、端口不完全一致就可以) listen 127.0.0.1:80; # 監(jiān)聽(tīng)的IP和端口,端口省略就是協(xié)議默認(rèn)端口,IP省略就監(jiān)聽(tīng)全部的IP server_name localhost; # server的name,就是域名;支持通配符比如*.aruforce.site;支持正則 `~`開(kāi)頭 # nginx 收到請(qǐng)求時(shí):會(huì)先匹配IP和端口,如果有多個(gè)server匹配,則繼續(xù)匹配req_header_Host 與server_name # 如果還是有多server_name 匹配: # 首選 正常的域名 的server # 次選 *開(kāi)頭的通配符域名 的server # 再次 *結(jié)尾的通配符域名 的server # 最后 選第一個(gè)出現(xiàn)的正則表達(dá)式域名 的server # 如果不存在匹配的域名則轉(zhuǎn)發(fā)到默認(rèn)的server(一般就是第一個(gè)) charset utf-8; #設(shè)定響應(yīng)頭 access_log logs/80-localhost.access.log main; # 錯(cuò)誤頁(yè)設(shè)置 error_page 404 /404.html; # 當(dāng)http 404時(shí)返回/404.html error_page 500 502 503 504 /50x.html; # 當(dāng)http 50x時(shí)返回/50x.html # 靜態(tài)文件 location / { root html; #root是指從本地文件目錄查找,結(jié)尾不允許有/,如果一個(gè)req的URI匹配到,將訪問(wèn)文件系統(tǒng)的html$URI的文件,而URI starts with '/'; index index.html index.htm; } location =/app/index.html{ # 精確匹配,訪問(wèn)http://localhost/app/index.html時(shí),會(huì)訪問(wèn)html/app/index.html root html; index index.html index.htm; } # 下面的 2 和 3 區(qū)別 location ^~ /app/{ # 訪問(wèn)http://localhost/app/index2.html時(shí),會(huì)訪問(wèn)./app/index2.html;即使是有開(kāi)頭的^~但由于不是最長(zhǎng)匹配,那么會(huì)進(jìn)行正則型的匹配 root html; index index.html index.htm; } location /app/index2.html{ # 訪問(wèn)http://localhost/app/index2.html時(shí),因?yàn)闆](méi)有^~開(kāi)頭,盡管是最長(zhǎng)匹配項(xiàng),但仍舊會(huì)進(jìn)行正則項(xiàng)的匹配,所以會(huì)訪問(wèn)./app/index2.html;如果 開(kāi)頭有^~則會(huì)訪問(wèn)html2/app/index2.html root html2; # index index.html index.htm; } location ~ /app/{ #正則型匹配 root ./; # './'是指nignx的目錄 index index.html index.htm; } location = /50x.html { # 精確匹配 root html; } location /app2{ # prefix型訪問(wèn)http://localhost/app2 時(shí),會(huì)被nginx 回復(fù)301 重定向到 http://localhost/app2/;如果代理的是app2這個(gè)文件,請(qǐng)?jiān)谇懊婕由蟕=` root html; index index.html index.htm; } #代理功能 location /nexus/{ #proxy1 proxy_pass http://localhost:8081; # proxy_pass 的uri要不要以`/`結(jié)尾: # 結(jié)尾是`/`的,nginx會(huì)把原請(qǐng)求的URI截?cái)嗟鬺ocationURI的部分然后拼接上proxy_pass的URI; # 結(jié)尾不是`/`的 就是proxy_pass_uri+req_uri; } # location /nexus/{ #proxy2 # proxy_pass http://localhost:8081/nexus/; # 這條配置和上面的是一個(gè)效果; # } # 這里以瀏覽器訪問(wèn)http://localhost/nexus/index.html為例說(shuō)明: # proxy1的配置 相當(dāng)瀏覽器訪問(wèn)http://localhost:8081+/nexus/index.thml # proxy2的配置 相當(dāng)于瀏覽器訪問(wèn) http://localhost:8081/nexus/ + index.html; } # 一個(gè) HTTPS服務(wù)器 server { listen 443 ssl; # server_name www.aruforce.site *.aruforce.site; ssl_certificate cert.pem; # 證書(shū) ssl_certificate_key cert.key; # 簽名 ssl_session_cache shared:SSL:1m; ssl_session_timeout 5m; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; location / { root html; index index.html index.htm; } } }
location [ = | ~ | ~* | ^~ ] uri{ #config }
location的寫(xiě)法分為兩個(gè)大類prefix型 和 正則表達(dá)式型;
prefix型 必須以/
開(kāi)頭(最佳實(shí)踐,不寫(xiě)也行,nginx默認(rèn)會(huì)加上);
正則表達(dá)式行型 開(kāi)頭必須有~
(表示區(qū)分大小寫(xiě)的正則)或者~*
(表示不區(qū)分大小寫(xiě)的正則);
=
代表精確匹配,只配合prefix型使用;
^~
這個(gè)表示為最佳匹配,不再匹配正則型;
https://segmentfault.com/a/1190000013267839
;要么這個(gè)文檔有點(diǎn)不太對(duì)要么是我對(duì)這個(gè)文檔理解錯(cuò)誤了. 關(guān)于^~
的解釋還有匹配執(zhí)行流程;
按照我對(duì)這個(gè)文檔的內(nèi)容理解,以上面的配置在訪問(wèn)
http://localhost/app/index2.html
應(yīng)該是訪問(wèn)html/app/index2.html
文件才對(duì)(location ^~ /app/
生效),但是實(shí)際上是./app/index2.html
(location ~ /app/
生效了);
/
有 /
的,req會(huì)被正常處理
沒(méi)有 /
的,nginx 會(huì)響應(yīng)301(永久重定向),重定向的URI = $req.uri+ /
如果要代理具體的URI ,請(qǐng)使用 =
精確匹配;
nginx 首先會(huì)把req的URI正常化(解碼[%xx],解路徑[.或者..],盡可能壓縮相鄰重復(fù)的/
后再開(kāi)始匹配;
nginx會(huì)先查找 prefix型location進(jìn)行匹配(從上到下),如果匹配項(xiàng)以=
開(kāi)頭的location則直接使用,否則繼續(xù)向下匹配,從所有的prefix型匹配項(xiàng)中選擇前綴最長(zhǎng)A
作為備用,如果A 以 ^~
開(kāi)頭,會(huì)直接使用A
,否則繼續(xù)檢查正則型,;
nginx從正則型的location從上往下進(jìn)行匹配,若不存在匹配項(xiàng),則使用A
,否則使用第一個(gè)正則匹配項(xiàng)B
;
location = / { [ configuration A ] } location / { [ configuration B ] } location /documents/ { [ configuration C ] } location ^~ /images/ { [ configuration D ] } location ~* \.(gif|jpg|jpeg)$ { [ configuration E ] }
當(dāng)req URI 為/
時(shí),使用A;
當(dāng)req URI 為/index.html
時(shí),使用B
當(dāng)req URI 為/documents/index.html
時(shí),使用C
當(dāng)req URI為 /images/a.jpg
時(shí),使用D;
當(dāng)req URI 為 /docments/a.jpg
時(shí),使用 E;
echo $***
可以輸出取到的值到日志文件,windows版本不支持echo)參數(shù) | 解釋 |
---|---|
$arg_name | 獲取請(qǐng)求行中name對(duì)應(yīng)的值,比如http://localhost/index.html?token=123 ,$arg_token 就是123 |
$args -$query_string | 獲取請(qǐng)求行參數(shù),對(duì)于/index.html?token=123&sign=321 =>token=123&sign=321 ,同$query_string |
$bytes_sent | 發(fā)送響應(yīng)的字節(jié)數(shù) |
$connection | connecttion的序號(hào) |
$content_type | request header 里面的Content-Type的值 |
$cookie_name | 請(qǐng)求中cookies 里面的name key對(duì)應(yīng)的value,和$arg_name 有點(diǎn)類似 |
$document_root | 當(dāng)前request的root 或者alias 指令對(duì)應(yīng)的值 |
$uri -$document_uri | request header里面的URI. 不帶請(qǐng)求參數(shù),類似于/nexus/index.html |
$host | 請(qǐng)求行的host 參數(shù)值->請(qǐng)求頭的Host 值-> server_name 指令的value |
$request_method | 獲取請(qǐng)求方法,GET、POST、HEAD、OPTIONS、PUT等等 |
$http_name | request header 里面的name 對(duì)應(yīng)的值,比如 $http_user_agent |
$https | 返回當(dāng)前鏈接是否是使用SSL,是返回on ,否則返回空串 |
$is_args | 返回當(dāng)前鏈接請(qǐng)求行是否參數(shù),是返回? ,否則返回空串 |
$scheme | 使用的協(xié)議, 比如http或者是https,比如rewrite ^(.+)$ $scheme://example.com$1 redirect |
$connection_requests | 當(dāng)前conenction發(fā)送的請(qǐng)求的數(shù)量 |
$content_length | request header 里面的Content-lenght的值 |
$binary_remote_addr | 獲取客戶端IP的二進(jìn)制表示 |
$body_bytes_sent | 發(fā)送響應(yīng)的字節(jié)數(shù),不包括response header |
$remote_addr | 獲取Client的IP |
$remote_port | 獲取Client的port |
$proxy_protocol_addr | 返回走代理協(xié)議的客戶端在代理協(xié)議頭的地址,在listen 指令后必須加上 proxy_protocol 參數(shù) |
$proxy_protocol_port | 返回走代理協(xié)議的客戶端在代理協(xié)議頭的端口,在listen 指令后必須加上 proxy_protocol 參數(shù) |
rewrite 模塊主要用來(lái)修改每個(gè)request的URI;server 及l(fā)ocation context可以多次使用;提供了if,break,return,rewrite,set幾個(gè)指令;
nginx 接收到了請(qǐng)求,確認(rèn)使用那個(gè)server context
server context 內(nèi)的 rewrite模塊的指令按出現(xiàn)的順序執(zhí)行;
新的URI(如果有重寫(xiě)的話)用來(lái)確定要使用的location context,該context 的指令執(zhí)行按順序執(zhí)行;
如果URI被改寫(xiě)了,則重新確認(rèn)location context繼續(xù)執(zhí)行;(location 更改的最大次數(shù)為10次)
if (condition) { # 注意if和 ( 之間有個(gè)空格 }
用法 | 說(shuō)明事項(xiàng) | 樣例 |
---|---|---|
if($xxx) | 取值型 | if ( $cookie_bind) { return 403 ;} 如cookie里面帶bind參數(shù)直接403禁止訪問(wèn) |
if ($xxx = xxx) orif ($xxx != xxx) | 等于或者不等于 | if ($arg_token = "") {return 403;} 如果請(qǐng)求參數(shù)不帶token 也會(huì)被禁止訪問(wèn) |
if ($xxx ~ regx) or if ($xxx ~* regx) | 正則型 | `if($user_agent ~*(baidu |
if (-d |-f |-e |-x ) | 根據(jù)文件夾或者文件是否存在或者可執(zhí)行做操作 | if (-!d /var/www/static){return 404;} 如果不目錄存在直接反404 |
停止處理當(dāng)前上下文內(nèi)的rewrite模塊的指令集,如果在location 上下文內(nèi),則跳過(guò)繼續(xù)執(zhí)行其他模塊的指令;
停止處理當(dāng)前請(qǐng)求,返回一個(gè)http狀態(tài)碼給客戶端;
301、302、303、307、308:還可以追加一個(gè)重定向的URL 比如
return 302 $scheme://$host:$server_post/login.html
444 :這個(gè)不是標(biāo)準(zhǔn)的狀態(tài)碼,nginx 會(huì)斷開(kāi)和客戶端的鏈接
rewrite regex replacement [flag];
regex:匹配請(qǐng)求URI的正則表達(dá)式,如果表示包含 }
或者 :
那么表達(dá)式需要用""
或者 ''
包起來(lái)
repalcement:用于替換的新URL:如果repalcement 以http://
或者https://
或者$scheme
開(kāi)頭 nginx 用 replacement 發(fā)起重定向;重定向時(shí)會(huì)加上原來(lái)的請(qǐng)求參數(shù),如果不需要可以在repalcement末尾加上?
阻止;
flag:
取值 | 解釋 |
---|---|
last | 停止處理當(dāng)前的上下文的rewrite模塊指令,并重新查找一個(gè)新的location contex |
break | 停止處理當(dāng)前的上下文的rewrite模塊指令,繼續(xù)當(dāng)前l(fā)ocation的其他處理指令 |
redirect | 發(fā)起臨時(shí)重定向302, 要求repalcement 不以http:// 或者 https:// 或者 $scheme 開(kāi)頭 |
permanent | 發(fā)起永久重定向301 |
是否開(kāi)啟rewrite 模塊處理的日志(level=notice),on |off ; 開(kāi)啟的話會(huì)輸出到error_log里面
http { upstream backend { # http 后端服務(wù)器組;需要處在 http context 內(nèi) least_conn; # 未指定均衡算法 則使用Round Robin 隨機(jī)轉(zhuǎn)發(fā) # least_conn:優(yōu)先向當(dāng)前連接數(shù)最小的服務(wù)器轉(zhuǎn)發(fā) # ip-hash; # 根據(jù)客戶端的ip進(jìn)行取模后轉(zhuǎn)發(fā),能保證同一個(gè)IP的被轉(zhuǎn)發(fā)到一個(gè)服務(wù)器(目的是session共享) # hash $request_uri ;# 通用Hash,根據(jù)請(qǐng)求的某個(gè)參數(shù)來(lái)Hash server 192.168.1.11 weight = 5 fail_timeout=30s max_fail = 10 slow_start=30s; # 如果僅一個(gè)服務(wù)器后面這些參數(shù)會(huì)被忽略 # weight(權(quán)重):接受5/7的請(qǐng)求; # health_ckeck(服務(wù)狀態(tài)檢查):如果30S內(nèi)有10次失敗,則這個(gè)服務(wù)器會(huì)被標(biāo)記為不可用 # slow_start:服務(wù)剛啟動(dòng)時(shí)處理請(qǐng)求可能比較慢(比如緩存是邊運(yùn)行邊加載的情況下),可能會(huì)被流量直接打死,可以設(shè)置slow_start 這段時(shí)間后,流量才會(huì)逐步上升到響應(yīng)的權(quán)重 server 192.168.1.12 weight = 2; #接受 接受2/7的請(qǐng)求 server 192.168.1.10 backup; # 備機(jī)當(dāng)前面兩個(gè)不可用時(shí)會(huì)把請(qǐng)求轉(zhuǎn)發(fā)到這里 } server{ location / { proxy_pass http://backend; } } }
./configure --with-stream
模塊) 及healthCheck# 4層TCP負(fù)載均衡,均衡的是connection,也就說(shuō)不用擔(dān)心一個(gè)ClientSocket的數(shù)據(jù)被負(fù)載到不同的機(jī)器去 # 在nginx.conf 引入啟動(dòng)后(main context);MySQL 連接 127.0.0.1:9000(當(dāng)然是可行的) # 原本打算是試下UDP DNS的,但是手頭沒(méi)Linux環(huán)境所以... stream { # 必須出現(xiàn)在main context,意思是說(shuō)和http event等一個(gè)級(jí)別 server{ listen 127.0.0.1:9090; proxy_pass mysql; } upstream mysql{ #TCP負(fù)載均衡服務(wù)器組 hash $remote_addr consistent; # server 127.0.0.1:3306 weight=5 max_fails=2 fail_timeout=30s slow_start=30s; server 192.168.1.101:3306 ; } # DNS 服務(wù) #server{ # listen 127.0.0.1:53; # proxy_pass remote_dns; #} #upstream remote_dns{ #TCP 負(fù)載均衡服務(wù)器組 # hash $remote_addr consistent; # # server 192.168.1.1:53 ; # dns server # server 192.168.0.1:53; # dns server #} }
到此,相信大家對(duì)“Nginx相關(guān)命令有哪些”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
新聞名稱:Nginx相關(guān)命令有哪些
網(wǎng)站鏈接:http://aaarwkj.com/article2/psopic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷、云服務(wù)器、標(biāo)簽優(yōu)化、自適應(yīng)網(wǎng)站、企業(yè)網(wǎng)站制作、網(wǎng)站策劃
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)