Nginx配置指南

歡迎光臨我的博客拓跋的前端客棧,這個是原文地址。如果您發(fā)現(xiàn)我文章中存在錯誤,請盡情向我吐槽,大家一起學(xué)習(xí)一起進(jìn)步φ(>ω<*)

什么是Nginx?


沒有什么文檔比直接從Nginx官網(wǎng)來的更準(zhǔn)確清晰了。

Nginx [engine x] is an HTTP and reverse proxy server, a mail proxy server, and a generic TCP/UDP proxy server, originally written by Igor Sysoev. For a long time, it has been running on many heavily loaded Russian sites including Yandex, Mail.Ru, VK, and Rambler. According to Netcraft, Nginx served or proxied 29.43% busiest sites in October 2017. Here are some of the success stories: Dropbox, Netflix, Wordpress.com, FastMail.FM.

Nginx [engine x]是最初由Igor Sysoev編寫的HTTP和反向代理服務(wù)器,郵件代理服務(wù)器和通用TCP/UDP代理服務(wù)器。很長時間以來,它一直在許多重負(fù)荷的俄羅斯網(wǎng)站上運行,包括Yandex,Mail.Ru,VK和Rambler。根據(jù)Netcraft,2017年10月,Nginx服務(wù)或代理了 29.43%最繁忙的站點。下面是一些成功案例: Dropbox, Netflix, Wordpress.com, FastMail.FM。

Nginx的主要特性:

  • Basic HTTP server features(基本的HTTP服務(wù)器功能)
  • Other HTTP server features(其他HTTP服務(wù)器功能)
  • Mail proxy server features(郵件代理服務(wù)器功能)
  • TCP/UDP proxy server features(TCP/UDP代理服務(wù)器功能)
  • Architecture and scalability(架構(gòu)和可擴(kuò)展性)

為什么要使用Nginx,跟以前用的tomcat有什么區(qū)別?


雖然大家都叫web server,但是Nginx和tomcat有本質(zhì)的不同。

Nginx常用來做靜態(tài)內(nèi)容服務(wù)器和代理服務(wù)器,用來放置靜態(tài)資源或者轉(zhuǎn)發(fā)請求給后面的應(yīng)用服務(wù);而tomcat常用來做應(yīng)用容器,讓java app在其中運行。

因此,嚴(yán)格來說,Nginx應(yīng)該叫<span style="color:red">HTTP Server</span>,而tomcat則是一個<span style="color:red">Application Server</span>

一個 HTTP Server關(guān)心的是HTTP協(xié)議層面的傳輸和訪問控制,所以在Nginx上你可以看到代理、負(fù)載均衡等功能??蛻舳送ㄟ^HTTP Server 訪問服務(wù)器上存儲的資源(HTML 文件、圖片文件等等)。通過CGI技術(shù),也可以將處理過的內(nèi)容通過HTTP Server分發(fā),但是一個HTTP Server始終只是把服務(wù)器上的文件如實的通過HTTP協(xié)議傳輸給客戶端。

而應(yīng)用服務(wù)器,則是一個應(yīng)用執(zhí)行的容器。它首先需要支持開發(fā)語言的 Runtime(對于 Tomcat 來說,就是 Java),保證應(yīng)用能夠在應(yīng)用服務(wù)器上正常運行。其次,需要支持應(yīng)用相關(guān)的規(guī)范,例如類庫、安全方面的特性。對于 Tomcat 來說,就是需要提供 JSP/Sevlet 運行需要的標(biāo)準(zhǔn)類庫、Interface 等。為了方便,應(yīng)用服務(wù)器往往也會集成 HTTP Server 的功能,但是不如專業(yè)的 HTTP Server 那么強(qiáng)大,所以應(yīng)用服務(wù)器往往是運行在 HTTP Server 的背后,執(zhí)行應(yīng)用,將動態(tài)的內(nèi)容轉(zhuǎn)化為靜態(tài)的內(nèi)容之后,通過 HTTP Server 分發(fā)到客戶端。

于我個人來說,選擇Nginx主要是因為其占用資源低的優(yōu)點,比起tomcat,選擇Nginx能給我釋放大量的系統(tǒng)內(nèi)存,供我其他IDE和chrome使用。

nginx.conf配置文件指南


Nginx的安裝,啟動,關(guān)閉等步驟的教程在這里我們就不做贅述了,我們來主要談一談nginx.conf文件應(yīng)該如何配置,這是nginx的靈魂所在。

Nginx配置文件結(jié)構(gòu)

nginx包含由配置文件中指定的指令控制的模塊。指令分為簡單指令塊指令。

一個簡單的指令由名稱參數(shù)組成,以空格分隔,并以分號(;)結(jié)束:

    root /data/www;

一個block指令和一個簡單的指令有相同的結(jié)構(gòu),但是不是以分號結(jié)尾,而是用一系列由大括號({和})包圍的附加指令來結(jié)束。如果一個block指令在大括號內(nèi)可以有其他的指令,它就被稱為一個context(上下文,例如:events,http,server和location):

    http {
        server {
            #location / {
                 proxy_pass   http://127.0.0.1:8090/;
                 proxy_redirect  http://127.0.0.1:8090/ /;
                 proxy_connect_timeout 600s;
                 proxy_read_timeout 600s;
                 proxy_send_timeout 600s;
            }
        }
    }

置于任何context之外的配置文件中的指令被認(rèn)為是在main context中。在eventshttp指令駐留在main content中,server是在http中,location則在server中。

后面的部分是注釋:

    # 這是一段注釋

Nginx作為靜態(tài)服務(wù)器使用

