你不知道的Nginx服務器的一些知識

Nginx服務器是一款高性能的服務器,以前部署網站就使用了它進行反向代理,此次就好好總結Nginx相關的特性與使用。前端

01 前言

Nginx服務器是Web服務器,也就是咱們平時用來提供Web服務的。咱們以前可能聽過Apache、Tomcat、IIS等的服務器,其實Nginx和它們都是同樣的,均可以經過HTTP爲瀏覽器等客戶端提供各類服務。nginx

Nginx服務器是一個跨平臺的服務器,能夠運行在Window和Linux以及Mac OS等操做系統,它的特色就是能夠處理大規模的併發鏈接。接下來就具體介紹一下。web

02 正向代理與反向代理

  • 正向代理, 代理客戶端,服務端不知道實際發起請求的客戶端;
  • 反向代理, 代理服務端,客戶端不知道實際提供服務的服務端;

好比咱們訪問google.com的時候,是經過正向代理的方式,谷歌服務器是不知道是哪一個用戶對它進行訪問,這就是正向代理;可是假如谷歌服務器壓力大,承受不了這麼多人訪問,用戶的請求就會分發到不一樣的谷歌服務器,用戶不知道本身請求的具體是哪一臺服務器,這就是反向代理。瀏覽器

正向代理緩存

反向代理服務器

03 Nginx

Nginx特色網絡

  • 響應快
  • 擴展性強
  • 可靠性高
  • 內存消耗少
  • 支持高併發
  • 熱部署
  • 免費開源

Nginx的使用併發

咱們要爲了可以方便地使用Nginx,通常咱們都會將它安裝在Linux系統上面。因此咱們如今服務器上面安裝Nginx,只需一行代碼就搞定。默認狀況之下,nginx會安裝在 /etc/nginx目錄之下,其中nginx.conf是它的配置文件。app

yum install  nginx
複製代碼

咱們有必要了解一下nginx相關的命令,咱們常常會使用,好比啓動中止、查看狀態等。負載均衡

  • 啓動
systemctl start nginx
複製代碼
  • 中止
systemctl stop nginx
複製代碼
  • 重啓
systemctl restart nginx 
複製代碼
  • 狀態
systemctl status nginx
複製代碼
  • 版本
nginx -v
複製代碼
  • 測試
nginx -t
複製代碼

Nginx進程

Nginx服務器通常都是使用一個master主進程管理多個worker進程的,而worker進程通常與服務器CPU的核數相等。

master進程是不提供服務的,真正提供服務的是worker進程,worker進程之間經過進程間通訊機制實現通訊,如負載均衡等。假如worker某進程出錯,其他進程將不受影響繼續提供服務,master進程也會啓動一個新的進程。


nginx.conf

nginx的默認配置文件一共有如下幾塊,分別配置不一樣的信息。

user nginx;  #配置用戶或者組,默認爲nginx。
worker_processes 2;  #容許生成的進程數,默認爲1
pid /nginx/pid/nginx.pid;   #指定nginx進程運行文件存放地址
error_log log/error.log debug;  #制定日誌路徑,級別。級別可爲:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #設置網路鏈接序列化,防止驚羣現象發生,默認爲on
    multi_accept on;  #設置一個進程是否同時接受多個網絡鏈接,默認爲off
    use epoll;      #事件驅動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大鏈接數,默認爲512
}
http {
    include       mime.types;   #文件擴展名與文件類型映射表
    default_type  application/octet-stream; #默認文件類型,默認爲text/plain
    #access_log off; #取消服務日誌    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'#自定義格式
    access_log log/access.log myFormat;  #combined爲日誌格式的默認值
    sendfile on;   #容許sendfile方式傳輸文件,默認爲off,能夠在http塊,server塊,location塊。
    sendfile_max_chunk 100k;  #每一個進程每次調用傳輸數量不能大於設定的值,默認爲0,即不設上限。
    keepalive_timeout 65;  #鏈接超時時間,默認爲75s,能夠在http,server,location塊。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #熱備
    }
    error_page 404 https://www.baidu.com; #錯誤頁
    server {
        keepalive_requests 120; #單鏈接請求上限次數。
        listen       80;   #監聽端口
        server_name  127.0.0.1;   #監聽地址       
        location  ~*^.+$ {       #請求的url過濾,正則匹配,~爲區分大小寫,~*爲不區分大小寫。
           #root path;  #根目錄
           #index vv.txt;  #設置默認頁
           proxy_pass  http://mysvr;  #請求轉向mysvr 定義的服務器列表
           deny 127.0.0.1;  #拒絕的ip
           allow 172.18.5.54; #容許的ip           
        } 
    }
}
複製代碼
  • 全局塊:配置影響nginx全局的指令。通常有運行nginx服務器的用戶組,nginx進程pid存放路徑,日誌存放路徑,配置文件引入,容許生成worker process數等。
  • events塊:配置影響nginx服務器或與用戶的網絡鏈接。有每一個進程的最大鏈接數,選取哪一種事件驅動模型處理鏈接請求,是否容許同時接受多個網路鏈接,開啓多個網絡鏈接序列化等。
  • http塊:能夠嵌套多個server,配置代理,緩存,日誌定義等絕大多數功能和第三方模塊的配置。如文件引入,mime-type定義,日誌自定義,是否使用sendfile傳輸文件,鏈接超時時間,單鏈接請求數等。
  • server塊:配置虛擬主機的相關參數,一個http中能夠有多個server。
  • location塊:配置請求的路由,以及各類頁面的處理狀況。

