一文帶你深入Nginx,由基礎到進階,包你輕鬆入門Nginx

一、Nginx 基本認識

1、Nginx 是什麼?

  Nginx 是一款開源的、輕量級的、高性能的 HTTP 服務器 以及 反向代理服務器。
  特點是 佔有內存少、併發能力強。

2、Nginx 用來幹什麼?

  其可以作爲一個 HTTP 服務器 進行網站的訪問、發佈。
  也可以作爲一個 反向代理服務器 實現負載均衡。

二、正向代理、反向代理

1、什麼是代理?

  代理本質就相當於一個 中轉站,用於處理一個目標到另一個目標。
  即兩個目標之間並不存在真正的連接,而是通過某個通道 中轉。

如下圖所示:
  客戶端 想要訪問 真實服務器,需要先經過 代理服務器,通過代理服務器 去訪問 真實服務器。
  真實服務器響應請求,通過 代理服務器 將請求結果 返回給 客戶端。

2、正向代理?

(1)什麼是正向代理?
  正向代理實質指的是 客戶端代理,即代理客戶端,爲客戶端接收、發送請求,服務端不知道實際發起請求的是哪個客戶端。

如下圖所示:
  在客戶端設置正向代理服務器(IP 地址 + 端口號)。
  多個客戶端 可以連接同一個代理服務器,通過代理服務器 去 訪問真實的服務器。
  真實服務器 響應然後通過 代理服務器 將數據返回給 指定的 客戶端。

  真實服務器並不清楚 其響應的 是哪個 客戶端 發送的請求。

(2)正向代理使用場景:
  訪問國外網站(Google、YouTube 等),需要翻牆(代理服務器)纔可以訪問。
  可以做緩存,加速資源的訪問。

3、反向代理?

(1)什麼是反向代理?
  反向代理實質指的是 服務端代理,即代理服務端,爲服務端接收、發送請求,客戶端不知道實際處理請求的是哪個服務端。

如下圖所示:
  某個客戶端,通過代理服務器訪問 網絡上的資源。
  代理服務器響應,並找到某個 真實的服務器 處理並返回數據。
  代理服務器將 數據返回給 客戶端。

  客戶端並不清楚 其請求 被哪個 真實服務器 響應。

(2)反向代理使用場景:
  負載均衡,通過反向代理優化網站的負載。
  將代理服務器作爲公網訪問地址,真實服務器爲 內網資源,保證內網的安全。

4、正向代理、反向代理同時應用?

  某個業務場景下,正向代理、反向代理 可以同時應用。
  正向代理,用於代理客戶端 去訪問服務器(代理多個客戶端)。
  反向代理,用於代理服務端 去響應客戶端請求(代理多個服務端)。
如下圖所示:

  客戶端、服務端 通過 正向代理服務器、反向代理服務器 進行數據的交互。

三、負載均衡、動靜分離

1、負載均衡

(1)爲什麼出現負載均衡?
  一個小型的項目,一臺服務器可以處理(可以提升機器硬件的能力)。
  對於大型的項目,一臺服務器處理起來,效率會很低下,採用 多臺服務器 進行處理可以提高處理效率,但是請求如何到達服務器、各個服務器處理請求的數量 是需要解決的問題。
  可以採用 反向代理 去代理多個服務器(解決請求到達服務器問題),並 根據某種規則 指定 服務器處理請求,使各個服務器處理請求的數量儘量均勻,即負載均衡(解決服務器處理請求問題)。

如下圖所示:
  客戶端發送了 1000 個請求到 反向代理服務器。
  反向代理服務器通過某種負載均衡算法,將請求分發到不同的真實服務器上處理。
  比如真實服務器 A 處理了 320 個請求,B 處理了 350 個請求,C 處理了 330 個請求。

