nginx配置(一)

Nginx:
http協議:web服務器(類似于httpd)、http reverse proxy(類似于httpd)、imap/pop3 reverse proxy

NGINX is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server. 

解決C10K(10K Connections)問題而發展起來的web服務
Tengine, OpenResty.

http協議:
URL:shceme://username:password@host:port/path;params?query#frag

http事務:
request:
<method> <URL> <VERSION>
HEADERS

<body>

response:
<VERSION> <STATUS> <REASON-PHRASE>
HEADERS

<body>

Method:GET/HEAD/POST, PUT/DELETE, TRACES, OPTIONS

Status Code:
1xx:
2xx:成功類響應碼,200
3xx:重定向類的響應碼,301, 302, 304
4xx:客戶端錯誤,403,404
5xx:服務器端錯誤,502

認證:
基于ip認證
基于用戶認證 :basic/digest

httpd MPM:
prefork:進程模型,兩級結構,主進程master負責生成子進程,
        每個子進程負責響應一個請求;
worker: 線程模型,三級結構,主進程master負責生成子進程,
        每個子進程負責生成多個線程,每個線程響應一個請求;
event:主進程master負責生成子進程,每個子進程響應多個請求;

Nginx的程序架構:
        master/worker
         一個master進程:
                    負載加載和分析配置文件、管理worker進程、平滑升級
                    一個或多個worker進程
                 處理并響應用戶請求
         緩存相關的進程:
cache loader:載入緩存對象
cache manager:管理緩存對象

特性:異步、事件驅動和非阻塞
并發請求處理:通過kevent/epoll/select,/dev/poll
文件IO:高級IO sendfile,異步,mmap

nginx高度模塊:高度模塊化,但其模塊早期不支持DSO機制;近期版本支持動態裝載和卸載;
模塊分類:
核心模塊:core module
標準模塊:
HTTP modules:
Standard HTTP modules
Optional HTTP modules
Mail modules
Stream modules
3rd party modules

nginx的功用:
靜態的web資源服務器;(圖片服務器,或js/css/html/txt等靜態資源服務器)
結合FastCGI/uwSGI/SCGI等協議反代動態資源請求;
http/https協議的反向代理;
imap4/pop3協議的反向代理;
tcp/udp協議的請求轉發;

nginx的安裝配置:
官方的預制包:
http://nginx.org/packages/centos/7/x86_64/RPMS/
Fedora-EPEL:

編譯安裝:
~]# yum install pcre-devel openssl-devel zlib-devel
~]# useradd -r nginx
~]#  ./configure –prefix=/usr/local/nginx –conf-path=/etc/nginx/nginx.conf –error-log-path=/var/log/nginx/error.log –http-log-path=/var/log/nginx/access.log –pid-path=/var/run/nginx.pid –lock-path=/var/run/nginx.lock –user=nginx –group=nginx –with-http_ssl_module –with-http_v2_module –with-http_dav_module –with-http_stub_status_module –with-threads –with-file-aio

make && make install

配置文件的組成部分:
主配置文件:nginx.conf
              include conf.d/.conf
              fastcgi, uwsgi,scgi等協議相關的配置文件
              mime.types:支持的mime類型

主配置文件的配置指令:
directive value [value2 …];

注意:
(1) 指令必須以分號結尾;
(2) 支持使用配置變量;
           內建變量:由Nginx模塊引入,可直接引用;
           自定義變量:由用戶使用set命令定義;
                  set variable_name value;
          引用變量:$variable_name

主配置文件結構:
main block:主配置段,也即全局配置段;
event {

}:事件驅動相關的配置;
http {

}:http/https 協議相關的配置段;
mail {

}
stream {

}

http協議相關的配置結構
http {

…:各server的公共配置
server {

}:每個server用于定義一個虛擬主機;
server {

listen 
server_name
root
alias
location [OPERATOR] URL {

if CONDITION {

}
}
}
}

nginx:master/worker
master:配置文件分析和加載、管理worker、平滑升級;
worker:處理用戶請求;
cache loader, cache manager:緩存加載和緩存管理

高度模塊化:
HTTP module
Standard HTTP Module
Optional HTTP Module
Mail Module
Stream Module

main配置段常見的配置指令:
分類:
正常運行必備的配置
優化性能相關的配置
用于調試及定位問題相關的配置
事件驅動相關的配置

正常 運行必備的配置:
1、user
Syntax: user user [group];
Default: user nobody nobody;
Context: main

Defines user and group credentials used by worker processes. If group is omitted, a group whose name equals that of user is used.

2、pid /PATH/TO/PID_FILE;
指定存儲nginx主進程進程號碼的文件路徑;

3、include file | mask;
指明包含進來的其它配置文件片斷;

4、load_module file;
指明要裝載的動態模塊;

性能優化相關的配置:
1、worker_processes number | auto;
worker進程的數量;通常應該為當前主機的cpu的物理核心數;

