Nginx入門

什么是nginx?

nginx 是高性能的 HTTP 和反向代理的服務(wù)器,處理高并發(fā)能力是十分強大的,能經(jīng)受高負 載的考驗,有報告表明能支持高達 50,000 個并發(fā)連接數(shù)。

我們使用nginx的主要目的:

  • 反向代理
    其實客戶端對代理是無感知的,因為客戶端不需要任何配置就可以訪問,我們只需要將請求發(fā)送到反向代理服務(wù)器,由反向代理服務(wù)器去選擇目標服務(wù)器獲取數(shù)據(jù)后,在返回給客戶端,此時反向代理服務(wù)器和目標服務(wù)器對外就是一個服務(wù)器,暴露的是代理服務(wù)器地址,隱藏了真實服務(wù)器 IP 地址。
  • 負載均衡
    我們增加服務(wù)器的數(shù)量,然后將請求分發(fā)到各個服務(wù)器上,將原先請求集中到單個服務(wù)器上的情況改為將請求分發(fā)到多個服務(wù)器上,將負載分發(fā)到不同的服務(wù)器,也就是我們 所說的負載均衡
  • 動靜分離


  • 其他功能
    白名單,訪問頻率

安裝nginx

wget http://nginx.org/download/nginx-1.12.2.tar.gz
tar -xvf nginx-1.12.2.tar.gz
cd nginx-1.12.2
./configure
make && make install  # 編譯并安裝

安裝完成會后,nginx被安裝到/usr/local/nginx目錄,在nginx有sbin啟動腳本。啟動nginx,我們可以在local:80看到Welcome to nginx!

常用命令

./nginx -s stop  # 關(guān)閉nginx
./nginx  # 啟動nginx
./nginx -s reload  # 重加載(修改配置的情況下可以不stop)

配置文件

當(dāng)我們啟動nginx的時候,nginx會默認加載/usr/local/nginx/conf/nginx.conf的配置文件。我們也可以指定加載自定義的配置文件。

# nginx.conf
worker_processes  1;

events {
    worker_connections  1024;
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen       80;
        server_name  localhost;

        location / {
            root   html;  # 入口文件的所在目錄
            index  index.html index.htm;  # 默認入口文件名稱
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

可見配置文件是包含三部分:

第一部分:全局塊
從配置文件開始到 events 塊之間的內(nèi)容,主要會設(shè)置一些影響 nginx 服務(wù)器整體運行的配置指令,主要包括配 置運行 Nginx 服務(wù)器的用戶(組)、允許生成的 worker process 數(shù),進程 PID 存放路徑、日志存放路徑和類型以 及配置文件的引入等。

第二部分:events 塊
events 塊涉及的指令主要影響 Nginx 服務(wù)器與用戶的網(wǎng)絡(luò)連接,常用的設(shè)置包括是否開啟對多 work process 下的網(wǎng)絡(luò)連接進行序列化,是否允許同時接收多個網(wǎng)絡(luò)連接,選取哪種事件驅(qū)動模型來處理連接請求,每個 word process 可以同時支持的最大連接數(shù)等。
上述例子就表示每個 work process 支持的最大連接數(shù)為 1024.

第三部分:http 塊
這算是 Nginx 服務(wù)器配置中最頻繁的部分,代理、緩存和日志定義等絕大多數(shù)功能和第三方模塊的配置都在這里。 需要注意的是:http 塊也可以包括 http 全局塊、server 塊。

  • http 全局塊
    http 全局塊配置的指令包括文件引入、MIME-TYPE 定義、日志自定義、連接超時時間、單鏈接請求數(shù)上限等。
  • server 塊
    這塊和虛擬主機有密切關(guān)系,虛擬主機從用戶角度看,和一臺獨立的硬件主機是完全一樣的,該技術(shù)的產(chǎn)生是為了 節(jié)省互聯(lián)網(wǎng)服務(wù)器硬件成本。每個 http 塊可以包括多個 server 塊,而每個 server 塊就相當(dāng)于一個虛擬主機。 而每個 server 塊也分為全局 server 塊,以及可以同時包含多個 locaton 塊。
    全局 server 塊:最常見的配置是本虛擬機主機的監(jiān)聽配置和本虛擬主機的名稱或 IP 配置。
    location 塊:一個 server 塊可以配置多個 location 塊。這塊的主要作用是基于 Nginx 服務(wù)器接收到的請求字符串(例如 server_name/uri-string),對虛擬主機名稱 (也可以是 IP 別名)之外的字符串(例如 前面的 /uri-string)進行匹配,對特定的請求進行處理。地址定向、數(shù)據(jù)緩 存和應(yīng)答控制等功能,還有許多第三方模塊的配置也在這里進行。

反向代理實例一

當(dāng)我們訪問127.0.0.1的時候,訪問到的是http://www.baidu.com
只需如下配置

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass  http://www.baidu.com;
            index  index.html index.htm;
        }
}

注意:/代表訪問127.0.0.1:80下的任何資源(如127.0.0.1:80/xxx)都會訪問到 http://www.baidu.com

反向代理實例二

根據(jù)訪問的路徑跳轉(zhuǎn)到不同端口的服務(wù)中
訪問 http://127.0.0.1:9001/v1/ 直接跳轉(zhuǎn)到 http://127.0.0.1:4001/
訪問 http://127.0.0.1:9001/v2/ 直接跳轉(zhuǎn)到 http://127.0.0.1:4002/

新增server塊

    server {
        listen       9001;
        server_name  localhost;

        location ~ /v1/ {
            proxy_pass http://127.0.0.1:4001;
        }

        location ~ /v2/ {
            proxy_pass http://127.0.0.1:4002;
        }
  
    }

注意:當(dāng)我們在瀏覽器上輸入127.0.0.1:9001/v1/的時候,事實上nginx幫我們訪問的是127.0.0.1:4001/v1/,并不是 http://127.0.0.1:4001

在location指令和uri請求中間可以添加可選的修飾符,四種修飾符的含義分別如下

= 表示精確匹配。只有請求的url路徑與后面的字符串完全相等時,才會命中。

~ 表示該規(guī)則是使用正則定義的,區(qū)分大小寫。

~* 表示該規(guī)則是使用正則定義的,不區(qū)分大小寫。

^~ 表示如果該符號后面的字符是最佳匹配,采用該規(guī)則,不再進行后續(xù)的查找。

負載均衡實例

當(dāng)我們請求127.0.0.1的時候,請求會均衡到127.0.0.1:4005和127.0.0.1:4006上去。

    upstream myserver{
        server 127.0.0.1:4005;
        server 127.0.0.1:4006;
    }

    server {
        listen       80;
        server_name  localhost;

        location / {
            proxy_pass http://myserver;
        }
    }

而且 Nginx 提供了幾種分配方式(策略):

1、輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器 down 掉,能自動剔除。

2、weight
weight 代表權(quán),重默認為 1,權(quán)重越高被分配的客戶端越多

upstream myserver{
server 192.168.5.21:80 weight =1; 
server 192.168.5.22:80 weight =1; 
}

3、ip_hash
每個請求按訪問 ip 的 hash 結(jié)果分配,這樣每個訪客固定訪問一個后端服務(wù)器,可以解決 session 的問題

upstream myserver{
ip_hash;
server 192.168.5.21:80; 
server 192.168.5.22:80; 
}

4、fair
按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。

upstream myserver{
server 192.168.5.21:80; 
server 192.168.5.22:80; 
fair
}

動靜分離實例

https://klionsec.github.io/2017/12/21/nginx-static-dynamic/

nginx的config詳解

Nginx 基本配置詳解
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ù)。

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