Nginx簡介和常用的一些配置
簡介
Nginx是一個免費的、開源的、高效能的HTTP伺服器和反向代理,以及IMAP/POP3代理伺服器。Nginx是為解決C10K問題編寫的少數伺服器之一。與傳統伺服器不同,NGNX不依賴執行緒來處理請求。相反,它使用了更可擴充套件的事件驅動(非同步)架構。這種架構使用較小但更重要的是在負載下可預測的記憶體量。即使您不希望同時處理數千個請求,您仍然可以從Nginx的高效能和小記憶體佔用中受益。
特點
- 靜態的web資源伺服器;(圖片伺服器,或js/css/html/txt等靜態資源伺服器)
- 結合FastCGI/uwSGI/SCGI等協議反代動態資源請求;
- http/https協議的反向代理;
- imap4/pop3協議的反向代理;
- tcp/udp協議的請求轉發;
- 使用epoll模型,使Nginx在高併發環境下表現的很好。但是處理動態請求的時候沒有太多優勢(靜態小檔案多的情況下同時處理的連線數多)
- 佔用資源少
- 配置簡單,靈活
應用的場景
- 處理靜態請求(圖片,視訊服務)html js css flv等等
- 處理動態請求,nginx+fastcgi 的方式執行
- 反向代理,負載均衡
- 快取服務
安裝
這裡使用編譯安裝
可以再官網找到tar包,http://nginx.org/en/download.html
系統: CentOS7
Nginx版本:1.14
yum install openssl openssl-devel gcc gcc-devel pcre pcre-devel -y
useradd -M -s /sbin/nologin nginx
cd /usr/local/src/
wget http://nginx.org/download/nginx-1.14.0.tar.gz ##這裡直接wget吧tar包下載下來
tar -xf nginx-1.14.0.tar.gz
cd nginx-1.14.0
./configure --prefix=/usr/local/nginx1.14 --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module --with-http_flv_module --with-http_mp4_module --with-threads --with-file-aio
make && make install
ln -sv /usr/local/nginx1.14 /usr/local/nginx
PATH=/usr/local/nginx/sbin/:$PATH
我們可以看一下Nginx目錄結構
[root@localhost nginx-1.14.0]# tree /usr/local/nginx -L 1
/usr/local/nginx
├── conf #存放配置檔案的目錄
├── html #預設的站點目錄
├── logs #存放日誌的目錄
└── sbin #nginx命令的目錄
常見配置指令
1.user
格式:user user [group]
定義worker程式所屬的使用者和使用者組
2.pid /PATH/TO/PID_FILE
pid檔案路徑
3.include file
指明包含進來的其它配置檔案片斷;
4.load_module file
指明要裝載的動態模組
效能優化相關的配置
1.worker_processes number | auto;
worker程式的數量;通常應該等於小於當前主機的cpu的物理核心數;
auto:當前主機物理CPU核心數;
2.worker_cpu_affinity cpumask …;
worker_cpu_affinity auto [cpumask];
cpu核心繫結,將worker程式繫結在固定的cpu核上,我們考慮這樣一種場景,worker程式沒有繫結在固定的cpu上,worker程式可能每次都在不同的cpu上執行,比如第一次在第一個cpu上,第二次在第二個cpu上,這樣你在第一個cpu上的快取就用不到了。就會被浪費掉,減少了快取命中。
舉個例子,加入有4個cpu我們可以這樣寫
worker_cpu_affinity 0001 0010 0100 1000;
其中0001表示繫結在0號cpu上,0010表示繫結在1號cpu上。以此類推。
ps axo pid,command,psr| grep nginx| grep -v grep #可以用這個命令檢視是否繫結成功,請求進來的時候,執行看一下繫結的cpu變了沒。
3.worker_priority number;
指定worker程式的nice值,設定worker程式優先順序;[-20,20]
4.worker_rlimit_nofile number;
worker程式所能夠開啟的檔案數量上限;
事件驅動相關的配置
1.worker_connections number;
每個worker程式所能夠開啟的最大併發連線數數量;
nginx所有程式併發連線數=worker_processes * worker_connections
2.use method;
指明併發連線請求的處理方法,一般使用epoll
3.accept_mutex on | off;
處理新的連線請求的方法;on意味著由各worker輪流處理新請求,Off意味著每個新請求的到達都會通知所有的worker程式;
與套接字相關的配置:
1.server { … }
配置一個虛擬主機;
server {
listen address[:PORT]|PORT;
server_name SERVER_NAME;
root /PATH/TO/DOCUMENT_ROOT;
}
2.listen PORT|address[:port]|unix:/PATH/TO/SOCKET_FILE
格式:listen address[:port] [default_server] [ssl] [http2 | spdy] [backlog=number] [rcvbuf=size] [sndbuf=size]
- default_server:設定為預設虛擬主機;
- ssl:限制僅能夠通過ssl連線提供服務;
- backlog=number:後援佇列長度;
- rcvbuf=size:接收緩衝區大小;
- sndbuf=size:傳送緩衝區大小;
3.server_name name …;
指明虛擬主機的主機名稱;後可跟多個由空白字元分隔的字串;
支援通配任意長度的任意字元;server_name www.ice.*
支援~起始的字元做正規表示式模式匹配;
匹配優先順序機制:
首先是字串精確匹配;
左側*萬用字元;
右側*萬用字元;
正規表示式;
4.tcp_nodelay on | off;
在keepalived模式下的連線是否啟用TCP_NODELAY選項;同個連結比如請求多個資源,會到一定程度一起傳送,而不是馬上傳送。開啟狀態就是直接發。不攢起來發。
5.tcp_nopush on|off;
在sendfile模式下,是否啟用TCP_CORK選項;吧響應報文首部和檔案起始內容放在一起傳送,傳送一個檔案在一個報文裡,因為sendfile是高階io,使用者請求的資源在硬碟上,一般是從硬碟讀取到核心,然後從核心讀取到程式,然後再從程式發往核心,然後再送出去。sendfile模式則是,不需要從核心讀取到程式,而是直接從硬碟讀取到核心然後直接傳送出去。然後報文首部在nginx程式生成,然後傳送到核心,核心再從網路卡出去。而開啟了這個選項會讓核心裡的資源等一等程式的報文首部。合併成一個檔案再傳送出去
6.sendfile on | off;
是否啟用sendfile功能;sendfile是高階io,使用者請求的資源在硬碟上,一般是從硬碟讀取到核心,然後從核心讀取到程式,然後再從程式發往核心,然後再送出去。sendfile模式則是,不需要從核心讀取到程式,而是直接從硬碟讀取到核心然後直接傳送出去。
定義路徑相關的配置:
1.root path;
設定web資源路徑對映;用於指明使用者請求的url所對應的本地檔案系統上的文件所在目錄路徑;可用的位置:http, server, location, if in location;
2.location [ = | ~ | ~* | ^~ ] uri { … }
Sets configuration depending on a request URI.
在一個server中location配置段可存在多個,用於實現從uri到檔案系統的路徑對映;ngnix會根據使用者請求的URI來檢查定義的所有location,並找出一個最佳匹配,而後應用其配置;
=:對URI做精確匹配;
~:對URI做正規表示式模式匹配,區分字元大小寫;
~*:對URI做正規表示式模式匹配,不區分字元大小寫;
^~:對URI的左半部分做匹配檢查,不區分字元大小寫;
不帶符號:匹配起始於此uri的所有的url;
匹配優先順序:=, ^~, ~/~*,不帶符號;
官方的一個典型例子
location = / {
[ configuration A ]
}
location / {
[ configuration B ]
}
location /documents/ {
[ configuration C ]
}
location ^~ /images/ {
[ configuration D ]
}
location ~* \.(gif|jpg|jpeg)$ {
[ configuration E ]
}
#請求“/”的時候會匹配configuration A
#請求“/index.html”將會匹配configuration B,
#請求“/documents/document.html”將會匹配configuration C
#請求“/images/1.gif”將會匹配configuration D
#請求“/documents/1.jpg”將會匹配configuration E
3.alias path;
定義路徑別名,文件對映的另一種機制;僅能用於location上下文;
注意:location中使用root指令和alias指令的意義不同;
(a) root,給定的路徑對應於location中的/uri/左側的/;
(b) alias,給定的路徑對應於location中的/uri/右側的/;
4.index file …;
預設資源;http, server, location;
5.error_page code … [=[response]] uri;
定義錯誤頁面,可以再location內定製錯誤頁面
# error_page 404 /404.html;
# location = /40x.html { ##這裡可以用root指令定製錯誤頁面
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
6.try_files file … uri;
定義客戶端請求的相關配置
1.keepalive_timeout timeout [header_timeout];
設定保持連線的超時時長,0表示禁止長連線;預設為75s;
2.keepalive_requests number;
在一次長連線上所允許請求的資源的最大數量,預設為100;
3.keepalive_disable none | browser …;
對哪種瀏覽器禁用長連線;
4.send_timeout time;
向客戶端傳送響應報文的超時時長,此處,是指兩次寫操作之間的間隔時長;
5.client_body_buffer_size size;
用於接收客戶端請求報文的body部分的緩衝區大小;預設為16k;超出此大小時,其將被暫存到磁碟上的由client_body_temp_path指令所定義的位置;
client_body_temp_path path [level1 [level2 [level3]]];
設定用於儲存客戶端請求報文的body部分的臨時儲存路徑及子目錄結構和數量;
client_body_temp_path /var/tmp/client_body 2 1 1
1:表示用一位16進位制數字表示一級子目錄;0-f
2:表示用2位16程式數字表示二級子目錄:00-ff
2:表示用2位16程式數字表示三級子目錄:00-ff
對客戶端進行限制的相關配置:
1.limit_rate rate;
限制響應給客戶端的傳輸速率,單位是bytes/second,0表示無限制;
2.limit_except method … { … }
限制對指定的請求方法之外的其它方法的使用客戶端;
limit_except GET {
allow 192.168.1.0/24;
deny all;
}
檔案操作優化的配置
1.aio on | off | threads[=pool];
是否啟用aio功能;
2.directio size | off;
在Linux主機啟用O_DIRECT標記,此處意味檔案大於等於給定的大小時使用,例如directio 4m;
3.open_file_cache off;
open_file_cache max=N [inactive=time];
nginx可以快取以下三種資訊:
(1) 檔案的描述符、檔案大小和最近一次的修改時間;
(2) 開啟的目錄結構;
(3) 沒有找到的或者沒有許可權訪問的檔案的相關資訊;
max=N:可快取的快取項上限;達到上限後會使用LRU演算法實現快取管理;
inactive=time:快取項的非活動時長,在此處指定的時長內未被命中的或命中的次數少於open_file_cache_min_uses指令所指定的次數的快取項即為非活動項;
4.open_file_cache_valid time;
快取項有效性的檢查頻率;預設為60s;
5.open_file_cache_min_uses number;
在open_file_cache指令的inactive引數指定的時長內,至少應該被命中多少次方可被歸類為活動項;
6.open_file_cache_errors on | off;
是否快取查詢時發生錯誤的檔案一類的資訊;
相關文章
- 整理的一些常用到的 Nginx 配置Nginx
- Nginx的幾個常用配置和技巧Nginx
- nginx常用配置Nginx
- 04 . Filebeat簡介原理及配置檔案和一些案例
- nginx常用配置教程。Nginx
- NGINX簡介Nginx
- Nginx 簡介Nginx
- nginx 常用配置記錄Nginx
- 常用索引簡介索引
- 介紹Nginx配置支援PHPNginxPHP
- Nginx 安裝配置介紹Nginx
- 簡記一些常用的操作指令
- NGINX的配置和基本使用Nginx
- 筆記50-Spring簡介和配置筆記Spring
- centos下配置nginx遇到的一些基本的坑CentOSNginx
- Spring常用Annotation簡介Spring
- Git 配置簡介Git
- SHELL中常用的一些簡單命令
- 常用的WEB伺服器簡介Web伺服器
- 學習 Nginx 的一些筆記,命令配置等Nginx筆記
- Go之Gorm和BeegoORM簡介及配置使用GoORM
- Nginx常用的配置 多臺服務 跨域 HTTPSNginx跨域HTTP
- UML常用建模工具簡介,安裝方法和各自的優點
- MHA常用指令碼簡介指令碼
- 大神教你Nginx常用基礎配置方案Nginx
- python的一些常用簡易技術(一)Python
- 簡單介紹nginx 變數使用Nginx變數
- Nginx的安裝和多域名配置Nginx
- Spring的簡介安裝及配置Spring
- KVM常用命令簡介
- mysql 常用sql語句 簡介MySql
- RAP簡介教程&常用規則
- 常用的 nginx 命令Nginx
- Linux 的發展歷史,設計哲學和一些常用的術語介紹Linux
- 一些常用的html、css、js的簡單應用HTMLCSSJS
- PHP-FPM和nginx配置PHPNginx
- POI 和 easyExcel 的簡介Excel
- 簡單介紹nginx反向代理及使用Nginx