2、worker_cpu_affinity cpumask …;
worker_cpu_affinity auto [cpumask];

CPU MASK:
00000001:0號CPU
00000010:1號CPU
… …
3、worker_priority number;
指定worker進程的nice值,設定worker進程優先級;[-20,20]

4、worker_rlimit_nofile number;
worker進程所能夠打開的文件數量上限;

調試、定位問題:
1、daemon on|off;
是否以守護進程方式運行Nignx;

2、master_process on|off;
是否以master/worker模型運行nginx;默認為on;

3、error_log file [level];

事件驅動相關的配置:
events {

}

1、worker_connections number;
每個worker進程所能夠打開的最大并發連接數數量;
 worker_processes * worker_connections
 
2、use method;
指明并發連接請求的處理方法;
use epoll;

3、accept_mutex on | off;
處理新的連接請求的方法;on意味著由各worker輪流處理新請求,Off意味著每個新請求的到達都會通知所有的worker進程;

http協議的相關配置:
http {
… …
server {

server_name
root
location [OPERATOR] /uri/ {

}
}
server {

}
}

與套接字相關的配置:

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:發送緩沖區大?。?/p>

3、server_name name …;
指明虛擬主機的主機名稱;后可跟多個由空白字符分隔的字符串
支持
通配任意長度的任意字符;server_name .magedu.com  www.magedu.
支持~起始的字符做正則表達式模式匹配;server_name ~^www\d+.magedu.com$

匹配機制:
(1) 首先是字符串精確匹配;
(2) 左側通配符;
(3) 右側
通配符;
(4) 正則表達式;

4、tcp_nodelay on | off;
在keepalived模式下的連接是否啟用TCP_NODELAY選項;

5、sendfile on | off;
是否啟用sendfile功能;

定義路徑相關的配置:
6、root path; 
設置web資源路徑映射;用于指明用戶請求的url所對應的本地文件系統上的文檔所在目錄路徑;可用的位置:http, server, location, if in location;

7、location [ = | ~ | ~* | ^~ ] uri { … }

在一個server中location配置段可存在多個,用于實現從uri到文件系統的路徑映射;ngnix會根據用戶請求的URI來檢查定義的所有location,并找出一個最佳匹配,而后應用其配置;

=:對URI做精確匹配;例如, http://www.magedu.com/, http://www.magedu.com/index.html
location  = / {

}
~:對URI做正則表達式模式匹配,區分字符大小寫;
~:對URI做正則表達式模式匹配,不區分字符大小寫;
^~:對URI的左半部分做匹配檢查,不區分字符大小寫;
不帶符號:匹配起始于此uri的所有的url;

匹配優先級:=, ^~, ~/~,不帶符號;

root /vhosts/www/htdocs/
http://www.magedu.com/index.html –> /vhosts/www/htdocs/index.html

server {
root  /vhosts/www/htdocs/

location /admin/ {
root /webapps/app1/data/
}
}

8、alias path;
  定義路徑別名,文檔映射的另一種機制:僅能用于location上下文
注意:location中使用root指令和alias指令的意義不同;
(a) root,給定的路徑對應于location中的/uri/左側的/;
(b) alias,給定的路徑對應于location中的/uri/右側的/
9、index file …;
默認資源;http, server, location;

10、error_page code … [=[response]] uri;
Defines the URI that will be shown for the specified errors. 

11、try_files file … uri;

定義客戶端請求的相關配置

12、keepalive_timeout timeout [header_timeout];
設定保持連接的超時時長,0表示禁止長連接;默認為75s;

13、keepalive_requests number;
在一次長連接上所允許請求的資源的最大數量,默認為100; 

14、keepalive_disable none | browser …;
對哪種瀏覽器禁用長連接;

15、send_timeout time;
向客戶端發送響應報文的超時時長,此處,是指兩次寫操作之間的間隔時長;

16、client_body_buffer_size size;
用于接收客戶端請求報文的body部分的緩沖區大??;默認為16k;超出此大小時,其將被暫存到磁盤上的由client_body_temp_path指令所定義的位置;

17、client_body_temp_path path [level1 [level2 [level3]]];
設定用于存儲客戶端請求報文的body部分的臨時存儲路徑及子目錄結構和數量;

16進制的數字;

client_body_temp_path path  /var/tmp/client_body  2 1 1 
1:表示用一位16進制數字表示一級子目錄;0-f
2:表示用2位16進程數字表示二級子目錄:00-ff
2:表示用2位16進程數字表示三級子目錄:00-ff

對客戶端進行限制的相關配置:
18、limit_rate rate;
限制響應給客戶端的傳輸速率,單位是bytes/second,0表示無限制;

19、limit_except method … { … }
限制對指定的請求方法之外的其它方法的使用客戶端;

limit_except GET {
allow 192.168.1.0/24;
deny  all;
}

