Nginx 快速入門 系列(一)

應用場景


  1. 靜態資源服務: 經過本地文件系統提供服務
  2. 反向代理服務: Nginx 緩存,反向代理
  3. API 服務: openResty

五個優勢


  1. 高併發,高性能
  2. 擴展性好,有 openResty 等豐富的生態圈
  3. 高可用性
  4. 熱部署,能夠在不中止 Nginx 服務的狀況下,進行升級
  5. BSD 許可證

四個組成部分


  1. 二進制可執行文件,由各個模塊源碼編譯出的一個文件
  2. Nginx.conf 配置文件,控制 Nginx 的行爲
  3. access.log 訪問日誌,記錄每一條 http 訪問信息
  4. error.log 錯誤日誌,對問題進行定位

版本選擇


開源版:Nginx.org 商業版: Nginx.com
若是是開發 API 服務或者是 Web 防火牆,能夠選擇 openResty .html

下載和目錄介紹


# 下載 Nginx
wget http://nginx.org/download/nginx-1.16.1.tar.gz   
# 進行解壓
tar -xzf nginx-1.16.1.tar.gz
# 查看編譯相關的命令
./configure --help

# 進行編譯,PATH 是你本地指定的安裝目錄
./configure --prefix=PATH

# 執行首次安裝命令
make install

複製代碼

Nginx 指令塊


  1. http
  2. server
  3. upstream
  4. location

Nginx 命令行


  1. 命令格式:nginx -s reload
  2. 幫助命令: -h
  3. 使用指定的配置文件:-c
  4. 指定配置指令:-g
  5. 指定運行目錄:-p
  6. 發送信號:-s 指運行期間執行相關命令;重啓nginx: nginx - s reload; 進行日誌切割: nginx -s reopen
  7. 測試配置文件,是否有語法錯誤:-t -T
  8. 打印 Nginx 的版本信息,編譯信息等: -v -V

配置靜態文件


# 開啓 gizp 壓縮
gizp on;

location {
    root   /root/data/web/dist;
    index  index.html index.htm;
}
複製代碼

反向代理


反向代理(Reverse Proxy)方式是指以代理服務器來接受Internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器;並將從服務器上獲得的結果返回給Internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個服務器。 一般的代理服務器,只用於代理內部網絡對Internet的鏈接請求,客戶機必須指定代理服務器,並將原本要直接發送到Web服務器上的http請求發送到代理服務器中。當一個代理服務器可以代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱爲反向代理服務。 一臺機器做爲代理機器,能夠根據負載均衡算法,將請求轉發給下游服務器。nginx

反向代理服務器一般有兩種模型:web

  • 做內容服務器的替身:

在防火牆外部設置一個代理服務器做爲內容服務器的替身。當外部客戶機嘗試訪問服務時,會訪問到代理服務器,再由其代理到防火牆內部的內容服務器上。這樣實際內容位於內容服務器上,在防火牆內部受到安全保護。代理服務器位於防火牆外部,在客戶機看來就像是內容服務器。算法

  • 做爲內容服務器的負載均衡器

能夠利用代理服務器的高速緩存特性,建立一個用於負載均衡的服務器池,使用多個代理服務器來平衡各 Web 服務器間的網絡負載,這樣當 Web 服務器接收大量的請求時,可使用代理服務器分擔 Web 服務器的負載,以此提升網絡訪問效率。後端

location {
    root   /root/data/web/dist;
    index  index.html index.htm;
    # 配置代理轉發
    proxy_pass: 
}
複製代碼

nginx中有兩個模塊有 proxy_pass 指令:ngx_http_proxy_module 的 proxy_pass; ngx_stream_proxy_module 的 proxy_pass緩存

ngx_stream_proxy_module 模塊的 proxy_pass 指令只能在 server 段使用使用, 只須要提供域名或ip地址和端口。能夠理解爲端口轉發,能夠是 tcp 端口,也能夠是 udp 端口。 ngx_http_proxy_module 模塊的 proxy_pass 指令須要在 location 段,location中的 if 段,limit_except 段中使用,除了須要提供域名或ip地址和端口外,還須要提供協議,如"http"或"https",還有一個可選的 uri 能夠配置。安全

  • ngx_stream_proxy_module 模塊的 proxy_pass

server {
    listen 127.0.0.1:12345;
    proxy_pass 127.0.0.1:8080;
}
 
server {
    listen 12345;
    proxy_connect_timeout 1s;
    proxy_timeout 1m;
    proxy_pass example.com:12345;
}
 
server {
    listen 53 udp;
    proxy_responses 1;
    proxy_timeout 20s;
    proxy_pass dns.example.com:53;
}
 
server {
    listen [::1]:12345;
    proxy_pass unix:/tmp/stream.socket;
}
複製代碼
  • ngx_http_proxy_module 模塊 的 proxy_pass

server {
    listen      80;
    server_name www.test.com;
 
    # 正常代理,不修改後端url的
    location /some/path/ {
        proxy_pass http://127.0.0.1;
    }
 
    # 修改後端url地址的代理(本例後端地址中,最後帶了一個斜線)
    location /testb {
        proxy_pass http://www.other.com:8801/;
    }
 
    # 使用 if in location
    location /google {
        if ( $geoip_country_code ~ (RU|CN) ) {
            proxy_pass http://www.google.hk;
        }
    }
 
    location /yongfu/ {
        # 沒有匹配 limit_except 的,代理到 unix:/tmp/backend.socket:/uri/
        proxy_pass http://unix:/tmp/backend.socket:/uri/;;
 
        # 匹配到請求方法爲: PUT or DELETE, 代理到9080
        limit_except PUT DELETE {
            proxy_pass http://127.0.0.1:9080;
        }
    }
 
}
複製代碼

由於反向代理之後,內容服務器接收到的請求參數來自於反向代理服務器,經過 proxy_set_header 字段進行設置,能夠拿到客戶端的請求參數.bash

location / {
    proxy_set_header Host $host;
    proxy_ser_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
複製代碼

配置緩存服務器


咱們能夠將一些信息緩存到內存中服務器

http {
    # 
    proxy_cache_path path;
    location / {
        # cache_name 就是內存的存儲位置
        proxy_cache cache_naem;
    }
}

複製代碼
  • path 參數
# http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_cache_path
緩存文件的路徑 + 
[levels=levels]   設置緩存文件目錄層次;levels=1:2 表示兩級目錄
[use_temp_path=on|off]   臨時文件的目錄
keys_zone=name:size  設置緩存名字和共享內存大小
[inactive=time]   在指定時間內沒人訪問則被刪除
[max_size=size]   在指定時間內沒人訪問則被刪除
[manager_files=number] 
[manager_sleep=time] 
[manager_threshold=time] 
[loader_files=number] 
[loader_sleep=time] 
[loader_threshold=time] 
[purger=on|off]
[purger_files=number] 
[purger_sleep=time] 
[purger_threshold=time];
複製代碼
相關文章
相關標籤/搜索