摘要:入門指引啟動,停止和重載配置配置文件的結構服務靜態(tài)內容建立簡單的代理服務器建立代理這個指引對做了一些簡單的介紹并且描述了一些它可以完成的簡單任務。如果一個塊級指令中包含了其它指令,那么它被稱為一個上下文。為了使配置生效,要發(fā)送信號。
興趣使然的翻譯,業(yè)余水平,nginx官方英文介紹文檔很不錯,可惜中文網(wǎng)上好像沒有相應的翻譯。
入門指引
啟動,停止和重載配置
配置文件的結構
服務靜態(tài)內容
建立簡單的代理服務器
建立FastCGI代理
這個指引對nginx做了一些簡單的介紹并且描述了一些它可以完成的簡單任務。我們假定讀者已經(jīng)安裝了nginx,如果沒有的話,請看安裝nginx頁面。這個指引描述了如何啟動和停止nginx,以及重載它的配置、解釋了配置文件的結構以及如何讓nginx服務靜態(tài)內容、如何配置nginx使之成為代理服務器、和如何用將它和一個FastCGI的應用連接起來。
nginx有一個主進程和若干個工作進程。主進程的主要目的是讀取和分析配置文件以及管理工作進程。工作進程處理實際的請求。nginx使用了基于事件的模型和操作系統(tǒng)依賴型的機制來有效地向工作進程分發(fā)請求。工作進程的數(shù)量由配置文件定義,也可以通過修改一個給定的配置文件中來改變,或者自動地根據(jù)cpu的核數(shù)進行調整(詳見工作進程)
nginx和它的模塊們的工作方式由配置文件決定,默認情況下,配置文件名叫nginx.conf,它被放置在/usr/local/nginx/conf,/etc/nginx 或 usr/local/etc/nginx 目錄下。
啟動,停止和重載配置運行可執(zhí)行文件來啟動nginx。一旦nginx被啟動,它可以通過調用帶 -s 參數(shù)的可執(zhí)行命令被控制。使用如下語法:
nginx -s signal
其中,signal 可以是以下幾種之一:
stop —— 快速關閉
quit —— 平穩(wěn)關閉
reload —— 重載配置文件
reopen —— 重新打開日志文件
例如,當需要等待工作進程處理完當前請求時才關閉nginx,可以使用以下命令:
nginx -s quit
這個命令應該由啟動nginx的用戶執(zhí)行
對配置文件的更改不會立即生效直接到reload命令被執(zhí)行或者nginx被重啟。執(zhí)行reload命令:
nginx -s reload
一旦主進程收到重載配置文件的信號,它會檢查新配置文件的語法并嘗試應用其中的配置。如果應用成功了,它會啟動新的工作進程并且發(fā)送關閉的請求給舊的工作進程;否則,主進程回滾修改并且繼續(xù)使用舊的配置工作。舊的工作進程收到關閉的命令后,停止接收新的連接并繼續(xù)服務當前的請求直到所有這樣的請求都被服務。然后,舊的工作進程就會關閉。
一個信號也可以通過unix工具被發(fā)送給nginx的進程,比如kill。在這種情況下,一個信號通過一個進程id直接被發(fā)送給進程。默認情況下,nginx的主進程id被記錄在 /usr/local/nginx/logs 或 /var/run 目錄下的nginx.pid文件里。例如,如果主進程id是1628,為了發(fā)送quit信號使nginx平穩(wěn)關閉,可以執(zhí)行:
kill -s QUIT 1628
為了獲得所有運行中的nginx進程的列表,可以使用ps命令,例如:
ps -ax | grep nginx
更多的關于發(fā)送信號的信息,參加控制nginx
nginx包含一些被配置文件中的指令控制的模塊。指令被分為簡單指令和塊級指令兩種。一個簡單指令包含了由空格分開的名稱和參數(shù),并且以分號結尾。一個塊級指令和簡單指令有一樣的結構,但它不使用分號結尾而使用一些被{(和)}包圍的額外結構來結尾。如果一個塊級指令中包含了其它指令,那么它被稱為一個上下文。比如events,http,server和location
#號后的內容是注釋
服務靜態(tài)內容web服務器的一個重要任務是對外輸出文件,比如圖片和靜態(tài)網(wǎng)頁。你會實現(xiàn)一個這樣的例子:根據(jù)不同的請求,文件會從不同的本地目錄,如: /data/www (html) 和 /data/images 被輸出。這需要修改配置文件并且在http塊指令中建立帶有兩個location塊的server塊。
首先,創(chuàng)建/data/www的目錄并且放置一個index.html的文件,然后創(chuàng)建/data/images目錄并放置一些圖片
接下來,打開配置文件。默認的配置文件中已經(jīng)包含了幾個server塊指令的例子,其中大多數(shù)被注釋掉了。現(xiàn)在,注釋掉所有這樣的塊指令并且建立一個新的server塊指令。
http { server { } }
通常一個配置文件會包含若干個server塊,并通過他們監(jiān)聽的端口和他們的服務名稱來區(qū)分。一旦nginx決定了那個由哪個server來處理一個請求,它就會檢驗請求頭部的URI并用location指令的參數(shù)和其對比,location塊被定義在server塊中。
location / { root /data/www; }
這里location塊聲明了一個"/"前綴來和請求中的URI進行對比。對于成功匹配的請求,URI會被添加到root指令聲明的路徑后面,形成一個在本地文件系統(tǒng)中對于所需文件的請求。如果有多個匹配的location塊,則nginx選擇最長前綴的那個。以上的location塊的前綴只有一個字符,是最短的,因此只有當其它location都匹配失敗時,這個location才會被選擇。
現(xiàn)在,添加第二個location塊:
location /images/ { root /data; }
它會匹配以/images/開始的請求(location / 也會匹配這個請求,但它的前綴更短)
現(xiàn)在,server塊指令看起來就像這樣
server { location / { root /data/www; } location /images/ { root /data; } }
這個配置已經(jīng)可以工作了,它監(jiān)聽在標準的80端口上,并且可以在本機上通過http://localhost/訪問。為了響應以/images/開頭的URI,服務器會從/data/images目錄中發(fā)送文件。比如:為了響應http://localhost/images/example.png,nginx會發(fā)送/data/images/example.png這個文件,如果不存在這樣的文件,nginx就會發(fā)送404錯誤。而不以/images/開頭的請求則被映射到/data/www目錄,比如:http://localhost/some/example.html被映射到/data/www/some/example.html文件。
建立簡單的代理服務器nginx一個最常見的用途就是用作代理服務器,也就是把收到的請求傳遞給被代理的服務器,并從被代理服務器中取回響應,再將其發(fā)送給客戶端。
我們會配置一個基本的代理服務器,對于圖片文件的請求,從本地目錄中發(fā)送文件,而對于其它的請求,則把請求轉發(fā)給另一個被代理服務器。在這個例子里,兩個服務器都會在一個單一的nginx實例中被定義。
首先,通過添加一個塊指令定義一個被代理服務器:
server { listen 8080; root /data/up1; location / { } }
這是一個監(jiān)聽在8080端口的簡單服務器(之前我們定義的server塊不聲明listen指令是因為使用了標準的80端口)并且會把所有請求映射到本地的 /data/upl 文件夾。創(chuàng)建這個文件夾并且放入一個index.html文件。注意,這里的root指令被放在了server上下文中。當有一個location被選擇了而它的內部卻沒有root指令時,它就會使用server中的這個root指令。
接下來,修改在前一節(jié)中的server配置使它變?yōu)橐粋€代理服務器的配置。在第一個location塊中,添加proxy_pass指令,它的參數(shù)是被代理服務器的協(xié)議,名稱和端口。(本例中,參數(shù)是 http://localhost:8080):
server { location / { proxy_pass http://localhost:8080; } location /images/ { root /data; } }
我們現(xiàn)在修改第二個location塊,使它由原先的匹配/images/前綴變?yōu)槠ヅ涞湫偷膱D片文件擴展名。修改后的location如下:
location ~ .(gif|jpg|png)$ { root /data/images; }
這個參數(shù)是一個匹配所有以.gif,.jpg或.png結尾的URI的正則表達式。~ 應該被寫在正則表達式前面。
當nginx選擇一個location時,它先檢查前綴,并且記錄匹配的location(最長前綴),然后nginx再檢查正則表達式,如果有一個正則表達式匹配,它就選擇這個location,否則,選擇之前記錄的location。
最終的代理服務器配置:
server { location / { proxy_pass http://localhost:8080/; } location ~ .(gif|jpg|png)$ { root /data/images; } }
現(xiàn)在,這個服務器可以將以.gif,.jpg或.png結尾的請求映射到本機目錄,將其它所有請求發(fā)送到被代理服務器。
為了使配置生效,要發(fā)送reload信號。
建立FastCGI代理nginx可以用來把請求路由給FastCGI服務器。FastCGI服務器可以運行由多種框架和程序語言(如PHP)構建的應用。
最基本的配置方法是使用fastcgi_pass指令取代proxy_pass指令,并且用fastcgi_param指令設置參數(shù)。假設FastCGI服務器可訪問路徑是localhost:9000,用前一節(jié)的代理服務器的配置作為基礎進行修改。在PHP下,SCRIPT_FILENAME 參數(shù)是用來指定腳本名稱, QUERY_STRING 是用來傳遞請求參數(shù)。改變結果如下:
server { location / { fastcgi_pass localhost:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param QUERY_STRING $query_string; } location ~ .(gif|jpg|png)$ { root /data/images; } }
到此就建立了一個FastCGI代理服務器,可以將靜態(tài)圖片以外的請求通過FastCGI協(xié)議傳遞給被代理服務器 localhost:9000
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/39163.html
摘要:老師比較精明,他告訴學生,誰完成了作業(yè)舉手,有舉手的同學他才去指導問題,他讓學生主動發(fā)聲,分開了并發(fā)。 一、環(huán)境 服務器版本:CentOS 7.2 為了保證學習階段不遇到奇怪的事情,請保證以下四點(大神選擇性無視) 確認系統(tǒng)網(wǎng)絡 確認yum可用 確認關閉iptables 確認停用selinux #查看iptables狀態(tài) systemctl status firewalld.ser...
摘要:老師比較精明,他告訴學生,誰完成了作業(yè)舉手,有舉手的同學他才去指導問題,他讓學生主動發(fā)聲,分開了并發(fā)。 一、環(huán)境 服務器版本:CentOS 7.2 為了保證學習階段不遇到奇怪的事情,請保證以下四點(大神選擇性無視) 確認系統(tǒng)網(wǎng)絡 確認yum可用 確認關閉iptables 確認停用selinux #查看iptables狀態(tài) systemctl status firewalld.ser...
閱讀 817·2021-10-13 09:39
閱讀 3697·2021-10-12 10:12
閱讀 1741·2021-08-13 15:07
閱讀 1005·2019-08-29 15:31
閱讀 2882·2019-08-26 13:25
閱讀 1776·2019-08-23 18:38
閱讀 1878·2019-08-23 18:25
閱讀 1857·2019-08-23 17:20