文件操作優化的配置
20、aio on | off | threads[=pool];
是否啟用aio功能;

21、directio size | off;
在Linux主機啟用O_DIRECT標記,此處意味文件大于等于給定的大小時使用,例如directio 4m;

22、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指令所指定的次數的緩存項即為非活動項;

23、open_file_cache_valid time;
緩存項有效性的檢查頻率;默認為60s; 

24、open_file_cache_min_uses number;
在open_file_cache指令的inactive參數指定的時長內,至少應該被命中多少次方可被歸類為活動項;

25、open_file_cache_errors on | off;
是否緩存查找時發生錯誤的文件一類的信息;

ngx_http_access_module模塊:
實現基于ip的訪問控制功能

26、allow address | CIDR | unix: | all;
27、deny address | CIDR | unix: | all;

http, server, location, limit_except

ngx_http_auth_basic_module模塊
實現基于用戶的訪問控制,使用basic機制進行用戶認證;

28、auth_basic string | off;       #sting加上引號表示說明
29、auth_basic_user_file file;

location /admin/ {
alias /webapps/app1/data/;
auth_basic “Admin Area”;
auth_basic_user_file /etc/nginx/.ngxpasswd;
}

注意:htpasswd命令由httpd-tools所提供;

ngx_http_stub_status_module模塊
用于輸出nginx的基本狀態信息;

Active connections: 291 
server accepts handled requests
16630948 16630948 31070465 
Reading: 6 Writing: 179 Waiting: 106

Active connections: 活動狀態的連接數;
accepts:已經接受的客戶端請求的總數;
handled:已經處理完成的客戶端請求的總數;
requests:客戶端發來的總的請求數;
Reading:處于讀取客戶端請求報文首部的連接的連接數;
Writing:處于向客戶端發送響應報文過程中的連接數;
Waiting:處于等待客戶端發出請求的空閑連接數;

30、stub_status;

配置示例:
location  /basic_status {
stub_status;
}

ngx_http_log_module模塊
he ngx_http_log_module module writes request logs in the specified format.

31、log_format name string …;
string可以使用nginx核心模塊及其它模塊內嵌的變量;

課外作業:為nginx定義使用類似于httpd的combined格式的訪問日志;

32、access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
access_log off;

訪問日志文件路徑,格式及相關的緩沖的配置;
buffer=size
flush=time 

33、open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
open_log_file_cache off;
緩存各日志文件相關的元數據信息;

max:緩存的最大文件描述符數量;
min_uses:在inactive指定的時長內訪問大于等于此值方可被當作活動項;
inactive:非活動時長;
valid:驗正緩存中各緩存項是否為活動項的時間間隔;

原創文章,作者:shewei,如若轉載,請注明出處:http://www.www58058.com/74810

(0)
sheweishewei
上一篇 2017-05-05
下一篇 2017-05-05

相關推薦

  • N22-℡浮生.若夢 ╮第一周作業

    1.描述計算機的組成及其功能  組成:     硬件       (1).CPU: 是計算機的主要設備之一,功能主要是解釋計算機指令以及處理計算機軟件中的數據.       (2).存儲器:內存,硬盤,存儲器的功能是存儲程序、數據和各種信號…

    Linux干貨 2016-09-19
  • btrfs管理及應用

    一、btrfs的命令選項     mkfs.btrfs         -L 'LABEL' 指定卷標         -d <type&…

    Linux干貨 2016-03-12
  • 27期第一周學習小結

    第一周 1. 描述計算機的組成及其功能。 計算機主要組成部分以下五種:運算器,控制器,存儲器,輸入設備,輸出設備。 運算器的功能是對數據進行算術運算與邏輯運算,就是對數據進行加工處理。 控制器的功能是調度二進制程序,數據,內存尋址,以及協調計算機輸入設備和輸出設備等各計算機部件之間的正常工作。 存儲器的功能是存儲二進制指令和數據。存儲器是編址存儲單元。 輸入…

    Linux干貨 2017-07-15
  • Linux的哲學思想

    Linux的哲學思想 一切皆文件 不管是普通的文件、目錄,還是跟硬件相關的字符設備、塊設備、套接字等在Linux中都被當作文件來進行統一的操作管理。 單個程序完成簡單的功能,復雜的功能由多個程序組合而成 單個程序只實現簡單功能,保證了其高效運行,而復雜功能由多個簡單程序組合而成,也能保證一定的高效性。 盡量避免與用戶交互 程序從啟動開始到結束不需要用戶參與,…

    Linux干貨 2017-07-02
  • 磁盤、文件系統管理

    linux磁盤、文件系統管理 硬盤:機械硬盤、固態硬盤     計算硬盤速度:IoPs:(Io  per  second ) 每秒20次 機械硬盤:     track:磁道     平均尋道時間  &nbsp…

    Linux干貨 2016-08-25
欧美性久久久久