作為一個Web服務(wù)器,其最主要的任務(wù)是作為靜態(tài)服務(wù)器使用。

你需要將靜態(tài)網(wǎng)頁和文件放到一個目錄(例如/data/www),將圖片等文件放到另一個目錄(例如/data/images),然后在nginx.conf中進(jìn)行配置。這需要在http模塊下的server模塊內(nèi)新建兩個location模塊:

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

看起來很好理解吧~也可以直接把文件放到一塊,直接location配置絕對路徑:

    location / {
        root   F:\webapp\portal;
    }

Nginx在未配置監(jiān)聽端口的情況下默認(rèn)監(jiān)聽80端口,因此,你可以通過在本地訪問 http://localhost/ 或者 http://127.0.0.1/ 來訪問你的網(wǎng)站。

怎么樣?趕緊啟動一下Nginx吧,你的靜態(tài)網(wǎng)站已經(jīng)可以在本地運行了!修改配置后重啟Nginx的命令是:

    nginx -s reload

如果您的Nginx無法啟動或者出現(xiàn)其他錯誤,您可以嘗試在 /usr/local/nginx/logs 或者 /var/log/nginx 中的 access.log 以及 error.log 中查找原因

搭建簡單的代理服務(wù)器

Nginx經(jīng)常作為反向代理服務(wù)器來使用,這意味著Nginx服務(wù)器接收請求,將其傳遞給被代理服務(wù)器,從中檢索響應(yīng)并將其發(fā)送給客戶端。

反向代理(Reverse Proxy)方式是指以代理服務(wù)器來接受internet上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請求連接的客戶端,此時代理服務(wù)器對外就表現(xiàn)為一個服務(wù)器。通過在網(wǎng)絡(luò)各處放置反向代理節(jié)點服務(wù)器所構(gòu)成的在現(xiàn)有的互聯(lián)網(wǎng)基礎(chǔ)之上的一層智能虛擬網(wǎng)絡(luò),CDN系統(tǒng)能夠?qū)崟r地根據(jù)網(wǎng)絡(luò)流量和各節(jié)點的連接、負(fù)載狀況以及到用戶的距離和響應(yīng)時間等綜合信息將用戶的請求重新導(dǎo)向離用戶最近的服務(wù)節(jié)點上。

下面,我們將配置一個基本的代理服務(wù)器,它會處理本地圖片文件的請求并返回其他的請求給被代理的服務(wù)器。在這個例子中,兩個服務(wù)器將在一個Nginx實例上定義。

首先,在nginx的配置文件中增加一個server塊來定義代理服務(wù)器,其中包含以下內(nèi)容:

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

這將是一個簡單的服務(wù)器,它監(jiān)聽8080端口。(如果不定義listen值的話,默認(rèn)監(jiān)聽80端口)并將所有請求映射到本地文件系統(tǒng)上的目錄/data/up1。創(chuàng)建這個目錄并把index.html文件放進(jìn)去。請注意,該root指令放置在server context中。當(dāng)響應(yīng)請求的 location 區(qū)塊中,沒有自己的 root 指令,上述的 root 指令才會被使用。

接下來,使用上一節(jié)中的服務(wù)器配置并對其進(jìn)行修改,使其成為代理服務(wù)器配置。在第一個location塊中,設(shè)置proxy_pass 指令,并在參數(shù)中配置指定的代理服務(wù)器的協(xié)議、名稱和端口號(在我們的例子中是這樣 http://localhost:8080):

    server {
        location / {
            proxy_pass http://localhost:8080;
        }
        location /images/ {
            root /data;
        }
    }

我們將修改第二個location塊,它將當(dāng)前帶有/images/前綴的請求映射到/data/images目錄下,使其與具有典型文件擴(kuò)展名的圖像請求匹配。修改的location塊如下所示:

    location ~ \.(gif|jpg|png)$ {
        root /data/images;
    }

該參數(shù)是一個正則表達(dá)式,它會匹配所有以.gif、.jpg 或者.png結(jié)尾的URI。一個正則表達(dá)式需要以~開頭。匹配到的請求會被映射到/data/images目錄下。

當(dāng)Nginx通過location去響應(yīng)一個請求時,它會先檢測帶有前綴的location指令,獸先是檢測帶有最長前綴的 location,其次檢測正則表達(dá)式。如果被正則的匹配的規(guī)則匹配成功,Nginx會選擇使用該location的規(guī)則,否則,會選擇之前緩存的規(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ù)器。

要應(yīng)用新配置,請保存修改后的配置文件,并nginx -s reload一下。

更多Nginx代理配置指令,盡在ngx_http_proxy_module

參考文獻(xiàn)


Nginx官方網(wǎng)站
Nginx官方入門文檔

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

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,695評論 19 139
  • 上一篇《WEB請求處理一:瀏覽器請求發(fā)起處理》,我們講述了瀏覽器端請求發(fā)起過程,通過DNS域名解析服務(wù)器IP,并建...
    七寸知架構(gòu)閱讀 81,802評論 21 356
  • 配置運行Nginx服務(wù)器用戶(組) 用于配置運行Nginx服務(wù)器用戶(組)的指令是user,其語法格式為: use...
    吃瓜的東閱讀 4,689評論 0 41
  • 很多時候,你自以為自己的事情很重要,你貌似很小聲卻也很急切的處理,然而這件對于你來說及其嚴(yán)重的事情在別人眼中或許根...
    倉皇出逃x閱讀 363評論 0 0
  • 海棠花溪
    喵了個咪_ddbc閱讀 151評論 0 0

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