elasticsearch入門系列">elasticsearch入門系列
1092
2022-05-29
一、nginx的安裝
安裝就不說了…
二、nginx的配置文件解釋
2.1、快速入門
main(全局設置),main部分設置的指令將影響其它所有部分的設置;
http(http服務器設置),http標準核心模塊,http服務的相應配置;
server(主機設置)
接收請求的服務器需要將不同的請求按規則轉發到不同的后端服務器上,在 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小時內刪除侵權內容。