nginx 配置系列(一)nginx 配置語法解讀

      網友投稿 1092 2022-05-29

      一、nginx的安裝

      安裝就不說了…

      二、nginx的配置文件解釋

      2.1、快速入門

      main(全局設置),main部分設置的指令將影響其它所有部分的設置;

      http(http服務器設置),http標準核心模塊,http服務的相應配置;

      server(主機設置)

      nginx 配置系列(一)nginx 配置語法解讀

      接收請求的服務器需要將不同的請求按規則轉發到不同的后端服務器上,在 nginx 中我們可以通過創建虛擬主機(server)的概念來將這些不同的服務配置隔離。

      location(URL匹配特定位置后的設置)

      location部分用于匹配網頁位置(比如,根目錄“/”,“/images”,等等),server 是對應一個域名進行的配置,而 location 是在一個域名下對更精細的路徑進行配置。

      下面附一張nginx配置文件詳解示例圖:

      上圖中只是把一些常見的配置做了解釋,當然了,nginx還有更多的配置指令。。

      在上一份兒nginx.conf文件大部分指令有注釋的,如下:

      #運行用戶``user nobody;``#啟動進程,通常設置成和cpu的數量相等``worker_processes 1;` `#全局錯誤日志及PID文件``#error_log logs/error.log;``#error_log logs/error.log notice;``#error_log logs/error.log info;` `#pid logs/nginx.pid;` `#工作模式及連接數上限``events {`` ``#epoll是多路復用IO(I/O Multiplexing)中的一種方式,`` ``#僅用于linux2.6以上內核,可以大大提高nginx的性能`` ``use epoll; ` ` ``#單個后臺worker process進程的最大并發鏈接數 `` ``worker_connections 1024;` ` ``# 并發總數是 worker_processes 和 worker_connections 的乘積`` ``# 即 max_clients = worker_processes * worker_connections`` ``# 在設置了反向代理的情況下,max_clients = worker_processes * worker_connections / 4 為什么`` ``# 為什么上面反向代理要除以4,應該說是一個經驗值`` ``# 根據以上條件,正常情況下的Nginx Server可以應付的最大連接數為:4 * 8000 = 32000`` ``# worker_connections 值的設置跟物理內存大小有關`` ``# 因為并發受IO約束,max_clients的值須小于系統可以打開的最大文件數`` ``# 而系統可以打開的最大文件數和內存大小成正比,一般1GB內存的機器上可以打開的文件數大約是10萬左右`` ``# 我們來看看360M內存的VPS可以打開的文件句柄數是多少:`` ``# $ cat /proc/sys/fs/file-max`` ``# 輸出 34336`` ``# 32000 < 34336,即并發連接總數小于系統可以打開的文件句柄總數,這樣就在操作系統可以承受的范圍之內`` ``# 所以,worker_connections 的值需根據 worker_processes 進程數目和系統可以打開的最大文件總數進行適當地進行設置`` ``# 使得并發總數小于操作系統可以打開的最大文件數目`` ``# 其實質也就是根據主機的物理CPU和內存進行配置`` ``# 當然,理論上的并發總數可能會和實際有所偏差,因為主機還有其他的工作進程需要消耗系統資源。`` ``# ulimit -SHn 65535` `}` `http {`` ``#設定mime類型,類型由mime.type文件定義`` ``include 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 logs``/access``.log main;` ` ``#sendfile 指令指定 nginx 是否調用 sendfile 函數(zero copy 方式)來輸出文件,`` ``#對于普通應用,必須設為 on,`` ``#如果用來進行下載等應用磁盤IO重負載應用,可設置為 off,`` ``#以平衡磁盤與網絡I/O處理速度,降低系統的uptime.`` ``sendfile on;`` ``#tcp_nopush on;` ` ``#連接超時時間`` ``#keepalive_timeout 0;`` ` ` ``#關于keepalive_timeout參數詳細說明如下:`` ``#http是一種無狀態協議,客戶端向服務器發送一個 TCP 請求,服務端響應完畢后斷開連接。如果客戶端向服務器發送多個請求,每個請求都要建立各自獨立的連接以傳輸數據。`` ` ` ``#http有一個Keep-Alive模式,它告訴webserver在處理完一個請求后保持這個TCP連接的打開狀態。若接收到來自客戶端的其它請求,服務端會利用這個未被關閉的連接,而不需要再建立一個連接。`` ``#Keep-Alive在一段時間內保持打開狀態,它們會在這段時間內占用資源,占用過多就會影響性能。`` ``#Nginx使用keepalive_timeout來指定Keep-Alive的超時時間(timeout)。指定每個TCP連接最多可以保持多長時間。Nginx 的默認值是75秒,有些瀏覽器最多只保持60秒,所以可以設定為60秒。若將它設置為0,就禁止了keep-alive連接。`` ` ` ``keepalive_timeout 65; ``#65s(單位是:秒)。該參數是一個請求完成之后還要保持連接多久,不是請求時間多久,目的是保持長連接,減少創建連接過程給系統帶來的性能損耗,類似于數據庫連接池。`` ``tcp_nodelay on;` ` ``#開啟gzip壓縮`` ``gzip` `on;`` ``gzip_disable ``"MSIE [1-6]."``;` ` ``#設定請求緩沖`` ``client_header_buffer_size 128k;`` ``large_client_header_buffers 4 128k;` ` ``#設定虛擬主機配置`` ``server {`` ``#偵聽80端口`` ``listen 80;`` ``#定義使用 www.nginx.cn訪問`` ``server_name www.nginx.cn;` ` ``#定義服務器的默認網站根目錄位置`` ``root html;` ` ``#設定本虛擬主機的訪問日志`` ``access_log logs``/nginx``.access.log main;` ` ``#默認請求`` ``location / {`` ` ` ``#定義首頁索引文件的名稱`` ``index index.php index.html index.htm; ` ` ``}` ` ``# 定義錯誤提示頁面`` ``error_page 500 502 503 504 ``/50x``.html;`` ``location = ``/50x``.html {`` ``}` ` ``#靜態文件,nginx自己處理`` ``location ~ ^/(images|javascript|js|css|flash|media|static)/ {`` ` ` ``#過期30天,靜態文件不怎么更新,過期可以設大一點,`` ``#如果頻繁更新,則可以設置得小一點。`` ``expires 30d;`` ``}` ` ``#PHP 腳本請求全部轉發到 FastCGI處理. 使用FastCGI默認配置.`` ``location ~ .php$ {`` ``fastcgi_pass 127.0.0.1:9000;`` ``fastcgi_index index.php;`` ``fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;`` ``include fastcgi_params;`` ``}` ` ``#禁止訪問 .htxxx 文件`` ``location ~ /.ht {`` ``deny all;`` ``}` ` ``}``}

      2.2、詳細解析

      配置語法說明:

      ①、配置文件由指令與指令塊構成

      ②、每條指令以;分號結尾,指令與參數間以空格符號分隔

      ③、指令塊以{}大括號將多條指令組織在一起

      ④、使用#符號添加注釋,提高可讀性

      ⑤、include語句允許組合多個配置文件以提升可維護性

      ⑥、使用$符號使用變量

      ⑦、部分指令的參數支持正則表達式

      Nginx的各種指令以及配置繁多,該系列博文會記錄一些nginx常用配置,后期會說一些優化配置,有些配置可以在 https://tengine.taobao.org/nginx_docs/cn/docs/ 或者在 http://www.nginx.cn 或者在 官方文檔上查看

      配置塊: server

      由于IP地址的數量有限,因此經常存在多個主機域名對應著同一個IP地址的情況,這時在nginx.conf中就可以按照server_name(對應用戶請求中的主機域名)并通過server塊來定義虛擬主機,每個server塊就是一個虛擬主機,它只處理與之相對應的主機域名請求。這樣,一臺服務器上的Nginx就能以不同的方式處理訪問不同主機域名的HTTP請求了

      語法:

      語法: server_name name[…];

      默認: server_name"";

      配置塊: server

      虛擬主機名可以使用確切的名字,通配符,或者是正則表達式來定義,在開始處理一個HTTP請求時,Nginx會取出request header頭(請求頭)中的Host,與每個server中的server_name進行匹配,以此決定到底由哪一個server塊來處理這個請求。有可能一個Host與多個server塊中的server_name都匹配,這時就會根據匹配優先級來選擇實際處理的server塊。

      注意:優先級問題,所導致的配置不生效。

      server_name與Host的匹配優先級如下:

      1)首先選擇所有字符串完全匹配的server_name,如 nginx.2367.com 。

      2)其次選擇通配符在前面的server_name,如 *.2367.com。

      3)再次選擇通配符在后面的server_name,如nginx.2367.* 。

      4)最后選擇使用正則表達式才匹配的server_name,如 ~^.testweb.com$

      如果都不匹配

      1)、優先選擇listen配置項后有default或default_server的

      2)、找到匹配listen端口的第一個server塊

      配置塊: location

      location

      語法: location[=|~|~*|^~|@]/uri/{…}

      location 會嘗試根據用戶請求中的URI來匹配上面的/uri表達式,如果可以匹配,就選擇。

      location{} 塊中的配置來處理用戶請求。當然,匹配方式是多樣的,下面說一下location的匹配規則。

      location 表達式類型:

      ~ 表示執行一個正則匹配,區分大小寫;

      ~* 表示執行一個正則匹配,不區分大小寫;

      ^~ 表示普通字符匹配。使用前綴匹配。如果匹配成功,則不再匹配其它的location;

      = 進行普通字符精確匹配。也就是完全匹配;

      @ 它定義一個命名的 location,使用在內部定向時,例如 error_page, try_files;

      location 表達式類型的優先級:

      等號類型(=)的優先級最高。一旦匹配成功,則不再查找其它匹配項;

      前綴普通匹配(^~)優先級次之。不支持正則表達式。使用前綴匹配,如果有多個location匹配的話,則使用表達式最長的那個;

      正則表達式類型(~ ~*)的優先級次之。一旦匹配成功,則不再查找其它匹配項;

      常規字符串匹配,如果有多個location匹配的話,則使用表達式最長的那個;

      優先級總結來說:(location =) > (location 完整路徑) > (location ^~ 路徑) > (location ~,~* 正則順序) > (location 部分起始路徑)

      文件路徑的定義:

      以root方式設置資源路徑:

      語法: root path;

      配置塊: http、server、location、if

      以alias方式設置資源路徑:

      語法: alias path;

      配置塊: location

      alias也是用來設置文件資源路徑的,它與root的不同點主要在于如何解讀緊跟location后面的uri參數

      注意: location中使用root指令和alias指令的意義不同

      (a) root,相當于追加在root目錄后面 。比如訪問的是 xxx/test=>/www/test

      (b) alias,相當于對location中的uri進行替換,比如訪問的是 xxx/test,想要訪問到/www/test就必須設置 alias /www/test

      三、nginx常用命令

      3.1、查看Nginx的版本號:nginx -V

      3.2、停止 nginx -s stop

      3.3、退出 nginx -s quit

      3.4、重啟加載配置 nginx -s reload

      3.5、配置文件啟動 nginx -c 為 Nginx 指定一個配置文件

      3.6、nginx -t 不運行,而僅僅測試配置文件。nginx 將檢查配置文件的語法的正確性,并嘗試打開配置文件中所引用到的文件。

      四、nginx常用模塊了解及使用

      HTTP Nginx

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【愚公系列】2021年12月 Java教學課程 29-Git流程分析和步驟
      下一篇:web前端開發:sublime的使用
      相關文章
      亚洲一区二区三区四区视频| 国产精品亚洲片在线| 亚洲精品福利视频| 亚洲欧洲国产精品香蕉网| 亚洲午夜精品久久久久久浪潮| 朝桐光亚洲专区在线中文字幕| 亚洲精品无码永久在线观看男男| 亚洲深深色噜噜狠狠网站| 国产亚洲sss在线播放| 亚洲校园春色另类激情| 亚洲一区二区三区国产精品无码| 亚洲免费在线视频观看| 亚洲一区在线视频| 33333在线亚洲| 亚洲中文无码永久免| 亚洲日本VA中文字幕久久道具| 亚洲一线产区二线产区区| 亚洲人成人网站18禁| 亚洲AV综合永久无码精品天堂| 亚洲av纯肉无码精品动漫| 亚洲国产成人久久精品99| 亚洲一本大道无码av天堂| 不卡一卡二卡三亚洲| 亚洲女初尝黑人巨高清| 亚洲av无码乱码国产精品| 亚洲国产一区国产亚洲| 亚洲第一精品电影网| 国产亚洲sss在线播放| 亚洲欧美中文日韩视频| 国内成人精品亚洲日本语音| 亚洲av中文无码| 国产亚洲精品久久久久秋霞| 精品亚洲永久免费精品| 亚洲国产精品第一区二区| 7777久久亚洲中文字幕蜜桃| 亚洲国产成人精品无码区在线秒播| 亚洲天堂2016| 精品亚洲成A人在线观看青青| 亚洲?V无码乱码国产精品 | 亚洲av成人一区二区三区| 亚洲人成未满十八禁网站|