反向代理

反向代理用於接收網絡上的請求,而後將請求轉發到目標服務器,而後目標服務器返回給代理服務器,最後返回給用戶。此方法延長了請求時間,可是下降了目標服務器的壓力。

反向代理的基本配置:

  • proxy_pass:將請求代理到當前的服務器,能夠是主機名/IP地址+端口形式
  • proxy_methods:表示轉發時的協議方法名,如get/post等
  • proxy_hide_header:指定目標服務器返回給代理服務器的響應中,代理決定哪些頭不轉發給客戶端,值爲響應頭
  • proxy_pass_header:與上面相反,表示哪些頭容許轉發給客戶端
  • proxy_pass_request_body:是否向目標服務器發送HTTP包實體部分,值爲on/off
  • proxy_pass_request_headers:是否向目標服務器發送HTTP頭,值爲on/off
  • proxy_redirect:如目標服務器返回301/302重定向,那麼就會重設location或者refresh字段
proxy_redirect http://localhost:8000/two/
      http://frontend;
複製代碼

若是請求http://localhost:8000/two/uri/在返回重定向的狀況下,實際上轉發給客戶端的就是http://frontend/uri,值爲off則將使location或者refresh字段維持不變

  • proxy_next_upstream:表示目標服務器轉發請求發生錯誤,換一臺目標服務器處理這個請求

負載均衡

實現負載均衡最關鍵的模塊就是upstream模塊,服務器就寫在裏面的server字段,對應着不一樣的服務器。

http {
    upstream test {
        server xx.xxx.xxx.xx   weight:5;
        server xx.xx.xx.xx   max_fails=3 fail_timeout=30s;
    }
    server {
        listen 8080;
        location / {
            proxy_pass http://test;
        }
    }
}

複製代碼

這裏的意思就是當你請求根路徑的時候就會代理到upstream裏面的兩個服務器,以此來實現負載均衡的功能。

server配置選項:

  • weight:向這臺服務器轉發的權重,默認是1
  • max_fails:與fail_timeout配合使用,若是在fail_timeout時間內的轉發次數超過max_fails的數量,表明該服務器不可用。max_fails默認是1,設爲0則不檢查次數
  • dowm:服務器下線,只會在ip_hash配置項時纔有用
  • backup:表示該服務器只是備份的,當其餘的服務器失效以後才轉發給它,有ip_hash配置項時無效

upstream配置選項:

  • ip_hash:解決同一用戶在不一樣的服務器中緩存相同的信息,與weight不可同時使用
http {
    upstream test {
        ip_hash;
        server xx1.xxx.xxx.xx;
        server xx2.xx.xx.xx;
        server xx3.xx.xx.xx;
    }
    server {
        listen 8080;
        location / {
            proxy_pass http://test;
        }
    }
}

複製代碼

04 小結

經過對Nginx服務器的一些理解,會讓咱們知道一些網絡上的知識,如正向代理與反向代理的區別、負載均衡的實現等。

你們也能夠嘗試着使用nginx服務器進行一些配置,上面只是一些簡單的配置模塊,若是想要詳情的理解去官網看一下。對於前端來講,懂基本的就能夠,不用像運維那樣精通全部的配置,固然學有餘力最好不過了,奈何本身學習能力有限,之後再詳解其中的一二。

相關文章
相關標籤/搜索