Nginx基礎(chǔ)知識(shí)從小白到入門(mén)

前言

Nginx現(xiàn)在幾乎是眾多大型網(wǎng)站的必用技術(shù),大家應(yīng)該都知道Nginx被F5收購(gòu)的大事件,章亦春也在專(zhuān)心維護(hù)OpenResty項(xiàng)目構(gòu)建和諧家園,無(wú)論你選擇Nginx還是OpenResty,都需要對(duì)Nginx有一個(gè)比較全面的了解,日后才能做到事半功倍。本文以開(kāi)發(fā)者必備的Nginx基礎(chǔ)知識(shí)為主,在參考文章中羅列了目前比較優(yōu)秀的Nginx和OpenResty參考教程,希望對(duì)大家有幫助。

Nginx基礎(chǔ)知識(shí)從小白到入門(mén)

更新歷史

2019年11月12日 - 初稿

閱讀原文 - https://wsgzao.github.io/post/nginx/

擴(kuò)展閱讀

nginx.org

NGINX Plus

OpenResty


Nginx基礎(chǔ)知識(shí)

Nginx是什么?

Nginx 是一個(gè) web 服務(wù)器,主要處理客戶(hù)端和服務(wù)器的請(qǐng)求分發(fā)。

特點(diǎn)和優(yōu)勢(shì)

  1. 高并發(fā)
  2. 熱部署
  3. 低功耗
  4. 熱部署

使用和擴(kuò)展

開(kāi)源免費(fèi)的Nginx與商業(yè)版Nginx Plus,與之對(duì)應(yīng)的是免費(fèi)OpenResty與商業(yè)版OpenResty

陶輝《深入理解 Nginx》作者在極客時(shí)間上的講義PDF已經(jīng)介紹的非常詳細(xì)了,如果覺(jué)得課程不錯(cuò)可以選擇購(gòu)買(mǎi)盡量少走彎路

極客時(shí)間:nginx核心知識(shí)100講配置文件與代碼分享

nginx正向代理與反向代理

為了便于理解,首先先來(lái)了解一下一些基礎(chǔ)知識(shí),nginx是一個(gè)高性能的反向代理服務(wù)器那么什么是反向代理呢?

代理是在服務(wù)器和客戶(hù)端之間假設(shè)的一層服務(wù)器,代理將接收客戶(hù)端的請(qǐng)求并將它轉(zhuǎn)發(fā)給服務(wù)器,然后將服務(wù)端的響應(yīng)轉(zhuǎn)發(fā)給客戶(hù)端。

不管是正向代理還是反向代理,實(shí)現(xiàn)的都是上面的功能。

如果你對(duì)OSI 七層模型與 TCP/IP 四層模型不是很熟悉可以再回顧下

image

正向代理

正向代理(forward)意思是一個(gè)位于客戶(hù)端和原始服務(wù)器 (origin server) 之間的服務(wù)器,為了從原始服務(wù)器取得內(nèi)容,客戶(hù)端向代理發(fā)送一個(gè)請(qǐng)求并指定目標(biāo) (原始服務(wù)器),然后代理向原始服務(wù)器轉(zhuǎn)交請(qǐng)求并將獲得的內(nèi)容返回給客戶(hù)端。

正向代理是為我們服務(wù)的,即為客戶(hù)端服務(wù)的,客戶(hù)端可以根據(jù)正向代理訪問(wèn)到它本身無(wú)法訪問(wèn)到的服務(wù)器資源。

正向代理對(duì)我們是透明的,對(duì)服務(wù)端是非透明的,即服務(wù)端并不知道自己收到的是來(lái)自代理的訪問(wèn)還是來(lái)自真實(shí)客戶(hù)端的訪問(wèn)。

反向代理

反向代理(Reverse Proxy)方式是指以代理服務(wù)器來(lái)接受 internet 上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給 internet 上請(qǐng)求連接的客戶(hù)端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)反向代理服務(wù)器。

反向代理是為服務(wù)端服務(wù)的,反向代理可以幫助服務(wù)器接收來(lái)自客戶(hù)端的請(qǐng)求,幫助服務(wù)器做請(qǐng)求轉(zhuǎn)發(fā),負(fù)載均衡等。

反向代理對(duì)服務(wù)端是透明的,對(duì)我們是非透明的,即我們并不知道自己訪問(wèn)的是代理服務(wù)器,而服務(wù)器知道反向代理在為他服務(wù)。

nginx基本配置

安裝nginx時(shí)通常需要編譯自己需要的模塊,可以使用 rpmbuild 制作 Nginx 的 RPM 包

main                                # 全局配置

events {                            # nginx工作模式配置
}

http {                                # http設(shè)置
    ....

    server {                        # 服務(wù)器主機(jī)配置
        ....
        location {                    # 路由配置
            ....
        }

        location path {
            ....
        }

        location otherpath {
            ....
        }
    }

    server {
        ....

        location {
            ....
        }
    }

    upstream name {                    # 負(fù)載均衡配置
        ....
    }
}

如果想要生成nginx規(guī)范配置,可以參考nginxconfig.io

