nginx 應(yīng)用

了解nginx

參考文檔:http://www.nginx.cn/doc/

nginx是一款高性能的HTTP和反向代理服務(wù)器軟件,也是一個IMAP/POP3/SMTP代理服務(wù)器,可以運(yùn)行在Unix, GNU/Linux,BSD,MacOS x,以及Windows等操作系統(tǒng)中。

Nginx與Apache的異同

相同點(diǎn):

都是一個HTTP服務(wù)器軟件。支持正、反向代理,虛擬主機(jī),url重寫,壓縮傳輸,SSL加密傳輸?shù)取?/p>

不同點(diǎn):

Apache處理速度很慢,且占用很多內(nèi)存資源,而Nginx卻恰恰相反。

nginx安裝

下載地址:http://nginx.org/en/download.html

centos6 nginx 安裝?

https://www.cnblogs.com/yaoximing/p/6068622.html

Mac nginx 安裝

參考地址:https://www.cnblogs.com/meng1314-shuai/p/8335140.html

步驟:

1、查詢要安裝的軟件是否存在

brew search nginx ?

2、查看nginx是否安裝

brew info nginx


顯示本地已安裝nginx,版本1.15.3,未安裝執(zhí)行第三步。

3、安裝nginx

brew install nginx

4、查看nginx安裝目錄(是否如info所說)

open /usr/local/etc/nginx/

open /usr/local/Cellar/nginx ? ? //其實(shí)這個才是nginx被安裝到的目錄

5、啟動nginx,終端輸入如下命令:

nginx

沒有報錯即為啟動成功。

6、打開瀏覽器訪問localhost:8080, 如出現(xiàn)以下界面,說明安裝成功


Nginx命令參數(shù)

nginx -t:測試配置文件是否正確

nginx -s reload, 作用:加載最新配置

nginx -s stop,作用:立即停止?

nginx -s quit,作用:優(yōu)雅停止 (當(dāng)前存在訪問,直到訪問結(jié)束才停止)

nginx -s reopen,作用:重新打開日志

nginx 配置

在nginx.conf的注釋符號位#

nginx文件結(jié)構(gòu):


1、全局塊:配置影響nginx全局的指令。一般有運(yùn)行nginx服務(wù)器的用戶組,nginx進(jìn)程pid存放路徑,日志存放路徑,配置文件引入,允許生成worker process數(shù)等。

2、events塊:配置影響nginx服務(wù)器或與用戶的網(wǎng)絡(luò)連接。有每個進(jìn)程的最大連接數(shù),選取哪種事件驅(qū)動模型處理連接請求,是否允許同時接受多個網(wǎng)路連接,開啟多個網(wǎng)絡(luò)連接序列化等。

3、http塊:可以嵌套多個server,配置代理,緩存,日志定義等絕大多數(shù)功能和第三方模塊的配置。如文件引入,mime-type定義,日志自定義,是否使用sendfile傳輸文件,連接超時時間,單連接請求數(shù)等。

4、server塊:配置虛擬主機(jī)的相關(guān)參數(shù),一個http中可以有多個server。

5、location塊:配置請求的路由,以及各種頁面的處理情況。

示例配置文件

########### 每個指令必須有分號結(jié)束。#################

#user administrator administrators;? #配置使用用戶或者組,默認(rèn)為nobody nobody。

worker_processes 2;? #允許生成的進(jìn)程數(shù),默認(rèn)為1,CPU數(shù)量*核數(shù),通常等于CPU數(shù)量或者2倍于CPU

#pid /nginx/pid/nginx.pid;? #指定nginx進(jìn)程運(yùn)行文件存放地址

error_log log/error.log debug;? #制定日志路徑,級別。這個設(shè)置可以放入全局塊,http塊,server塊,級別以此為:debug|info|notice|warn|error|crit|alert|emerg

