一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Nginx常用的配置和基本功能講解

OSC開源社區(qū) ? 來源:OSCHINA 社區(qū) ? 2023-05-04 10:25 ? 次閱讀

1 核心配置

找到 Nginx 安裝目錄下的 conf 目錄下 nginx.conf 文件,Nginx 的基本功能配置是由它提供的。 Nginx 的配置文件 (conf/nginx.conf) 整體上分為如下幾個部分::

全局塊 配置和 Nginx 運(yùn)行相關(guān)的全局配置
events 塊 配置和網(wǎng)絡(luò)鏈接相關(guān)的配置
http 塊 配置代理、緩存、日志記錄、虛擬主機(jī)等配置
server 塊 配置虛擬主機(jī)的相關(guān)參數(shù),一個 http 快中可以有多個 server 塊
location 塊 配置請求的路由,以及各種頁面的處理情況
區(qū)域 職責(zé)

1.2 配置文件示例

一個比較全的配置文件示例如下。

# 以下是全局段配置
#user administrator administrators;  #配置用戶或者組,默認(rèn)為nobody nobody。
#worker_processes 2;  #設(shè)置進(jìn)程數(shù),默認(rèn)為1
#pid /nginx/pid/nginx.pid; #指定nginx進(jìn)程運(yùn)行文件存放地址
error_log log/error.log debug;  #制定日志路徑,級別:debug|info|notice|warn|error|crit|alert|emerg
# events段配置信息
events {
    accept_mutex on;   #設(shè)置網(wǎng)路連接序列化,防止驚群現(xiàn)象發(fā)生,默認(rèn)為on
    multi_accept on;  #設(shè)置一個進(jìn)程是否同時接受多個網(wǎng)絡(luò)連接,默認(rèn)為off
    #use epoll;      #事件驅(qū)動模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大連接數(shù),默認(rèn)為512
}
# http、配置請求信息
http {
    include       mime.types;   #文件擴(kuò)展名與文件類型映射表
    default_type  application/octet-stream; #默認(rèn)文件類型,默認(rèn)為text/plain
    #access_log off; #取消服務(wù)日志    
    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為日志格式的默認(rèn)值
    sendfile on;   #允許sendfile方式傳輸文件,默認(rèn)為off,可以在http塊,server塊,location塊。
    sendfile_max_chunk 100k;  #每個進(jìn)程每次調(diào)用傳輸數(shù)量不能大于設(shè)定的值,默認(rèn)為0,即不設(shè)上限。
    keepalive_timeout 65;  #連接超時時間,默認(rèn)為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區(qū)塊開始,表示一個獨立的虛擬主機(jī)站點
    server {
        keepalive_requests 120; #單連接請求上限次數(shù)。
        listen       4545;   #監(jiān)聽端口
        server_name  127.0.0.1;   #監(jiān)聽地址       
        location  ~*^.+$ {       #請求的url過濾,正則匹配,~為區(qū)分大小寫,~*為不區(qū)分大小寫。
           #root path;  #根目錄
           #index vv.txt;  #設(shè)置默認(rèn)頁
           proxy_pass  http://mysvr;  #請求轉(zhuǎn)向mysvr 定義的服務(wù)器列表
           deny 127.0.0.1;  #拒絕的ip
           allow 172.18.5.54; #允許的ip           
        } 
    }
}

1.3 locat 路徑映射講解

1.3.1 格式:

location [ = | ~ | ~* | !~ | !~* | @ ] uri {...}

1.3.2 解釋:

= 表示精確匹配,如果找到,立即停止搜索并立即處理此請求。 ~ 表示執(zhí)行一個正則匹配,區(qū)分大小寫匹配 ~* 表示執(zhí)行一個正則匹配,不區(qū)分大小寫匹配 !~ 區(qū)分大小寫不匹配 !~* 不區(qū)分大小寫不匹配 ^~ 即表示只匹配普通字符(空格)。使用前綴匹配,^ 表示 “非”,即不查詢正則表達(dá)式。如果匹配成功,則不再匹配其他 location。 @ 指定一個命名的 location,一般只用于內(nèi)部重定向請求。例如 error_page, try_files uri 是待匹配的請求字符串,可以不包含正則表達(dá)式,也可以包含正則表達(dá)式;

1.3.3 優(yōu)先級和示例:

[不加] < [~/~*] < [^~] < [=]

示例如下:

location = / {
    # 精確匹配/,主機(jī)名后面不能帶任何字符串 /
    # 只匹配http://abc.com
    # http://abc.com [匹配成功]
    # http://abc.com/index [匹配失敗]
}
location ^~ /img/ {
      #以 /img/ 開頭的請求,都會匹配上
    #http://abc.com/img/a.jpg   [成功]
    #http://abc.com/img/b.mp4  [成功]
    }
location ~* /Example/ {
  # 則會忽略 uri 部分的大小寫
  #http://abc.com/test/Example/ [匹配成功]
  #http://abc.com/example/ [匹配成功]
}
location /documents {
    # 如果有正則表達(dá)式可以匹配,則優(yōu)先匹配正則表達(dá)式。
    #http://abc.com/documentsabc [匹配成功]
}
location / {
    #http://abc.com/abc [匹配成功]
}

2 反向代理

2.1 反向代理概念:

反向代理 (Reverse Proxy) 是指以代理服務(wù)器來接受 internet 上的連接請求,然后將請求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給 internet 上請求連接的客戶端。真實的服務(wù)器不能直接被外部網(wǎng)絡(luò)訪問,所以需要一臺代理服務(wù)器,而代理服務(wù)器能被外部網(wǎng)絡(luò)訪問的同時又跟真實服務(wù)器在同一個網(wǎng)絡(luò)環(huán)境,當(dāng)然也可能是同一臺服務(wù)器,端口不同而已。 反向代理通過 proxy_pass 指令來實現(xiàn)。

2.2 反向代理示例:

