07.Nginx Web快速入門php
07.Nginx Web快速入門css
7.Nginx經常使用模塊html
7.1 Nginx目錄索引node
7.1.1 配置語法nginx
7.1.2 配置示例git
7.1.3 模擬企業內網倉庫web
7.2 Nginx訪問控制sql
7.2.1 配置語法json
7.2.2 配置示例centos
7.3 Nginx基礎認證
7.3.1 配置語法
7.3.2 配置示例
7.4 Nginx限流限速
7.4.1 爲何要限速
7.4.2 限速應用場景
7.4.3 請求頻率限速原理
7.4.4 限制請求併發數
7.4.5 限制併發鏈接數
7.4.6 限制下載速度
7.4.7 綜合場景實踐
7.5 Nginx狀態監控
7.5.1 配置語法
7.5.2 配置示例
7.5.3 頁面狀態
7.6 Nginx資源緩存
7.6.1 瀏覽器無緩存
7.6.2 瀏覽器有緩存
7.6.3 緩存過時校驗
7.6.4 緩存配置語法
7.6.5 資源緩存配置場景
7.7 Nginx資源壓縮
7.7.1 配置語法
7.7.2 圖片壓縮案例
7.7.3 文件壓縮案例
7.8 Nginx Location
7.8.1 什麼是Location
7.8.2 Location語法示例
7.8.3 Location優先級示例
7.8.4 Location 應用場景
7.8.5 Location @重定向
7.9 Nginx 日誌模塊
7.9.1 Nginx日誌格式
7.9.2 Nginx訪問日誌
7.9.3 Nginx錯誤日誌
7.9.4 Nginx日誌過濾
7.Nginx經常使用模塊
7.1 Nginx目錄索引
當ngx_http_index_module 模塊找不到索引文件時,一般會將請求傳遞給ngx_http_autoindex_module 模
塊。
ngx_http_autoindex_module 模塊處理以斜槓字符('/')
結尾的請求,並生成目錄列表。
7.1.1 配置語法
#啓用或禁用目錄列表輸出,on開啓,off關閉。
Syntax: autoindex on | off;
Default: autoindex off;
Context: http, server, location
#指定是否應在目錄列表中輸出確切的文件大小,on顯示字節,off顯示大概單位。
Syntax: autoindex_exact_size on | off;
Default: autoindex_exact_size on;
Context: http, server, location
#指定目錄列表中的時間是應以本地時區仍是UTC輸出。on本地時區,off UTC時間。
Syntax: autoindex_localtime on | off;
Default: autoindex_localtime off;
Context: http, server, location
7.1.2 配置示例
[root@oldxu ~]# cat
/etc/nginx/conf.d/mirror.oldxu.net.conf
server {
listen 80;
server_name mirror.oldxu.net;
charset utf-8; #設定字符集,防止中文字
符亂碼顯示。
autoindex on;
autoindex_exact_size off; autoindex_locatime on;
location / {
root /code/;
}
}
7.1.3 模擬企業內網倉庫
[root@oldxu mirror]# cat /etc/nginx/conf.d/mirror.oldxu.net.conf server {
listen 80;
server_name mirror.oldxu.net; charset utf-8;
root /mirror;
location / {
index index.html;
}
#提供yum倉庫目錄
location /repo {
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
}
}
#使用rsync同步
[root@oldxu mirror]# rsync -avz rsync://rsync.mirrors.ustc.edu.cn/repo/cent os/ /mirror/repo/
#將該目錄建立爲倉庫目錄
#createrepo /mirror/repo
7.2 Nginx訪問控制
ngx_http_access_module 模塊容許限制對某些客戶端
地址的訪問。
7.2.1 配置語法
#容許配置語法
Syntax: allow address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except
#拒絕配置語法
Syntax: deny address | CIDR | unix: | all;
Default: —
Context: http, server, location, limit_except
7.2.2 配置示例
只容許指定的來源IP能訪問/centos, 其它網段所有拒絕。
[root@oldxu ~]# cat
/etc/nginx/conf.d/mirror.oldxu.net.conf
server {
listen 80;
server_name mirror.oldxu.net;
charset utf-8; #設定字符集,防止中文字
符亂碼顯示。
autoindex on;
autoindex_exact_size off; autoindex_locatime on;
location / {
index index.html;
}
location /centos {
allow 127.0.0.1;
allow 10.0.0.1/32;
deny all;
#容許地址或地址段
#拒絕全部人
}
}
拒絕指定的IP訪問該網站的/centos ,其餘IP所有容許訪問。
[root@oldxu ~]# cat
/etc/nginx/conf.d/mirror.oldxu.net.conf
server {
listen 80;
server_name mirror.oldxu.net;
charset utf-8; #設定字符集,防止中文字
符亂碼顯示。
autoindex on;
autoindex_exact_size off; autoindex_locatime on;
location / {
index index.html;
}
location /centos {
deny 10.0.0.1/32; #拒絕指定的地址或
地址段
allow all; #容許全部的地址
}
}
:deny allow
注意 和 的順序是有影響的
默認狀況下,從第一條規則進行匹配
若是匹配成功,則不繼續匹配下面的內容。
若是匹配不成功,則繼續往下尋找能匹配成功的內容。
7.3 Nginx基礎認證
ngx_http_auth_basic_module 模塊容許使用HTTP 基
自己份驗證,驗證用戶名和密碼來限制對資源的訪問。
7.3.1 配置語法
#使用HTTP基自己份驗證協議啓用用戶名和密碼驗證。 Syntax: auth_basic string| off; Default: auth_basic off;
Context: http, server, location, limit_except
#指定保存用戶名和密碼的文件
Syntax: auth_basic_user_file file;
Default: -
Context: http, server, location, limit_except
指定保存用戶名和密碼的文件,格式以下:
#可使用htpasswd程序或"openssl passwd"命令生成對應的密碼;
name1:passwd1
name2:passwd2
#使用htpaaswd建立新的密碼文件, -c建立新文件 -b容許命令行輸入密碼
[root@oldxu ~]# yum install httpd-tools [root@oldxu ~]# htpasswd -b -c /etc/nginx/auth_conf xuliangwei 123456
7.3.2 配置示例
[root@oldxu ~]# cat
/etc/nginx/conf.d/mirror.oldxu.net.conf
server {
listen 80;
server_name mirror.oldxu.net;
charset utf-8; #設定字符集,防止中文字
符亂碼顯示。
autoindex on;
autoindex_exact_size off; autoindex_locatime on;
location / {
index index.html;
}
location /centos {
auth_basic "Auth access Blog Input your Passwd!";
auth_basic_user_file
/etc/nginx/auth_conf;
}
}
7.4 Nginx限流限速
7.4.1 爲何要限速
限制某個用戶在必定時間內可以產生的Http請求。或者說限制某個用戶的下載速度。
503:過載保護,
7.4.2 限速應用場景
下載限速:限制用戶下載資源的速度;
ngx_http_core_module
請求限制:限制用戶單位時間內所產生的Http請求數;
ngx_http_limit_req_module
鏈接限制:限制同一時間的鏈接數,及併發數限制;
ngx_http_limit_conn_module
7.4.3 請求頻率限速原理
水(請求)從上方倒入水桶,從水桶下方流出(被處理);
若是說水(請求)流入的過快,水桶流出(被處理)的過慢,來不及流出的水存在水桶中(緩存),而後以固定速率流出,水桶滿後則水溢出(丟棄)。
簡單來講就是:當處理速度,達不到請求的速度,則會將請求放置緩存,而後持續處理。當緩存被沾滿,若是還有大量的請求,則會被丟棄。
7.4.4 限制請求併發數
1.
指令
Syntax: limit_req_zone key zone=name:size
rate=rate;
Default: —
Context: http
Syntax: limit_req zone number [burst=number] [nodelay]; Default: —
Context: http, server, location
#http標籤段定義請求限制, rate限制速率,限制一秒鐘最多一個IP請求
$remote_addr; $binary_remote_addr http {
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
}
server {
listen 80;
server_name mirror.oldxu.net;
#請求超過1r/s,剩下的將被延遲處理,請求數超過burst定義的數量,則返回503
limit_req zone=req_one burst=3 nodelay; location / {
root /code; index index.html;
}
}
limit_req_zone $binary_remote_addr zone=req_one:10m rate=1r/s;
#第一個參數:$binary_remote_addr表示經過這個標識來作限制,限制同一客戶端ip地址。
#第二個參數:zone=req_one:10m表示生成一個大小爲10M,名爲req_one的內存區域,用來存儲訪問的頻次信息。
#第三個參數:rate=1r/s表示容許相同標識的客戶端的訪問頻次,這裏限制的是每秒1次。
limit_req zone=req_one burst=3 nodelay;
#第一個參數:zone=req_one 設置使用哪一個配置區域來作限制,與上面limit_req_zone 裏的name對應。
#第二個參數:burst=3,設置一個大小爲3的緩衝區,當有大量請求過來時,超過了訪問頻次限制的請求能夠先放到這個緩衝區內。
#第三個參數:nodelay,超過訪問頻次而且緩衝區也滿了的時候,則會返回503,若是沒有設置,則全部請求會等待排隊。
7.4.5 限制併發鏈接數
1.
指令
Syntax: limit_conn_zone key zone=name:size; Default: —
Context: http
Syntax: limit_conn zone number;
Default: —
Context: http, server, location
2.
設置共享內存區域和給定鍵值的最大容許個鏈接數。
503
超過此限制時,服務器將返回 錯誤以回覆請求
[root@oldxu ~]# cat
/etc/nginx/conf.d/mirror.oldxu.net.conf
limit_conn_zone $binary_remote_addr
zone=conn_od:10m;
server {
listen 80;
server_name mirror.oldxu.net;
root /code;
charset utf8;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
limit_conn conn_od 2;
location / {
index index.html;
}
}
7.4.6 限制下載速度
[root@oldxu ~]# cat
/etc/nginx/conf.d/mirror.oldxu.net.conf
server {
listen 80;
server_name mirror.oldxu.net;
root /code;
charset utf8;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
limit_rate_after 100m; #達到100m開始
限速
limit_rate 100k;
location / {
index index.html;
}
}
7.4.7 綜合場景實踐
一、限制web服務器請求數處理爲1秒一個,觸發值爲
五、限制用戶僅可同時下載一個文件。
二、當下載超過100M 則限制下載速度爲500k
三、若是同時下載超過2個視頻,則返回提示 "請聯繫 oldxu 進行會員充值" | 跳轉到其餘頁面;
[root@oldxu conf.d]# cat
mirror.oldxu.net.conf
limit_req_zone $binary_remote_addr
zone=req_od:10m rate=1r/s;
limit_conn_zone $binary_remote_addr
zone=conn_od:10m;
server {
listen 80;
server_name mirror.oldxu.net;
root /code;
charset utf8;
autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
limit_req zone=req_od burst=5 nodelay; limit_conn conn_od 1; limit_rate_after 100m; limit_rate 500k;
error_page 503 @errpage; location @errpage {
default_type text/html;
return 200 'Oldxu提示-->請聯繫QQ:
552408925 進行會員充值';
}
location / {
index index.html;
}
}
7.5 Nginx狀態監控
ngx_http_stub_status_module 模塊提供對基本狀態
信息的訪問。
默認狀況下不集成該模塊,須要使用 --with-http_stub_status_module集成。
7.5.1 配置語法
Syntax: stub_status;
Default: —
Context: server, location
7.5.2 配置示例
[root@oldxu ~]# cat /etc/nginx/conf.d/module.conf server {
listen 80;
server_name mirror.oldxu.net; access_log off;
location /nginx_status { stub_status;
}
}
7.5.3 頁面狀態
此配置建立一個簡單的網頁,其基本狀態數據可能以下所示:
[root@oldxu ~]# curl -
HHost:mirror.oldxu.net
Active connections: 291
server accepts handled requests
16630948 16630948 31070465
Reading: 6 Writing: 179 Waiting: 106
#Active connections:當前活躍鏈接數,包括Waiting等待鏈接數。
#accepts: 已接收的總TCP鏈接數量。
#handled: 已處理的TCP鏈接數量。
#requests: 當前總http請求數量。
#Reading: 當前讀取的請求頭數量。
#Writing: 當前響應的請求頭數量。
#Waiting: 當前等待請求的空閒客戶端鏈接數。
如何理解Reading、Writing、Waiting
假設如今有兩條船分別爲C 、S 。C船須要 S船的1個物品,那麼此時C船就要給S船發送一個消息。
一、S 船收到這個消息時就是reading
二、S 船將物資發送給C 船,這個時候就是writing
三、若是C 船須要S 船不少個物品,那麼須要C 船和
S船創建起一個物資傳送管道,不斷的傳送物資。這個管道創建起來的時候,就是waiting 狀態了。
7.6 Nginx資源緩存
瀏覽器緩存設置用於提升網站性能,尤爲是新聞網站,圖片一旦發佈,改動的多是很是小的。因此咱們但願可否用戶訪問一次後,圖片緩存在用戶的瀏覽器長時間緩存。
瀏覽器是有本身的緩存機制,它是基於HTTP 協議緩存機制來實現的,在HTTP 協議中有不少頭(Headers)信息,那麼實現瀏覽器的緩存就須要依賴特殊的頭信息來與服務器進行特殊的驗證,如: Expires
(http/1.0) ;Cache-control (http/1.1) Nginx
靜態資源緩存參考
7.6.1 瀏覽器無緩存
7.6.2 瀏覽器有緩存
7.6.3 緩存過時校驗
瀏覽器緩存過時校驗檢查機制,說明以下:
1.瀏覽器請求服務器會先進行Expires、Cache-
Control的檢查,檢查緩存是否過時,若是沒有過時
則直接從緩存文件中讀取。
2.若是緩存過時,首先檢查是否存在etag ,若是存在則會客戶端會向web 服務器請求if-None-Match ,與 etag 值進行比對,由服務器決策返回200仍是304。
3.若是etag 不存在,則進行last-Modified 檢查,客戶端會向web 服務器請求If-Modified-Since ,與 last-Modified 進行比對,由服務器決策返回200還
是304。
7.6.4 緩存配置語法
#做用: 添加Cache-Control Expires頭
Syntax: expires [modified] time; expires epoch | max | off; Default: expires off;
Context: http, server, location, if in location
7.6.5 資源緩存配置場景
server {
listen 80;
server_name static.oldxu.net;
location ~ .*.(jpg|gif|png)$ { expires 7d;
}
#若是開發代碼沒有正式上線時,但願靜態文件不被緩
存
location ~ .*.
(css|js|swf|json|mp4|htm|html)$ {
add_header Cache-Control no-store; add_header Pragma no-cache;
}
}
7.7 Nginx資源壓縮
Nginx 將發送至客戶端以前的數據進行壓縮,而後傳輸,這可以有效地節約帶寬,並提升響應速度;
圖片:不高;
文本:比較高;
7.7.1 配置語法
#一、啓用或關閉gzip壓縮
Syntax: gzip on | off;
Default: gzip off;
Context: http, server, location, if in location
#二、gzip支持的壓縮類型
Syntax: gzip_types mime-type ...;
Default: gzip_types text/html;
Context: http, server, location
#三、gzip壓縮比率,壓縮率越高,CPU消耗越大 9 Syntax: gzip_comp_level level; Default: gzip_comp_level 1;
Context: http, server, location
#四、gzip壓縮的最小文件,小於設置的值文件將不會被壓縮(由"Content-Length"響應頭字段肯定)
Syntax: gzip_min_length length;
Default: gzip_min_length 20;
Context: http, server, location
#五、gzip壓縮支持的協議版本
Syntax: gzip_http_version 1.0 | 1.1;
Default: gzip_http_version 1.1;
Context: http, server, location
#六、啓用壓縮,是否在響應報文首部插入"Vary: Accept-Encoding"
Syntax: gzip_vary on | off;
Default: gzip_vary off;
Context: http, server, location
7.7.2 圖片壓縮案例
[root@oldxu conf.d]# mkdir -p /code/images [root@oldxu conf.d]# cat static.oldxu.net.conf
server {
listen 80;
server_name static.oldxu.net; root /code/images;
location ~ ..(jpg|gif|png)$ {
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_min_length 10k;
gzip_types image/jpeg image/gif image/png;
gzip_vary on;
}
}
7.7.3 文件壓縮案例
[root@oldxu conf.d]# mkdir -p /code/doc [root@oldxu conf.d]# wget xx.log [root@oldxu conf.d]# cat static_server.conf server {
listen 80;
server_name static.oldxu.net; root /code/doc;
location ~ .*.(txt|pdf)$ {
gzip on;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_min_length 1k;
gzip_types text/plain
application/pdf;
gzip_vary on;
}
}
7.8 Nginx Location
7.8.1 什麼是Location
Location 用來控制訪問網站的uri 路徑;
7.8.2 Location語法示例
location [ = | ~ | ~* | ^~ ] uri { ... } location @name { ... } /api/xxx/dadas/dsadsa /apiv1/dsa/dsaxx/sadsa/
location uri 添加 / 和不添加 / 的區別?
7.8.3 Location優先級示例
[root@oldxu conf.d]# cat location.oldxu.net.conf server {
listen 80;
server_name location.oldxu.net;
location = / {
default_type text/html;
return 200 'location = /';
}
location / {
default_type text/html; return 200 'location /';
}
location /documents/ { default_type text/html;
return 200 'location /documents/';
}
location ^~ /images/ { default_type text/html;
return 200 'location ^~ /images/';
}
location ~* .(gif|jpg|jpeg)$ {
default_type text/html; return 200 'location ~* .
(gif|jpg|jpeg)';
}
}
#測試結果以下(建議是curl測試)
#1.請求 http://location.oldxu.net/
會被 location =/ 匹配
#2.請求 http://location.oldxu.net/index.html
會被 location / #3.請求
匹配
http://location.oldxu.net/documents/1.html 會被 location /documents/ 匹配
#4.請求
http://location.oldxu.net/images/1.gif
會被
location ^~ /images/
匹配
#5.請求
http://location.oldxu.net/documents/1.jpg 會被 location ~* .(gif|jpg|jpeg)$匹配
7.8.4 Location 應用場景
[root@oldxu conf.d]# cat location2.oldxu.net.conf server {
listen 80;
server_name location2.oldxu.net;
#通用匹配,任何請求都會匹配到 location / {
root html;
index index.html;
}
#精準匹配,必須請求的uri是/nginx_status location = /nginx_status {
stub_status;
}
#嚴格區分大小寫,匹配以.php結尾的都走這個
locationinfo.php location ~ .php$ {
default_type text/html;
return 200 'php訪問成功';
}
#嚴格區分大小寫,匹配以.jsp結尾的都走這個 location
location ~ .jsp$ { default_type text/html; return 200 'jsp訪問成功';
}
#不區分大小寫匹配,只要用戶訪
問.jpg,gif,png,js,css 都走這條location location ~* .(jpg|gif|png|js|css)$ {
#return 403; expires 3d;
}
#不區分大小寫匹配 location ~* .
(sql|bak|tgz|tar.gz|.git)$ { deny all;
}
}
7.8.5 Location @重定向
location @name 這樣的location 不用於常規請求
處理,而是用於請求重定
[root@oldxu conf.d]# cat location3.oldxu.net.conf server {
listen 80;
server_name location3.oldxu.net; root /code;
location / {
index index.html;
}
#若是出現異常,則從新定向到@error_404這個location上
error_page 404 @error_404; location @error_404 {
default_type text/html;
return 200 '你多是不當心走丟了。';
}
}
7.9 Nginx 日誌模塊
Nginx 的日誌記錄很是靈活,能夠經過log_format 來定義格式。
7.9.1 Nginx日誌格式
log_format 定義日誌格式語法
Syntax: log_format name
[escape=default|json] string ...; Default: log_format combined "..."; Context: http
#默認Nginx定義語法格式以下
log_format main '$remote_addr -
$remote_user [$time_local] "$request" ' '$status
$body_bytes_sent "$http_referer" '
'"$http_user_agent"
"$http_x_forwarded_for"';
log_format test '$remote_addr -
$remote_user [$time_local] "$request" ' '$status';
#access_log
/var/log/nginx/access.log main;
access_log
/var/log/nginx/access_test.log test;
3.Nginx
日誌格式中經常使用的變量
$remote_addr # 記錄客戶端IP地址
$remote_user # 記錄客戶端用戶名
$time_local # 記錄通用的本地時間
$time_iso8601 # 記錄ISO8601標準格式下的
本地時間
$request
http協議
$status
誤信息)
$body_bytes_sent
不包括響應頭的大小
$bytes_sent $msec
度是毫秒。
$http_referer
的
$http_user_agent # 記錄客戶端瀏覽器相關信息
$http_x_forwarded_for #記錄客戶端IP地址
$request_length # 請求的長度(包括請求行,
請求頭和請求正文)。
$request_time # 請求花費的時間,單位爲秒,
精度毫秒
#注:若是Nginx位於負載均衡器,nginx反向代理以後,web服務器沒法直接獲取到客 戶端真實的IP地址。
#$remote_addr獲取的是反向代理的IP地址。 反向代理服務器在轉發請求的http頭信息中,
#增長X-Forwarded-For信息,用來記錄客戶端IP地址和客戶端請求的服務器地址。
7.9.2 Nginx訪問日誌
1.web
服務器的訪問日誌是很是重要的,咱們能夠經過訪
問日誌來分析用戶的訪問狀況,也能夠經過訪問日誌發
access_log
現一些異常訪問。 日誌配置語法。
Syntax: access_log path [format
[buffer=size] [gzip[=level]] [flush=time]
[if=condition]];
access_log off;
Default: access_log logs/access.log combined;
Context: http, server, location, if in location, limit_except
http {
access_log /var/log/nginx/access.log main;
server {
}
server {
access_log
/var/log/nginx/test.oldxu.net.log main;
location / {
}
location /admin {
}
}
}
2.Nginx
訪問日誌配置示例
server {
listen 80;
server_name log.oldxu.net;
#將當前的server網站的訪問日誌記錄至對應的目錄,使用main格式
access_log /var/log/nginx/log.oldxu.net.log main;
location / { root /code; index index.html;
}
}
7.9.3 Nginx錯誤日誌
Nginx 常見的錯誤日誌級別有debug | info | notice
| warn | error | crit | alert | emerg級別越高
記錄的信息越少,若是不定義,默認級別爲warn ,它能夠配置在main、http、server、location 段裏
2.Nginx
錯誤日誌示例
error_log /var/log/nginx/error.log warn;
#關閉錯誤日誌
error_log /dev/null;
7.9.4 Nginx日誌過濾
一個網站會包含不少元素,尤爲是有大量的images、js、css等靜態資源。這樣的請求能夠不用記錄日誌。
#請求favicon.ico時,不記錄日誌 location /favicon.ico {
access_log off;
return 200;
}
#或,當有人訪問gif、png等資源時,將日誌丟入空 location ~ ..(gif|jpg|png|css|js)$ {
access_log /dev/null;
}