events {

? ? accept_mutex on;? #設(shè)置網(wǎng)路連接序列化,防止驚群現(xiàn)象發(fā)生,默認(rèn)為on

? ? multi_accept on;? #設(shè)置一個進(jìn)程是否同時接受多個網(wǎng)絡(luò)連接,默認(rèn)為off

? ? #use epoll;? ? ? #事件驅(qū)動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport

? ? worker_connections? 1024;? ? #最大連接數(shù),默認(rèn)為512

}

http {

? ? include? ? ? mime.types;? #文件擴(kuò)展名與文件類型映射表

? ? default_type? application/octet-stream; #默認(rèn)文件類型,默認(rèn)為text/plain

? ? #access_log off; #取消服務(wù)日志? ?

? ? log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定義格式

? ? access_log log/access.log myFormat;? #combined為日志格式的默認(rèn)值

? ? sendfile on;? #允許sendfile方式傳輸文件,默認(rèn)為off,可以在http塊,server塊,location塊。

? ? sendfile_max_chunk 100k;? #每個進(jìn)程每次調(diào)用傳輸數(shù)量不能大于設(shè)定的值,默認(rèn)為0,即不設(shè)上限。

? ? keepalive_timeout 65;? #連接超時時間,默認(rèn)為75s,可以在http,server,location塊。

? ? #gzip on; #開啟gzip壓縮

? ?#charset gb2321; #設(shè)置字符編碼

? ? upstream mysvr {?

? ? ? server 127.0.0.1:7878;

? ? ? server 192.168.10.121:3333 backup;? #熱備

? ? }

? ? error_page 404 https://www.baidu.com; #錯誤頁

? ? server {

? ? ? ? keepalive_requests 120; #單連接請求上限次數(shù)。

? ? ? ? listen? ? ? 4545;? #監(jiān)聽端口

? ? ? ? server_name? 127.0.0.1;? #監(jiān)聽地址? ? ?

? ? ? ? location? ~*^.+$ {? ? ? #請求的url過濾,正則匹配,~為區(qū)分大小寫,~*為不區(qū)分大小寫。

? ? ? ? ? #root path;? #根目錄

? ? ? ? ? #index vv.txt;? #設(shè)置默認(rèn)頁

? ? ? ? ? proxy_pass? http://mysvr;? #請求轉(zhuǎn)向mysvr 定義的服務(wù)器列表

? ? ? ? ? deny 127.0.0.1;? #拒絕的ip

? ? ? ? ? allow 172.18.5.54; #允許的ip? ? ? ? ?

? ? ? ? }

? ? }

}

日志格式設(shè)置。

$remote_addr與$http_x_forwarded_for用以記錄客戶端的ip地址;

$remote_user:用來記錄客戶端用戶名稱;

$time_local:?用來記錄訪問時間與時區(qū);

$request:?用來記錄請求的url與http協(xié)議;

$status:?用來記錄請求狀態(tài);成功是200,

$body_bytes_sent?:記錄發(fā)送給客戶端文件主體內(nèi)容大小;

$http_referer:用來記錄從那個頁面鏈接訪問過來的;

$http_user_agent:記錄客戶瀏覽器的相關(guān)信息;

nginx之location配置

語法規(guī)則:location [=|~|~*|^~] /uri/ { … }

=?開頭表示精確匹配?

^~?開頭表示uri以某個常規(guī)字符串開頭,理解為匹配 url路徑即可。

~開頭表示區(qū)分大小寫的正則匹配。

~*開頭表示不區(qū)分大小寫的正則匹配。

!~和!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配?的正則。

/?通用匹配,任何請求都會匹配到。

多個location配置的情況下匹配順序?yàn)椋?br>

首先匹配 =,其次匹配^~, 其次是按文件中順序的正則匹配,最后是交給 / 通用匹配。當(dāng)有匹配成功時候,停止匹配,按當(dāng)前匹配規(guī)則處理請求。

location?=?/?{??

???#規(guī)則A??

}??

location?=?/login?{??

???#規(guī)則B??

}??

location?^~?/static/?{??

???#規(guī)則C??

}??

location?~?\.(gif|jpg|png|js|css)$?{??

???#規(guī)則D??

}??

