Nginx 從入門到放棄(一)


Nginx

nginx的使用場景

靜態資源服務

  • 通過本地文件系統提供服務

反向代理服務

  • nginx的強大性能

  • 緩存

  • 負載均衡

API服務

  • OpenResty

nginx優點

  • 高並發、高性能

  • 可擴展性好

  • 高可靠性

  • 熱部署

  • BSD許可證

nginx的安裝

詳見官方文檔

nginx的啟動,停止和重載

nginx有一個主進程和一些工作進程,主進程的目的是讀取執行配置和維持工作進程。nginx的默認配置文件在/usr/local/nginx/conf或/etc/nginx中

nginx的啟動

 # 執行nginx可執行文件
 $ nginx

同時也可以通過參數 -s 進行控制

nginx -s signal

允許的信號量

  • stop —— 快速停止

  • quit —— 優雅的停止

  • reload —— 重新載入配置文件

  • reopen —— 重新打開日志文件

例如,等待工作進程完成當前請求后去停止nginx進程,這個命令可以被執行

 nginx -s quit

這個命令應該被用在已經開啟nginx的用戶上

改變配置文件不提交,直到重載配置的命令發送給nginx或已經重啟。去重新載入配置,執行

 nginx -s reload

主進程接收到去重載的配置信號后,它會檢查新的配置文件的語法是否合法並嘗試去應用所提供的配置,若應用成功,主進程將開啟新的工作進程並發送信息給舊工作進程,請求它去關閉。否則,主進程就會回滾這個改變並繼續用舊配置工作。舊工作進程接收到一個關閉命令后,停止接收新連接並繼續去服務當前請求直到所有請求已經服務完畢。之后,舊進程退出。

一個信號量也可能被發送給nginx進程通過unix工具的幫助,比如kill。在這種情況下,信號被定向發送給一個進程通過所給的進程號。nginx主進程的進程號被寫入,默認nginx.pid在/usr/local/nginx/logs or /var/run目錄下。比如,如果主進程id是1628,發送QUIT信號導致nginx 優雅關閉,執行:

kill -s QUIT 1628

獲取所有nginx運行的進程,可以用ps命令,用這種方式

ps -ax |grep nginx

獲取更多nginx信號量的信息,去nginx的控制

配置文件的結構

nginx 是由被配置文件提供的指令控制的模塊組成的。這些指令分為簡單指令和塊指令。簡單指令由名字和用空格分離的參數和用於結束的;組成的。塊指令和簡單指令結構相同,但取代分號用於結束的方式的是一個額外的用{}圍繞的結構。如果塊指令有其他指令在{}里面,它被稱為上下文。(例如:events,http,server和location)

指令放置在配置文件所有被認為是主要上下文的上下文外部。events和http指令處於main上下文中,server在http中,location在server中。

一行中# 后面的內容被認為是評論

 # nginx.conf
 
 events {}
 
 http {
    server {
        location {
           
        }
    }
 }

服務的靜態內容

一個重要的web服務任務就是提供文件(例如:圖片或靜態html頁面)。你將執行一個例子,依賴於請求,文件將被提供從不同的本地目錄中:/data/www(這個可能包含html文件)和/data/images(包含圖片)。這些將要求編輯配置文件並啟動一個在http塊內的server塊,里面包含兩個location塊。

首先,創建/data/www目錄和放入一個有文本內容的Index.html文件,並且創建一個/data/images目錄並放入一些圖片文件在里面。

接下來,打開配置文件。默認的配置文件已經包含幾個server塊的例子,和大部分注釋。現在注釋掉所有的這些塊,開始一個新的server塊:

 http {
    server {
    }
 }

通常,配置文件可能包含幾個server塊,通過它們listen的端口和server names。一旦nginx決定哪個server進程處理請求,它測試請求頭指定的uri,根據在server塊中location指令定義的參數。

將以下location塊添加到server塊:

 location / {
    root /data/www;
 }

這個location塊指定與請求中uri進行對比的 “/” 前端。 用於匹配請求,這uri將添加在root指令中指定的路徑,即/data/www,以形成本地文件系統上所請求文件的路徑。如果多個匹配到location塊,nginx選擇一個最長的前綴。location塊以上提供最短的前綴,長度一個,只有所有其他location塊失敗后,這個塊才會被使用。

接下來,添加第二個location塊:

 location /images/ {:
    root /data;
 }

它將匹配一個以/images/開始的請求(location / 也匹配這個請求,但有短的前綴)

這導致server塊的配置應該像這樣:

 server {
    location / {
        root /data/www;
    }
     
    location /images/ {
        root /data;
    }
 }

這是一個已經工作的服務配置,它監聽標准端口80,並且可以通過http://localhost/.訪問本地。響應以/images/開頭的請求,這個服務將發送文件從/data/images目錄。例如響應以http://localhost/images/example.png 的請求,nginx將發送/data/images/example.png文件。如果這文件不存在,nginx將返回一個帶404錯誤的響應。不以/images/開始的請求將映射到/data/www目錄。例如,響應以http://localhost/some/example.html的請求,nginx將發送/data/www/some/example.html文件

要應用新配置,請啟動nginx(如果尚未啟動)或通過執行以下命令將重新加載信號發送到nginx的主進程:

 nginx -s reload

以防一些事情不能像所期待的工作,你可以嘗試在access.log和error.log中找原因,在/usr/local/nginx/logs or /var/log/nginx.中

設置簡單的代理服務器

nginx的一個常見用途是將其設置為代理服務器,這意味着服務器接收請求,將它們傳遞給代理服務器,從中檢索響應,然后將它們發送給客戶

我們將配置一個基本代理服務器,它使用來自本地目錄的文件處理圖像請求,並將所有其他請求發送到代理服務器。在此示例中,將在單個nginx實例上定義兩個服務器。

首先,通過向nginx的配置文件添加一個服務器塊來定義代理服務器,其中包含以下內容:

 server {
    listen 8080;
    root /data/up1;
 
    location / {
    }
 }

這將是一個偵聽端口8080的簡單服務器(之前,自使用標准端口80以來尚未指定listen指令)並將所有請求映射到本地文件系統上的/ data / up1目錄。創建此目錄並將index.html文件放入其中。請注意,root指令放在服務器上下文中。當選擇用於提供請求的位置塊不包括自己的根指令時,使用這樣的根指令。

nginx實現負載均衡

 # conf/nginx.conf
 
 upstream tomcat_server{
    server 192.168.1.2:8080 weight=1;
    server 192.168.1.3:8080 weight=1;
 }
 
 server {
    listen 80;
    server_name localhost;
     
    location / {
        proxy_pass http://tomcat_server;
    }
 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM