Nginx的工作原理和配置詳解
一、Nginx簡介
Nginx (pronounced engine-x) is a free, open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server. Igor Sysoevstarted development of Nginx in 2002, with the first public release in 2004. Nginx now hosts nearly12.18% (22.2M) of active sites across all domains. Nginx is known for its high performance, stability, rich feature set, simple configuration, and low resource consumption.
Nginx是一款免費的、開源的、高效能的HTTP伺服器、反向代理伺服器、郵件代理伺服器。是由俄羅斯人Igor Sysoev人在2002研發成功的,2004年釋出第一版公共穩定版。到目前為止,Ngnix市場所佔額是12.18%。Nginx以它的高效能,穩定性,豐富特性(第三方模組的支援),配置簡單和較低的資源消耗著稱。
Nginx的工作流程:
Nginx會按需同時執行多個程式:一個主程式(master)和幾個工作程式(worker),配置了快取時還會有快取載入器程式(cache loader)和快取管理器程式(cache manager)等。所有程式均是僅含有一個執行緒,並主要通過“共享記憶體”的機制實現程式間通訊。主程式以root使用者身份執行,而worker、cache loader和cache manager均應以非特權使用者身份執行。
主程式主要完成如下工作:
1. 讀取並驗正配置資訊;
2. 建立、繫結及關閉套接字;
3. 啟動、終止及維護worker程式的個數;
4. 無須中止服務而重新配置工作特性;
5. 控制非中斷式程式升級,啟用新的二進位制程式並在需要時回滾至老版本;
6. 重新開啟日誌檔案,實現日誌滾動;
7. 編譯嵌入式perl指令碼;
worker程式主要完成的任務包括:
1. 接收、傳入並處理來自客戶端的連線;
2. 提供反向代理及過濾功能;
3. nginx任何能完成的其它任務;
cache loader程式主要完成的任務包括:
1. 檢查快取儲存中的快取物件;
2. 使用快取後設資料建立記憶體資料庫;
cache manager程式的主要任務:
1. 快取的失效及過期檢驗;
具體,更詳細的內容參照官網:nginx.org
二、安裝配置nginx
安裝:
說明: 這裡所使用的作業系統型別,CentOS 6.5
rpm方式裝:
下載官方製作好的rpm包,直接安裝。下載地址:http://nginx.org/packages/
原始碼安裝:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
1、解決依賴關係 # yum groupinstall "Development Tools" "Server Platform Deveopment" -y yum install openssl-devel pcre-devel -y
2、安裝 首先新增使用者nginx,實現以之執行nginx服務程式: # groupadd -r nginx # useradd -r -g nginx nginx 接著開始編譯和安裝: # ./configure --prefix= /usr/local/nginx -----> Nginx的安裝目錄
--error-log-path= /data/applogs/nginx/error .log -----> Nginx的錯誤日誌
--http-log-path= /data/applogs/nginx/access .log -----> Ngnix的訪問日誌
--pid-path= /var/run/nginx/nginx .pid -----> Nginx的pid檔案
--lock-path= /var/lock/nginx .lock -----> Nginx鎖檔案位置
--user=nginx -----> Nginx程式執行時的使用者
--group=nginx -----> Nginx程式執行時的組
--with-http_ssl_module -----> 新增 SSL 模組
--with-http_flv_module -----> 新增 flv 格式的模組
--with-http_stub_status_module -----> 新增 stub_status 模組
--with-http_gzip_static_module -----> 新增 gzip_static 模組
--http-client-body-temp-path= /usr/local/nginx/client/ -----> 客戶端實體存放位置
--http-proxy-temp-path= /usr/local/nginx/proxy/ -----> 代理配置目錄
--http-fastcgi-temp-path= /usr/local/nginx/fcgi/ -----> fastcgi位置 (php)
--http-uwsgi-temp-path= /usr/local/nginx/uwsgi -----> uwsgi位置 (python)
--http-scgi-temp-path= /usr/local/nginx/scgi -----> scgi配置的位置
--with-pcre -----> 支援pcre
# make && make install |
配置:
說明:這裡使用的安裝方式是rmp安裝方式。
安裝的節點:172.16.10.77
配置檔案簡單說明:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
Nginx的配置有著幾個不同的上下文:main、http、server、upstream和location(還有實現郵件服務 反向代理的mail)。 配置語法的格式和定義方式遵循所謂的C風格,因此支援巢狀,還有著邏輯清晰並易於建立、閱讀和維 護等優勢。 Nginx的程式碼是由一個核心和一系列的模組組成, 核心主要用於提供Web Server的基本功能,以及Web 和Mail反向代理的功能;
還用於啟用網路協議,建立必要的執行時環境以及確保不同的模組之間平滑地進行互動。不過,大多 跟協議相關的功能和某應用特有的功能都是由nginx的模組實現的。
這些功能模組大致可以分為事件模組、階段性處理器、輸出過濾器、變數處理器、協議、upstream和 負載均衡幾個類別,這些共同組成了nginx的http功能。
事件模組主要用於提供OS獨立的(不同作業系統的事件機制有所不同)事件通知機制如kqueue或epoll等 。
協議模組則負責實現nginx通過http、tls /ssl 、smtp、pop3以及imap與對應的客戶端建立會話。
在nginx內部,程式間的通訊是通過模組的pipeline或chain實現的; 換句話說,每一個功能或操作都由一個模組來實現。例如,壓縮、通過FastCGI或uwsgi協議與 upstream伺服器通訊,以及與memcached建立會話等。
|
1、nginx提供web服務
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
[root@localhost nginx] # cat nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error .log warn;
pid /var/run/nginx .pid;
events { use epoll;
worker_connections 1024;
} http { include /etc/nginx/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 /var/log/nginx/access .log main;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
add_header X-Via $server_addr;
server_name www.example.com;
location / {
root /usr/share/nginx/html ;
index index.html index.htm;
rewrite ^ /imgs/ (.*)$ /images/ $1 break ; # 重寫url
}
location /status {
stub_status on;
}
# 設定使用者認證,認證檔案需要使用htpasswd命令生成
location /admin {
index index.html;
root /usr/share/nginx/html ;
auth_basic "admin pass" ;
auth_basic_user_file /etc/nginx/htpasswd ;
}
location /bbs {
proxy_pass http: //172 .16.10.16/;
}
}
include /etc/nginx/conf .d/*.conf;
} |
結果示例:
2、nginx反向代理、提供快取
Nginx的反向代理是由proxy模組實現的。結合upstream模組實現簡單的負載均衡。
詳細資訊參考:http://wiki.nginx.org/Modules
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
[root@localhost nginx] # cat nginx.conf
user nginx; worker_processes 1; error_log /var/log/nginx/error .log warn;
pid /var/run/nginx .pid;
events { use epoll;
worker_connections 1024;
} http { include /etc/nginx/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 /var/log/nginx/access .log main;
sendfile on;
keepalive_timeout 65;
proxy_cache_path /data/cache levels=1:2 keys_zone=web:10m max_size=512m;
upstream web {
#ip_hash;
server 172.16.10.11:80;
server 172.16.10.9:80;
server 172.16.10.16:80 weight=1;
server 172.16.10.77:8080 backup;
}
server {
listen 80;
add_header X-Via $server_addr;
add_header X-Cache-Status $upstream_cache_status;
server_name www.example.com;
location / {
root /usr/share/nginx/html ;
proxy_pass http: //web ;
proxy_cache web;
proxy_cache_valid 200 1d;
proxy_cache_valid 301 302 10m;
proxy_cache_valid any 1m;
index index.html index.htm;
if ($request_method ~* "PUT" ) {
proxy_pass http: //172 .16.10.11;
break ;
}
}
}
include /etc/nginx/conf .d/*.conf;
} |
結果展示:
如果沒有快取資料,會根據排程演算法排程到後端的real server.
4、nginx的FastCgi工作模式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# 在對應的server段新增以下,就可實現 fastcgi 代理 location ~ .php$ { root /php ;
fastcgi_pass 172.16.10.11:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts $fastcgi_script_name;
include fastcgi_params;
} [root@localhost nginx] # cat fastcgi_params
fastcgi_param GATEWAY_INTERFACE CGI /1 .1;
fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; # 在172.16.10.11上配置好,php-fpm環境 yum install php-fpm
配置監聽埠: /etc/php-fpm .d /www .conf
listen = 172.16.10.11:9000 允許訪問埠:註釋表示any ;listen.allowed_clients = 127.0.0.1 mkdir /php
vim /php/index .php
<?php phpinfo(); ?> 啟動php-fpm |
結果展示:
相關文章
- nginx執行請求的工作原理之location匹配詳解Nginx
- nginx配置詳解Nginx
- 交換機的作用、功能和工作原理詳解
- Nginx的配置檔案詳解Nginx
- Nginx 工作原理和優化、漏洞Nginx優化
- Nginx工作原理Nginx
- Nginx Gzip模組啟用和配置指令詳解Nginx
- Nginx日誌配置詳解Nginx
- nginx配置檔案詳解Nginx
- nginx 詳解 – 詳細配置說明Nginx
- nginx 詳解 - 詳細配置說明Nginx
- SpringMVC工作原理詳解SpringMVC
- Nginx location 和 proxy_pass路徑配置詳解Nginx
- 詳解爬蟲與RPA的工作原理和差異爬蟲
- Nginx如何配置HTTPS詳解NginxHTTP
- Nginx location配置詳細解釋Nginx
- Nginx安裝及配置詳解Nginx
- Nginx的超時timeout配置詳解Nginx
- Ingress-nginx工作原理和實踐Nginx
- Nginx 配置檔案 nginx.conf 詳解Nginx
- 代理伺服器的工作原理詳解伺服器
- Nginx 配置檔案 nginx.conf 中文詳解Nginx
- /etc/nginx/nginx.conf配置檔案詳解Nginx
- Nginx配置檔案nginx.conf中文詳解Nginx
- Nginx 配置檔案引數詳解Nginx
- Nginx+Php-fpm 執行原理詳解NginxPHP
- keepalived(一)原理介紹和配置檔案詳解
- 附:Nginx配置檔案nginx.conf中文詳解Nginx
- Nginx配置檔案nginx.conf中文詳解(轉)Nginx
- 詳解 nginx php-fpm 工作機制NginxPHP
- Nginx實現高速併發處理的原理詳解Nginx
- 詳解Nginx如何配置Web伺服器NginxWeb伺服器
- Nginx URL重寫規則配置詳解Nginx
- nginx.conf 配置檔案詳解Nginx
- 詳解nginx伺服器中的安全配置的方法Nginx伺服器
- 工作流引擎詳解!工作流開源框架ACtiviti的詳細配置以及安裝和使用框架
- XtraBackup工具詳解 Part 3 XtraBackup工作原理
- mysql_proxy工作原理和配置引數MySql