location?~*?\.png$?{??

???#規(guī)則E??

}??

location?!~?\.xhtml$?{??

???#規(guī)則F??

}??

location?!~*?\.xhtml$?{??

???#規(guī)則G??

}??

location?/?{??

???#規(guī)則H??

}??

那么產(chǎn)生的效果如下:

訪問根目錄/, 比如http://localhost/ 將匹配規(guī)則A

訪問 http://localhost/login 將匹配規(guī)則B,

http://localhost/register 則匹配規(guī)則H

訪問 http://localhost/static/a.html 將匹配規(guī)則C

訪問 http://localhost/a.gif, http://localhost/b.jpg 將匹配規(guī)則D和規(guī)則E,但是規(guī)則D順序優(yōu)先,規(guī)則E不起作用,而 http://localhost/static/c.png 則優(yōu)先匹配到 規(guī)則C

訪問 http://localhost/a.PNG 則匹配規(guī)則E, 而不會匹配規(guī)則D,因?yàn)橐?guī)則E不區(qū)分大小寫。

訪問 http://localhost/a.xhtml 不會匹配規(guī)則F和規(guī)則G,http://localhost/a.XHTML不會匹配規(guī)則G,因?yàn)椴粎^(qū)分大小寫。規(guī)則F,規(guī)則G屬于排除法,符合匹配規(guī)則但是不會匹配到,所以想想看實(shí)際應(yīng)用中哪里會用到。

訪問 http://localhost/category/id/1111 則最終匹配到規(guī)則H,因?yàn)橐陨弦?guī)則都不匹配,這個時候應(yīng)該是nginx轉(zhuǎn)發(fā)請求給后端應(yīng)用服務(wù)器,比如FastCGI(php),tomcat(jsp),nginx作為方向代理服務(wù)器存在。

location常見配置指令,alias、root、proxy_pass

1、【alias】——別名配置,用于訪問文件系統(tǒng),在匹配到location配置的URL路徑后,指向【alias】配置的路徑。如:

location /test/

{

? ? alias/first/second/img/;

}

即:請求/test/1.jpg(省略了協(xié)議與域名),將會返回文件/first/second/img/1.jpg。

2、【root】——根路徑配置,用于訪問文件系統(tǒng),在匹配到location配置的URL路徑后,指向【root】配置的路徑,并把location配置路徑附加到其后。如:

location /test/

{

? ? root /first/second/img/;

}

即:請求/test/1.jpg(省略了協(xié)議與域名),將會返回文件/first/second/img/test/1.jpg,相較于alias,使用root會把/test/附加到根目錄之后。

3、【proxy_pass】——反向代理配置,用于代理請求,適用于前后端負(fù)載分離或多臺機(jī)器、服務(wù)器負(fù)載分離的場景,在匹配到location配置的URL路徑后,轉(zhuǎn)發(fā)請求到【proxy_pass】配置的URL,是否會附加location配置路徑與【proxy_pass】配置的路徑后是否有"/"有關(guān),有"/"則不附加,如:

location /test/

{

? ? proxy_pass http://127.0.0.1:8080/;

}

即:請求/test/1.jpg(省略了協(xié)議與域名),將會被nginx轉(zhuǎn)發(fā)請求到http://127.0.0.1:8080/1.jpg(未附加/test/路徑)。

location /test/

{

? ? proxy_pass http://127.0.0.1:8080;

}

即:請求/test/1.jpg(省略了協(xié)議與域名),將會被nginx轉(zhuǎn)發(fā)請求到http://127.0.0.1:8080/test/1.jpg(附加/test/路徑)。

location/test/

{

? ? proxy_pass http://127.0.0.1:8080/img;

}

即:請求/test/1.jpg(省略了協(xié)議與域名),將會被nginx轉(zhuǎn)發(fā)請求到http://127.0.0.1:8080/img1.jpg(未附加/test/路徑,但附加了/test/之后的路徑)。

解決nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed錯誤?

解決方法:

使用nginx -c的參數(shù)指定nginx.conf文件的位置

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容