(2)負載量?均衡?什麼是負載均衡?
  Nginx 在負載均衡中的角色 就是 反向代理服務器。
  負載量 實質指的是 客戶端發送、被 反向代理服務器 接收到的請求數量。
  均衡 實質指的是 按照某種規則,反向代理服務器 將接受的請求 發送給不同的 真實服務器處理(使各個真實服務器處理的請求量儘量均勻)。

  所以負載均衡 實質指的是 反向代理服務器接收請求、並按照某種規則發送到 不同的真實服務器 處理的過程。

(3)負載均衡的方式?
  負載均衡可以分爲 硬件負載均衡、軟件負載均衡。
  硬件負載均衡 一般造價昂貴,但數據傳輸更加穩定。比如: F5 負載均衡。
  軟件負載均衡 一般採用 某種 負載均衡 算法實現(一種消息隊列分發機制)。

2、動靜分離

  爲了加快網站的解析速度,通常會將 動態頁面靜態頁面內容 放在不同的服務器上處理,從而降低單個服務器的壓力,加快解析速度。
  動靜分離實質就是將 動態資源 與 靜態資源分開,放在不同的服務器上處理。

如下圖:
  真實服務器分爲 動態資源處理服務器 與 靜態資源處理服務器,反向代理根據不同的業務需求,將處理髮送到不同的服務器上處理並返回內容。

 

五、Nginx 實現反向代理

1、實現效果?

  使用 nginx 作爲反向代理,根據訪問路徑的不同跳轉到不同端口的服務中進行處理。
其中:
  nginx 監聽 80 端口(可省略),
訪問:
  http://120.26.184.41/blog,跳轉到 https://www.cnblogs.com/l-y-h/。
  http://120.26.184.41/baidu,跳轉到 https://www.baidu.com/。

2、修改 nginx 配置文件

(1)配置文件簡單分析
  /etc/nginx/conf.d/default.conf 配置文件如下:

【配置文件中常用關鍵字解析:(server 塊)】
    listen           用於配置網絡監聽、監聽端口、IP地址等。
        比如: 
            listen port              監聽 port 端口的所有的連接。
            listen IP_address        監聽 IP_address 所有端口。
            listen IP_address:port   監聽 IP_address 的 port 端口。
    
    server_name      用於設置虛擬主機,可以爲 域名、IP地址。
    
    location        用於匹配 URL。
        比如:
            location = uri     表示嚴格匹配 uri,非正則表達式匹配。
            location ~ uri     正則表達式匹配,區分大小寫。
            location ~* uri    正則表達式匹配,不區分大小寫。
            
【location 塊中常用關鍵字解析:】
    proxy_pass       用於設置被代理服務器的地址
    index            用於設置網站默認首頁

【/etc/nginx/conf.d/default.conf 配置文件如下:】

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}

    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    #location ~ \.php$ {
    #    root           html;
    #    fastcgi_pass   127.0.0.1:9000;
    #    fastcgi_index  index.php;
    #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
    #    include        fastcgi_params;
    #}

    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

(2)修改 nginx.conf 配置文件,用於添加代理映射。

【添加映射關係:(server 塊)】
server {
    listen 80;
    server_name localhost;

    location /blog/ {
       proxy_pass https://www.cnblogs.com/l-y-h/;
    }

    location /baidu/ {
       proxy_pass https://www.baidu.com/;
    }
}

【完整 nginx.conf】
user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
    worker_connections  1024;
}


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

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    server {
        listen 80;
        server_name localhost;
    
        location /blog/ {
           proxy_pass https://www.cnblogs.com/l-y-h/;
        }
    
        location /baidu/ {
           proxy_pass https://www.baidu.com/;
        }
    }
    include /etc/nginx/conf.d/*.conf;
}

以上就是小編整理的Nginx基礎知識,知識個人的一些見解,有哪裏不準確的地方,還請各位大佬多多批評指正。

感覺小編碼字還可以的話,請多多點贊評論,關注小編,你們的支持就是小編最大的動力!!!!

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章