server {
    listen       80;
    server_name  localhost;


    location / {
         proxy_pass http://localhost:8081;
         proxy_set_header Host $host:$server_port;#為請求頭添加Host字段,用于指定請求服務(wù)器的域名/IP地址和端口號。


         # 設(shè)置用戶ip地址
         proxy_set_header X-Forwarded-For $remote_addr;#為請求頭添加XFF字段,值為客戶端的IP地址。
         # 當(dāng)請求服務(wù)器出錯去尋找其他服務(wù)器
         proxy_next_upstream error timeout invalid_header http_500 http_502 http_503;
    

當(dāng)我們訪問 localhost 的時候,ngnix 就將我們的請求轉(zhuǎn)到 localhost:8081 了

3 負(fù)載均衡

3.1 負(fù)載均衡概念:

當(dāng)有 2 臺或以上服務(wù)器時,代理服務(wù)器根據(jù)規(guī)則將請求分發(fā)到指定的服務(wù)器上處理。

3.2 負(fù)載均衡策略及示例:

Nginx 目前支持多種負(fù)載均衡策略,這里講解常用的 6 種。

3.2.1RR (round robin : 輪詢 默認(rèn)):

每個請求按時間順序逐一分配到不同的后端服務(wù)器,也就是說第一次請求分配到第一臺服務(wù)器上,第二次請求分配到第二臺服務(wù)器上,如果只有兩臺服務(wù)器,第三次請求繼續(xù)分配到第一臺上,這樣循環(huán)輪詢下去,也就是服務(wù)器接收請求的比例是 1:1, 如果后端服務(wù)器 down 掉,能自動剔除。輪詢是默認(rèn)配置,不需要太多的配置

同一個項目分別使用 8081 和 8082 端口啟動項目

upstream web_servers {
   server localhost:8081;
   server localhost:8082;
}




server {
    listen       80;
    server_name  localhost;
    #access_log  logs/host.access.log  main;
    location / {
        proxy_pass http://web_servers;
        proxy_set_header Host $host:$server_port;
    }
 

3.2.2 熱備:

假設(shè)有 2 臺服務(wù)器,當(dāng)一臺服務(wù)器發(fā)生事故時,才啟用第二臺服務(wù)器給提供服務(wù)。服務(wù)器處理請求的順序:AAAAAA 突然 A 掛了,服務(wù)器處理請求的順序:BBBBBBBBBBBBBB.....

upstream web_servers {
      server 127.0.0.1:7878; 
      server 192.168.10.121:3333 backup;  #熱備     
    }

3.2.3 權(quán)重

跟據(jù)配置的權(quán)重的大小而分發(fā)給不同服務(wù)器不同數(shù)量的請求。如果不設(shè)置,則默認(rèn)為 1。下面服務(wù)器的請求順序為:ABBABBABBABBABB....。

upstream web_servers {
    server localhost:8081 weight=1;
    server localhost:8082 weight=2;
}

3.2.4 ip_hash

這樣每個 ip 地址固定訪問一個后端服務(wù)器,可以解決 session 的問題。

upstream test {
    ip_hash;
    server localhost:8080;
    server localhost:8081;
}

3.2.5 fair (第三方)

按后端服務(wù)器的響應(yīng)時間來分配請求,響應(yīng)時間短的優(yōu)先分配。這個配置是為了更快的給用戶響應(yīng)。

upstream backend {
    fair;
    server localhost:8080;
    server localhost:8081;
}

3.2.6 url_hash (第三方)

按訪問 url 的 hash 結(jié)果來分配請求,使每個 url 定向到同一個后端服務(wù)器,后端服務(wù)器為緩存時比較有效。在 upstream 中加入 hash 語句,hash_method 是使用的 hash 算法

upstream backend {
    hash_method crc32;
    hash $request_uri;
    server localhost:8080;
    server localhost:8081;
}

以上 6 種負(fù)載均衡各自適用不同情況下單獨或者混合使用,可以根據(jù)實際情況選擇使用,fair 和 url_hash 需要安裝第三方模塊才能使用。

4 動靜分離

4.1 動靜分離概念:

動靜分離是指在 web 服務(wù)器架構(gòu)中,將靜態(tài)頁面與動態(tài)頁面或者靜態(tài)內(nèi)容接口和動態(tài)內(nèi)容接口分開不同系統(tǒng)訪問的架構(gòu)設(shè)計方法,進(jìn)而提升整個服務(wù)訪問性能和可維護(hù)性。

4.2 動靜分離示例:

upstream web_servers {
       server localhost:8081;
       server localhost:8082;
}
server {
    listen       80;
    server_name  localhost;
    set $doc_root /usr/local/var/www;


    location ~* .(gif|jpg|jpeg|png|bmp|ico|swf|css|js)$ {
       root $doc_root/img;
    }
    location / {
        proxy_pass http://web_servers;
        proxy_set_header Host $host:$server_port;
    }
    error_page 500 502 503 504  /50x.html;  #出現(xiàn) 500 502 503 504錯誤時走內(nèi)部跳轉(zhuǎn)
    location = /50x.html { 
        root $doc_root;
    }
 }

結(jié)果:訪問 http://localhost/test.jpg 時直接返回 /usr/local/var/www/img 路徑下的圖片. 訪問 http://localhost/index.html 就會訪問后端服務(wù)器 (tomcat 等)

5 其他常用的指令:

5.1.return 指令

返回 http 狀態(tài)碼和可選的第二個參數(shù)可以是重定向的 URL

return code [text];
return code URL;
return URL;
例如:
location / {
 return 404; # 直接返回狀態(tài)碼
}
location / {
 return 404 "pages not found"; # 返回狀態(tài)碼 + 一段文本
}
location / {
 return 302 /bbs ; # 返回狀態(tài)碼 + 重定向地址
}
location / {
 return https://www.baidu.com ; # 返回重定向地址
}

5.2 rewrite 指令

重寫 URI 請求 rewrite,通過使用 rewrite 指令在請求處理期間多次修改請求 URI,該指令具有一個可選參數(shù)和兩個必需參數(shù)。 第一個 (必需) 參數(shù)是請求 URI 必須匹配的正則表達(dá)式。 第二個參數(shù)是用于替換匹配 URI 的 URI。 可選的第三個參數(shù)重寫策略

last 重寫后的 URL 發(fā)起新請求,再次進(jìn)入 server 段,重試 location 的中的匹配;

break 直接使用重寫后的 URL ,不再匹配其它 location 中語句;

redirect 返回 302 臨時重定向;

permanent 返回 301 永久重定向;

location /users/ {
    rewrite ^/users/(.*)$ /show?user=$1 break;
}

5.3 error_page 指令

使用 error_page 指令,您可以配置 NGINX 返回自定義頁面以及錯誤代碼,替換響應(yīng)中的其他錯誤代碼,或?qū)g覽器重定向到其他 URI。在以下示例中,error_page 指令指定要返回 404 頁面錯誤代碼的頁面 (/404.html)。

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

5.4 日志

訪問日志:需要開啟壓縮 gzip on; 否則不生成日志文件,打開 log_format、access_log 注釋

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  /usr/local/etc/nginx/logs/host.access.log  main;




gzip 

5.5 deny 、allow 指令

#禁止訪問某個目錄
location / {
    allow 192.168.0.0;
    allow 127.0.0.1;
    deny all;
#這段配置值允許192.168.0./24網(wǎng)段和127.0.0.1的請求,其他來源IP全部拒絕。
}



5.6 內(nèi)置變量

nginx 的配置文件中可以使用的內(nèi)置變量以美元符 $ 開始。其中,大部分預(yù)定義的變量的值由客戶端發(fā)送攜帶。

$args :# 這個變量等于請求行中的參數(shù),同 $query_string

$content_length :請求頭中的 Content-length 字段。

$content_type :請求頭中的 Content-Type 字段。

$document_root :當(dāng)前請求在 root 指令中指定的值。

$host :請求行的主機(jī)名,為空則為請求頭字段 Host 中的主機(jī)名,再為空則與請求匹配的 server_name

$http_user_agent :客戶端 agent 信息

$http_cookie :客戶端 cookie 信息

$limit_rate :這個變量可以限制連接速率。

$request_method :客戶端請求的動作,通常為 GET 或 POST。

$remote_addr :客戶端的 IP 地址。

$remote_port :客戶端的端口。

$remote_user :已經(jīng)經(jīng)過 Auth Basic Module 驗證的用戶名。

$request_filename :當(dāng)前請求的文件路徑,由 root 或 alias 指令與 URI 請求生成。

$scheme :HTTP 方法(如 http,https)。

$server_protocol :請求使用的協(xié)議,通常是 HTTP/1.0 或 HTTP/1.1。

$server_addr :服務(wù)器地址,在完成一次系統(tǒng)調(diào)用后可以確定這個值。

$server_name :服務(wù)器名稱。

$server_port :請求到達(dá)服務(wù)器的端口號。

$request_uri :包含請求參數(shù)的原始 URI,不包含主機(jī)名,如:”/foo/bar.php?arg=baz”。

$uri :不帶請求參數(shù)的當(dāng)前 URI,$uri 不包含主機(jī)名,如”/foo/bar.html”。

$document_uri :與 $uri 相同

6 總結(jié)

Ngnix 是一款高性能反向代理服務(wù)器,學(xué)習(xí)它非常有必要,本文講解了 Ngnix 核心配置,介紹了反向代理,負(fù)載均衡,動靜分離三大功能,最后擴(kuò)展了一些常用的指令。本文介紹了 Ngnix 的基礎(chǔ)用法,后續(xù)的 Ngnix 內(nèi)核以及原理部分有待研究。




審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • HTTP協(xié)議
    +關(guān)注

    關(guān)注

    0

    文章

    67

    瀏覽量

    10042
  • Hash算法
    +關(guān)注

    關(guān)注

    0

    文章

    43

    瀏覽量

    7489
  • nginx
    +關(guān)注

    關(guān)注

    0

    文章

    161

    瀏覽量

    12441

原文標(biāo)題:Nginx常用配置及和基本功能講解

文章出處:【微信號:OSC開源社區(qū),微信公眾號:OSC開源社區(qū)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    Nginx服務(wù)優(yōu)化教程

    隱藏Nginx版本號,避免安全漏洞泄漏:修改配置文件法;修改源碼法
    的頭像 發(fā)表于 03-12 15:57 ?378次閱讀
    <b class='flag-5'>Nginx</b>服務(wù)優(yōu)化教程

    如何通過優(yōu)化Nginx配置來提高網(wǎng)絡(luò)環(huán)境的安全性

    簡介:?在當(dāng)今數(shù)字化時代,網(wǎng)絡(luò)安全至關(guān)重要。Nginx作為流行的Web服務(wù)器,不僅提供高性能,還具備強(qiáng)大的安全保障功能。然而,默認(rèn)配置可能無法抵御所有安全威脅,因此對Nginx進(jìn)行安全
    的頭像 發(fā)表于 02-14 17:49 ?1310次閱讀

    智能插頭的基本功能和工作原理

    在節(jié)能減碳逐漸成為重要議題的今日,智能插頭應(yīng)運(yùn)而生,以滿足節(jié)能需求。目前,市場上有各種價位的智能插頭,但它們究竟有哪些功能,以及如何使用呢?在這篇文章中,我們將深入介紹智能插頭的基本功能,讓您更清楚地了解這項智能家居設(shè)備。
    的頭像 發(fā)表于 01-15 15:49 ?745次閱讀

    Nginx日常運(yùn)維方法Linux版

    ,Nginx安裝目錄? ? whereis nginx ? 如圖: 執(zhí)行目錄:/usr/sbin/nginx 模塊所在目錄:/usr/lib64/nginx/modules
    的頭像 發(fā)表于 12-06 16:38 ?369次閱讀
    <b class='flag-5'>Nginx</b>日常運(yùn)維方法Linux版

    nginx負(fù)載均衡配置介紹

    目錄 nginx負(fù)載均衡 nginx負(fù)載均衡介紹 反向代理與負(fù)載均衡 nginx負(fù)載均衡配置 Keepalived高可用nginx負(fù)載均衡器
    的頭像 發(fā)表于 11-10 13:39 ?526次閱讀
    <b class='flag-5'>nginx</b>負(fù)載均衡<b class='flag-5'>配置</b>介紹

    MHMF042L32N-MINAS A6BU 系列 技術(shù)資料 -基本功能規(guī)格篇- 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF042L32N-MINAS A6BU 系列 技術(shù)資料 -基本功能規(guī)格篇-相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有
    發(fā)表于 10-15 18:59
    MHMF042L32N-MINAS A6BU 系列 技術(shù)資料 -<b class='flag-5'>基本功能</b>規(guī)格篇- 松下

    自動發(fā)電控制系統(tǒng)具有三個基本功能

    自動發(fā)電控制系統(tǒng)(AGC)具有三個基本功能,這些功能在電力系統(tǒng)的運(yùn)行和調(diào)度中發(fā)揮著重要作用。以下是這三個基本功能的詳細(xì)解析:
    的頭像 發(fā)表于 10-03 15:05 ?1302次閱讀

    開關(guān)量輸出模塊的基本功能是什么?它有幾種類型

    開關(guān)量輸出模塊是工業(yè)自動化領(lǐng)域中常用的一種控制模塊,其主要功能是實現(xiàn)對開關(guān)設(shè)備的控制。以下是對開關(guān)量輸出模塊的基本功能和類型的介紹: 開關(guān)量輸出模塊的基本功能 控制輸出 :最基本的
    的頭像 發(fā)表于 08-30 14:20 ?1090次閱讀

    同步開關(guān)一對多功能講解及演示

    一案例簡介本案例主要講解E860-DTU(8080-400SL)(以下簡稱同步開關(guān))產(chǎn)品的一主多從功能及使用案例,也就是平時所說的一對多模式。設(shè)備可通過配置工具配置一主多從模式,處于該
    的頭像 發(fā)表于 07-26 08:21 ?571次閱讀
    同步開關(guān)一對多<b class='flag-5'>功能講解</b>及演示

    nginx重啟命令linux步驟是什么?

      1、驗證nginx配置文件是否正確   方法一:進(jìn)入nginx安裝目錄sbin下,輸入命令./nginx -t   看到如下顯示nginx
    發(fā)表于 07-11 17:13

    nginx重啟命令linux步驟是什么?

      1、驗證nginx配置文件是否正確   方法一:進(jìn)入nginx安裝目錄sbin下,輸入命令./nginx -t   看到如下顯示nginx
    發(fā)表于 07-10 16:40

    CAN FD盒基本功能包括哪些

    CAN FD盒基本功能有哪些? CAN FD盒作為CAN FD總線通信的重要設(shè)備,其基本功能包括但不限于以下幾點: (1)數(shù)據(jù)發(fā)送與接收: CAN FD盒需要能夠按照指定的CAN FD標(biāo)準(zhǔn)和協(xié)
    的頭像 發(fā)表于 07-02 16:21 ?1154次閱讀

    MHMF011L32N-MINAS A6BN 系列 技術(shù)資料 -基本功能規(guī)格篇- 松下

    電子發(fā)燒友網(wǎng)為你提供Panasonic(Panasonic)MHMF011L32N-MINAS A6BN 系列 技術(shù)資料 -基本功能規(guī)格篇-相關(guān)產(chǎn)品參數(shù)、數(shù)據(jù)手冊,更有
    發(fā)表于 06-20 19:07
    MHMF011L32N-MINAS A6BN 系列 技術(shù)資料 -<b class='flag-5'>基本功能</b>規(guī)格篇- 松下

    智能工廠的架構(gòu)及ERP的基本功能是什么?

    一、引言 隨著科技的飛速發(fā)展,智能制造逐漸成為制造業(yè)的主流趨勢。智能工廠作為智能制造的核心,其架構(gòu)和ERP系統(tǒng)的基本功能對于提高生產(chǎn)效率、降低成本、提升產(chǎn)品品質(zhì)具有重要意義。本文將詳細(xì)介紹智能工廠
    的頭像 發(fā)表于 06-07 15:27 ?1826次閱讀

    multisim電路仿真軟件有哪些基本功能

    Multisim是一款強(qiáng)大的電路仿真軟件,它提供了許多基本功能,用于設(shè)計、分析和測試各種電子電路。下面是Multisim的基本功能的詳細(xì)介紹。 電路設(shè)計:Multisim允許用戶使用直觀的界面設(shè)計
    的頭像 發(fā)表于 05-04 10:44 ?4492次閱讀