摘要:是至今為止見過最好的入門文章。采取基于事件的模型和依賴的機制,在多個子進程之間高效的分配請求。默認情況下,這個配置文件通常命名為并且會放置在,,或者。
本文屬于翻譯文章,原文鏈接為 nginx Beginner’s Guide。是至今為止見過最好的 nginx 入門文章。額。。。沒有之一。
這篇教程簡單介紹了 nginx 并且講解了一些 nginx 可以解決的簡單任務(wù)。這里,我們假設(shè) nginx 已經(jīng)安裝在讀者的機器上。如果沒有,可以看一下如何安裝 nginx。這篇教程主要講解的是如果啟用和停止ngixn,和重新加載配置,描述配置文件的基本結(jié)構(gòu)和怎樣搭建一個 nginx 靜態(tài)輔助器,怎樣配置 nginx 作為一個代理服務(wù)器來。
nginx 有一個主進程和其他子進程。主進程的主要工作是加載和執(zhí)行配置文件,并且駐留子進程。子進程用來作為實際的請求處理。nginx 采取基于事件的模型和 OS 依賴的機制,在多個子進程之間高效的分配請求。子進程的個數(shù)會直接寫在配置文件中并且,對于給定的配置可以是固定的,或者根據(jù)可用的 CPU 核數(shù)自動的進行調(diào)整(參考 子進程)。
nginx 和它模塊的工作方式是在配置文件中寫好的。默認情況下,這個配置文件通常命名為 nginx.conf 并且會放置在 /usr/local/nginx/conf,/etc/nginx,或者 /usr/local/etc/nginx。
運行可執(zhí)行文件就可以開啟 nginx,比如:
// -c 為 nginx 的配置文件 nginx -c /usr/local/nginx/conf/nginx.conf
如果,nginx 已經(jīng)開啟,那么它就可以通過使用 -s 參數(shù)的可執(zhí)行命令控制。使用下列格式:
nginx -s signal
signal 可以為下列命令之一:
stop — 直接關(guān)閉 nginx
quit — 會在處理完當前正在的請求后退出,也叫優(yōu)雅關(guān)閉
reload — 重新加載配置文件,相當于重啟
reopen — 重新打開日志文件
比如,等待當前子進程處理完正在執(zhí)行的請求后,結(jié)束 nginx 進程,可以使用下列命令:
nginx -s quit
執(zhí)行該命令的用戶需要和啟動的 nginx 的用戶一致。
如果重載配置文件的命令沒有傳遞給 nginx 或者 nginx 沒有重啟,那么配置文件的改動是不會被使用的。重載配置文件的命令可以使用:
nginx -s reload
一旦主進程接收到重載配置文件的命令后,它會先檢查配置文件語法的合法性,如果沒有錯誤,則會重新加載配置文件。如果成功,則主進程會重新創(chuàng)建一個子進程并且發(fā)送關(guān)閉請求給以前的子進程。如果沒有成功,主進程會回滾改動并且繼續(xù)使用以前的配置。老的子進程在接受關(guān)閉的命令后,會停止接受新的請求并且繼續(xù)處理當前的請求,直到處理完畢。之后,該子進程就直接退出了。
在 Unix 工具的幫助下,比如使用 kill 工具,該信號會被發(fā)送給 nginx 進程。在這種情況下,信號會被直接發(fā)送給帶有進程 ID 的進程。nginx 的主進程的進程 ID 是寫死在 nginx.pid 文件中的。該文件通常放在 /usr/local/nginx/logs 或者 /var/run 目錄下。比如,如果主進程的 ID 是 1628,為了發(fā)送 QUIT 信號來使 nginx 優(yōu)雅退出,可以執(zhí)行:
kill -s QUIT 1628
為了得到所有正在運行的 nginx 進程,我們可能會使用到 ps 工具,比如,像下列的方式:
$ ps -ax | grep nginx // 結(jié)果為:(下面是單核 CPU 的情況) 516 pts/0 D+ 0:00 grep --color=auto nginx 1156 ? S 1:22 nginx: worker process 27999 ? Ss 0:00 nginx: master process ./nginx
更多關(guān)于發(fā)送信號給 nginx,可以參考 nginx 控制。
配置文件結(jié)構(gòu)nginx 是由一些模塊組成,我們一般在配置文件中使用一些具體的指令來控制它們。指令被分為簡單指令和塊級命令。一個簡單的指令是由名字和參數(shù)組成,中間用空格分開,并以分號結(jié)尾。例如:
// 簡單指令 root /data/www;
塊級指令和簡單指令一樣有著類似的結(jié)構(gòu),但是末尾不是分號而是用 { 和 } 大括號包裹的額外指令集。如果一個塊級指令的大括號里有其他指令,則它被叫做一個上下文(比如:events,http,server,和 location)。
在配置文件中,沒有放在任何上下文中的指令都是處在主上下文中。events 和 http 的指令是放在主上下文中,server 放在 http 中, location 放在 server 中。
以 # 開頭的行,會被當做注釋。
# this is a comment events { worker_connections 4096; ## Default: 1024 } http { server { listen 80; server_name domain1.com www.domain1.com; access_log logs/domain1.access.log main; root html; location ~ .php$ { fastcgi_pass 127.0.0.1:1025; } } }靜態(tài)服務(wù)器
一個重要的網(wǎng)絡(luò)服務(wù)器的任務(wù)是處理文件(比如圖片或者靜態(tài) HTML 文件)。這里,你會實踐一個例子,文件會從不同的目錄中映射(取決于請求):/data/www(放置 HTML 文件)和 /data/images(放置圖片)。這需要配置一下文件,將帶有兩個 location 的指令的 server 的塊級命令放在 server 指令中。
首先,創(chuàng)建一個 /data/www 目錄,然后放置一個事先寫好內(nèi)容的 index.html 文件。接著,創(chuàng)建一個 /data/images 目錄,然后放置一些圖片。
下一步,打開配置文件。默認的配置文件已經(jīng)包含了一些關(guān)于 server 指令的樣式,大多數(shù)情況下直接把他們給注釋掉。現(xiàn)在,注釋掉其他的區(qū)塊,然后寫一個新的 server 區(qū)塊:
http { server { } }
通常,該配置文件可能會包含多個 server 指令。這些 server 指令監(jiān)聽不同的端口和服務(wù)器名。一旦 nginx 決定哪個服務(wù)進程處理請求,它會根據(jù)在 server 塊級指令中定義好的 location 指令的參數(shù),來匹配請求頭中指定的 URI。
將下列 location 指令添加到 server 指令中:
location / { root /data/www; }
該 location 指令相對于請求中的 URI 執(zhí)行了 “/” 的前綴。為了匹配請求,URI 會被添加到 root 命令指定的路徑后,即 /data/www,得到本地文件系統(tǒng)中請求文件的路徑。如果,有幾個 location 匹配到,那么 nginx 會選擇最長的前綴。上面的 location 提供了長度為 1 的前綴,所以,僅當其他的 location 匹配失敗后,該指令才會使用。
接著,添加第二個 location 區(qū)塊:
location /images/ { root /data; }
它會匹配到以 /images/ 開頭的請求(location / 也會匹配到該請求,只是前綴更短)
server 塊級命令的配置結(jié)果如下:
server { location / { root /data/www; } location /images/ { root /data; } }
這已經(jīng)是一個可用的服務(wù)器配置,它監(jiān)聽標準的 80 端口并且可以在本地上通過 http://localhost/ 訪問。對于 URI 以 /images/ 開頭的請求,服務(wù)器會從 /data/images 目錄中,返回對應的文件。例如,nginx 會返回 /data/images/example.png 文件,當接收到 http://localhost/images/example.png 的請求響應時。如果該文件不存在,nginx 會返回一個 404 錯誤的響應。沒有以 /images/ 開頭的 URI 的請求,將會直接映射到 /data/www 目錄中。比如,響應 http://localhost/some/example.html 的請求,nginx 會發(fā)送 /data/www/some/example.html 文件。
為了使用新的配置文件,如果還沒開啟 nginx 需要先開啟,然后將重載信號發(fā)送給 nginx 的主進程,通過執(zhí)行:
nginx -s reload
如果你發(fā)現(xiàn)有些地方出了問題,你可以在 /usr/local/nginx/logs 或者 /var/log/nginx 目錄下的 access.log 和 error.log 文件中,找到原因。
搭建一個簡易的代理服務(wù)nginx 常常用來作為代理服務(wù)器,這代表著服務(wù)器接收請求,然后將它們傳遞給被代理服務(wù)器,得到請求的響應,再將它們發(fā)送給客戶端。
我們將配置一個基本的代理服務(wù)器,它會處理本地圖片文件的請求并返回其他的請求給被代理的服務(wù)器。在這個例子中,兩個服務(wù)器都會定義在一個 nginx 實例中。
首先,通過在 nginx 配置文件中添加另一個 server 區(qū)塊,來定義一個被代理的服務(wù)器,像下面的配置:
server { listen 8080; root /data/up1; location / { } }
上面就是一個簡單的服務(wù)器,它監(jiān)聽在 8080 端口(之前,listen 并沒被定義,是因為默認監(jiān)聽的 80 端口)并且會映射所有的請求給 本地文件目錄 /data/up1。創(chuàng)建該目錄,然后添加 index.html 文件。注意,root 指令是放在 server 上下文中。當響應請求的 location 區(qū)塊中,沒有自己的 root 指令,上述的 root 指令才會被使用。
接著,使用前面章節(jié)中的 server 配置,然后將它改為一個代理服務(wù)配置。在第一個 location 區(qū)塊中,放置已經(jīng)添加被代理服務(wù)器的協(xié)議,名字和端口等參數(shù)的 proxy_pass 指令(在這里,就是 http://localhost:8080):
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
我們將修改第二個 location 區(qū)塊,使他返回一些典型后綴的圖片文件請求,現(xiàn)在它只會映射帶有 /images/ 前綴的請求到 /data/images 目錄下。修改后的 location 指令如下:
location ~ .(gif|jpg|png)$ { root /data/images; }
該參數(shù)是一個正則表達式,它會匹配所有以 .gif,.jpg 或者 .png 結(jié)尾的 URIs。一個正則表達式需要以 ~ 開頭。匹配到的請求會被映射到 /data/images 目錄下。
當 nginx 在選擇 location 去響應一個請求時,它會先檢測帶有前綴的 location 指令,記住先是檢測帶有最長前綴的 location,然后檢測正則表達式。如果有一個正則的匹配的規(guī)則,nginx 會選擇該 location,否則,會選擇之前緩存的規(guī)則。
最終,一個代理服務(wù)器的配置結(jié)果如下:
server { location / { proxy_pass http://localhost:8080/; } location ~ .(gif|jpg|png)$ { root /data/images; } }
該服務(wù)器會選擇以 .gif,.jpg,或者 .png 結(jié)束的請求并且映射到 /data/images 目錄(通過添加 URI 給 root 指令的參數(shù)),接著將其他所有的請求映射到上述被代理的服務(wù)器。
為了使用新的配置,像前幾個章節(jié)描述的一樣,需要向 nginx 發(fā)送重載信號。
這還有很多其他的指令,可以用于進一步配置代理連接。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/39380.html
上篇文章和大家聊了 Spring Session 實現(xiàn) Session 共享的問題,有的小伙伴看了后表示對 Nginx 還是很懵,因此有了這篇文章,算是一個 Nginx 掃盲入門吧! 基本介紹 Nginx 是一個高性能的 HTTP 和反向代理 web 服務(wù)器,同時也提供了 IMAP/POP3/SMTP 服務(wù)。 Nginx 是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的 Rambler.ru 站點開發(fā)...
摘要:還是回到萬能的文件,添加匹配規(guī)則實現(xiàn)代理轉(zhuǎn)發(fā)設(shè)置代理轉(zhuǎn)發(fā)通過上面的設(shè)置,在重啟服務(wù),可以讓頁面中所有包含字段的請求都轉(zhuǎn)為由服務(wù)器去向地址發(fā)送請求,從而巧妙的解決了瀏覽器的跨域問題。 1.Nginx入門與基本操作篇 注:由于服務(wù)器是windows系統(tǒng),所以本文主要講解Nginx在windows下的操作。 首先下載Nginx 解壓縮,我們所有的配置基本都在萬能的 nginx/conf/...
摘要:基本入門前端掘金作者本文屬于翻譯文章,原文鏈接為。如果如何把應用放在容器中運行掘金本文適合零基礎(chǔ),且希望使用運行應用的人士。后端掘金使用構(gòu)建網(wǎng)站。 nginx 基本入門 - 前端 - 掘金作者:villainthr 本文屬于翻譯文章,原文鏈接為 nginx Beginner’s Guide。是至今為止見過最好的 nginx 入門文章。額。。。沒有之一。 這篇教程簡單介紹了 nginx ...
摘要:老師比較精明,他告訴學生,誰完成了作業(yè)舉手,有舉手的同學他才去指導問題,他讓學生主動發(fā)聲,分開了并發(fā)。 一、環(huán)境 服務(wù)器版本:CentOS 7.2 為了保證學習階段不遇到奇怪的事情,請保證以下四點(大神選擇性無視) 確認系統(tǒng)網(wǎng)絡(luò) 確認yum可用 確認關(guān)閉iptables 確認停用selinux #查看iptables狀態(tài) systemctl status firewalld.ser...
摘要:老師比較精明,他告訴學生,誰完成了作業(yè)舉手,有舉手的同學他才去指導問題,他讓學生主動發(fā)聲,分開了并發(fā)。 一、環(huán)境 服務(wù)器版本:CentOS 7.2 為了保證學習階段不遇到奇怪的事情,請保證以下四點(大神選擇性無視) 確認系統(tǒng)網(wǎng)絡(luò) 確認yum可用 確認關(guān)閉iptables 確認停用selinux #查看iptables狀態(tài) systemctl status firewalld.ser...
閱讀 2708·2021-09-30 10:00
閱讀 3635·2021-09-22 10:54
閱讀 6752·2021-09-07 10:28
閱讀 3139·2019-08-29 13:53
閱讀 945·2019-08-29 12:42
閱讀 1112·2019-08-26 13:51
閱讀 1389·2019-08-26 13:32
閱讀 3159·2019-08-26 10:39