下面是 nginx 一些配置中常用的內(nèi)置全局變量,你可以在配置的任何位置使用它們。

變量名 功能
$host 請(qǐng)求信息中的 Host,如果請(qǐng)求中沒(méi)有 Host 行,則等于設(shè)置的服務(wù)器名
$request_method 客戶(hù)端請(qǐng)求類(lèi)型,如 GETPOST
$remote_addr 客戶(hù)端的 IP 地址
$args 請(qǐng)求中的參數(shù)
$content_length 請(qǐng)求頭中的 Content-length 字段
$http_user_agent 客戶(hù)端 agent 信息
$http_cookie 客戶(hù)端 cookie 信息
$remote_addr 客戶(hù)端的 IP 地址
$remote_port 客戶(hù)端的端口
$server_protocol 請(qǐng)求使用的協(xié)議,如 HTTP/1.0、HTTP/1.1\
$server_addr 服務(wù)器地址
$server_name 服務(wù)器名稱(chēng)
$server_port 服務(wù)器的端口號(hào)

nginx負(fù)載均衡

Upstream 指定后端服務(wù)器地址列表,在 server 中攔截響應(yīng)請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)到 Upstream 中配置的服務(wù)器列表。

upstream balanceServer {
    server 10.1.22.33:12345;
    server 10.1.22.34:12345;
    server 10.1.22.35:12345;
}

server {
    server_name  fe.server.com;
    listen 80;
    location /api {
        proxy_pass http://balanceServer;
    }
}

上面的配置只是指定了 nginx 需要轉(zhuǎn)發(fā)的服務(wù)端列表,并沒(méi)有指定分配策略。

默認(rèn)情況下采用的是輪詢(xún)策略,將所有客戶(hù)端請(qǐng)求輪詢(xún)分配給服務(wù)端。這種策略是可以正常工作的,但是如果其中某一臺(tái)服務(wù)器壓力太大,出現(xiàn)延遲,會(huì)影響所有分配在這臺(tái)服務(wù)器下的用戶(hù)。

nginx常用命令

# 快速關(guān)閉Nginx,可能不保存相關(guān)信息,并迅速終止web服務(wù)
nginx -s stop
# 平穩(wěn)關(guān)閉Nginx,保存相關(guān)信息,有安排的結(jié)束web服務(wù)
nginx -s quit
# 因改變了Nginx相關(guān)配置,需要重新加載配置而重載
nginx -s reload
# 重新打開(kāi)日志文件
nginx -s reopen
# 為 Nginx 指定一個(gè)配置文件,來(lái)代替缺省的
nginx -c filename
# 不運(yùn)行,而僅僅測(cè)試配置文件。nginx 將檢查配置文件的語(yǔ)法的正確性,并嘗試打開(kāi)配置文件中所引用到的文件
nginx -t
#  顯示 nginx 的版本
nginx -v
# 顯示 nginx 的版本,編譯器版本和配置參數(shù)
nginx -V
# 格式換顯示 nginx 配置參數(shù)
2>&1 nginx -V | xargs -n1
2>&1 nginx -V | xargs -n1 | grep lua

參考文章

以上內(nèi)容只是nginx的冰山一角,我個(gè)人推薦大家跟著官方文檔或者類(lèi)似極客時(shí)間的教程學(xué)習(xí),可以少走很多彎路

nginx documentation

前端開(kāi)發(fā)者必備的nginx知識(shí)

百萬(wàn)并發(fā)下Nginx的優(yōu)化之道

agentzh的Nginx教程

OpenResty最佳實(shí)踐

以下為極客時(shí)間專(zhuān)欄

Nginx核心知識(shí)100講

極客時(shí)間:nginx核心知識(shí)100講配置文件與代碼分享

OpenResty從入門(mén)到實(shí)戰(zhàn)

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

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

  • 1.簡(jiǎn)介: ? Nginx:engine X ,2002年,開(kāi)源,商業(yè)版? http協(xié)議:web服務(wù)器(類(lèi)似于ht...
    尛尛大尹閱讀 2,021評(píng)論 0 3
  • nginx概述 nginx是一款自由的、開(kāi)源的、高性能的HTTP服務(wù)器和反向代理服務(wù)器;同時(shí)也是一個(gè)IMAP、PO...
    逝者如斯灬閱讀 3,563評(píng)論 0 16
  • 參考:https://www.cnblogs.com/zhouxinfei/p/7862285.html 侵刪 n...
    會(huì)飛的魚(yú)_500閱讀 1,303評(píng)論 0 1
  • 一四年的時(shí)候倒是參加培訓(xùn)。 老師發(fā)現(xiàn)的一個(gè)要當(dāng)時(shí)他就想收五十萬(wàn)一百萬(wàn)的去做這個(gè)生意其實(shí)當(dāng)時(shí)我是非常不理解的,我覺(jué)得...
    9f9d07e5c127閱讀 312評(píng)論 0 0
  • 《瑜伽師地論》卷第二十七本地分中聲聞地第十三第二瑜伽處之二巳三、緣性緣起所緣(分三科)午一、徵【云何緣性緣起所緣?...
    德虔閱讀 1,068評(píng)論 0 0

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