nginx應(yīng)用服務(wù)器

1.ngnix介紹

ngnix www服務(wù)軟件 俄羅斯人開發(fā) 開源 性能很高 本身是一款靜態(tài)WWW軟件 靜態(tài)小文件 支持高并發(fā),同時(shí)占用的資源很少媳瞪。

2.最大特點(diǎn)

(1)靜態(tài)小文件(1M)巢音,支持高并發(fā)飒责,同時(shí)占用的資源很少。3W并發(fā),10個(gè)進(jìn)程恬吕,內(nèi)存150M.

(2)nginx服務(wù)端支持的平臺(tái):unix蜂林、linux遥诉、windows都可以.

(3)配置簡(jiǎn)單/靈活、輕量

(4)高并發(fā)(靜態(tài)小文件)噪叙,靜態(tài)幾萬(wàn)的并發(fā)

(5)占用資源少矮锈。2W并發(fā) 開10個(gè)線程服務(wù),內(nèi)存消耗幾百M(fèi)

(6)功能種類比較多构眯,每一個(gè)功能都不是特別強(qiáng)

(7)支持epoll模型愕难。使得nginx可以支持高并發(fā)早龟!apache select模型

(8)nginx可以配合動(dòng)態(tài)服務(wù)

(9)利用nginx可以對(duì)IP限速惫霸,可以限制連接數(shù)。

它所具備的其他WWW服務(wù)特性如下:

支持基于名字葱弟、端口以及IP的多虛擬機(jī)主機(jī)站點(diǎn);

支持rewrite模塊,支持URI重寫及正則表達(dá)式匹配;

支持基于客戶端IP地址和HTTP基本認(rèn)證的訪問(wèn)控制;

支持http響應(yīng)速率限制;

支持同一IP地址的并發(fā)連接或請(qǐng)求數(shù)限制壹店。

3.Nginx的應(yīng)用場(chǎng)合:

(1)提供靜態(tài)服務(wù)(圖片,視頻服務(wù))芝加,另一個(gè)lighttpd硅卢。并發(fā):幾萬(wàn)并發(fā)。

html,js,css,.flv,jpg,gif等藏杖。類似lighttpd将塑。

(2)提供動(dòng)態(tài)服務(wù),nginx+fastcgi的方式運(yùn)行php蝌麸,jsp点寥。動(dòng)態(tài)并發(fā)500-1500.

apache+php,lighttpd+fcgi php

(3)提供反向代理(proxy)服務(wù),或者稱為負(fù)載均衡来吩。日PV2000W以下敢辩,都可以直接用nginx做代理。

haproxy F5 A10

(4)緩存服務(wù).類似Squid弟疆,varnish

4.nginx主要應(yīng)用場(chǎng)景:

1.web服務(wù)器(首選)

靜態(tài)文件,nginx首選

動(dòng)態(tài)文件,配合fastcgi支持php

2.反向代理(負(fù)載均衡),1000-2000W PV,并發(fā)6000

3.緩存(不是很多)

注:nginx之所以超過(guò)apache的原因是nginx采用epoll模型戚长,而apache采用的是select模型。

5.nginx虛擬主機(jī):

一個(gè)server標(biāo)簽就是一個(gè)虛擬主機(jī)怠苔。

1.基于域名的虛擬主機(jī).通過(guò)域名來(lái)區(qū)分虛擬主機(jī)==>應(yīng)用:外部網(wǎng)站

2.基于端口的虛擬主機(jī).通過(guò)端口來(lái)區(qū)分虛擬主機(jī)==>應(yīng)用:公司內(nèi)部網(wǎng)站同廉,網(wǎng)站的后臺(tái)

3.基于IP的虛擬主機(jī)。幾乎不用。不支持ifxconfig別名恤溶,配置文件可以乓诽。

6.nginx的安裝:

(1)HTTP rewrite module requires the PCRE library

PCRE == perl 兼容表達(dá)式

操作命令:

yum install pcre pcre-devel -y

rpm -qa pcre pcre-devel

(2)SSL module requires the OPEN SSL library

操作命令:

yum install openssl-devel -y

rpm -qa openssl-devel

(3)install nginx

tar -zxf ngnix-1.6.2

cd ngnix-1.6.2

. /configure --prefix=/application/ngnix-1.6.2 --user=ngnix --group=ngnix --with-http_ssl_module --with-http_stub_status_module

make && make install

cd ../

ln -s /application/nginx-1.6.2/ /application/nginx

(4)啟動(dòng)nginx

/application/nginx/sbin/nginx

(5)驗(yàn)證是否安裝成功

netstat -lntup|grep 80

lsof -i :80

7.nginx配置詳解

#user? nobody;

worker_processes? 1;====> worker進(jìn)程的數(shù)量

#error_log? logs/error.log;

#error_log? logs/error.log? notice;

#error_log? logs/error.log? info;

#pid? ? ? ? logs/nginx.pid;

events {====>事件區(qū)塊開始

worker_connections? 1024;====>每個(gè)worker進(jìn)程支持的最大連接數(shù)

}

http {====>http區(qū)塊開始

include? ? ? mime.types;====>nginx支持的媒體類型庫(kù)文件包含

default_type? application/octet-stream;====>默認(rèn)的媒體類型

#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? ? ? ? on;====>開啟高級(jí)傳輸模式

#tcp_nopush? ? on;

#keepalive_timeout? 0;

keepalive_timeout? 65; ====>連接超時(shí)時(shí)間

#gzip? on;

server {====>第一個(gè)server區(qū)塊開始 表示一個(gè)虛擬主機(jī)

listen? ? ? 80;

server_name? localhost;

#charset koi8-r;

#access_log? logs/host.access.log? main;

location / {

root? html; ====>站點(diǎn)根目錄

index? index.html index.htm;====>默認(rèn)首頁(yè)文件

}?

#error_page? 404? ? ? ? ? ? ? /404.html;

# redirect server error pages to the static page /50x.html

#

error_page? 500 502 503 504? /50x.html;

location = /50x.html {

root? html;

}

# proxy the PHP scripts to Apache listening on 127.0.0.1:80

#

#location ~ \.php$ {

#? ? proxy_pass? http://127.0.0.1;

#}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000

#

#location ~ \.php$ {

#? ? root? ? ? ? ? html;

#? ? fastcgi_pass? 127.0.0.1:9000;

#? ? fastcgi_index? index.php;

#? ? fastcgi_param? SCRIPT_FILENAME? /scripts$fastcgi_script_name;

#? ? include? ? ? ? fastcgi_params;

#}

# deny access to .htaccess files, if Apache's document root

# concurs with nginx's one

#

#location ~ /\.ht {

#? ? deny? all;

#}

}

# another virtual host using mix of IP-, name-, and port-based configuration

#

#server {

#? ? listen? ? ? 8000;

#? ? listen? ? ? somename:8080;

#? ? server_name? somename? alias? another.alias;

#? ? location / {

#? ? ? ? root? html;

#? ? ? ? index? index.html index.htm;

#? ? }

#}

# HTTPS server

#

#server {

#? ? listen? ? ? 443 ssl;

#? ? server_name? localhost;

#? ? ssl_certificate? ? ? cert.pem;

#? ? ssl_certificate_key? cert.key;

#? ? ssl_session_cache? ? shared:SSL:1m;

#? ? ssl_session_timeout? 5m;

#? ? ssl_ciphers? HIGH:!aNULL:!MD5;

#? ? ssl_prefer_server_ciphers? on;

#? ? location / {

#? ? ? ? root? html;

#? ? ? ? index? index.html index.htm;

#? ? }

#}

}

8.核心模塊(Core Modules):

主模塊(Main Module):

配置和服務(wù)器全局有關(guān)的一些參數(shù),比如錯(cuò)誤日志咒程、進(jìn)程鸠天、權(quán)限等

user

worker_processes

error_log

syntax: error_log file [debug|info|notice|warn|error|crit]

default: ${prefix}/logs/error.log

指定保存服務(wù)器(和 fastcgi)錯(cuò)誤的日志文件。

在不同的部分帐姻,錯(cuò)誤等級(jí)的缺省值會(huì)不一樣稠集,為:

1、在主要部分 – error

2饥瓷、在 HTTP 部分 – crit

3剥纷、在server部分 – crit

Nginx中獨(dú)有的而lighttpd卻拒絕實(shí)現(xiàn)的特性是,每個(gè)虛擬主機(jī)可以有各自

分離的錯(cuò)誤日志呢铆。在 server {} 中添加本指令即可晦鞋。

log_not_found

lock_file

pid

include

syntax: include file / *

default: none

你可以包含任何配置文件,基于你想要達(dá)到的目的棺克。

該指令還支持文件名通配符:

include vhosts/*.conf

注意悠垛, 0.6.7 以前,相對(duì)路徑是相對(duì)于 configure 編

譯時(shí)的 –prefix= 指令指定的目錄娜谊,缺省為 /usr/local/nginx确买。

如果編譯時(shí)沒(méi)有指定,則使用絕對(duì)路徑纱皆。

0.6.7 以后湾趾,相對(duì)路徑是相對(duì)于 nginx 配置文件 nginx.conf 所在的目錄,

而不是 nginx 的 prefix 目錄了派草。

事件模塊(Events Module)

配置 IO 事件接口的相關(guān)參數(shù)搀缠,通常就是 worker_connections 這個(gè)參數(shù)。

use

syntax: use [kqueue|rtsig|epoll|/dev/poll|select|poll|eventport]

default:

通常 nginx 在編譯時(shí)近迁,會(huì)根據(jù)平臺(tái)自動(dòng)選擇最優(yōu)的 Events 接口艺普。

除非特殊情況下,編譯時(shí)指定了多個(gè)事件接口钳踊,則可以使用該指令來(lái)指定

特定的接口衷敌。

worker_connections

syntax: worker_connections number

default:

根據(jù)主模塊中的 worker_processes 指令和該指令可計(jì)算最大的客戶端連接數(shù):

max_clients = worker_processes * worker_connections

不過(guò),在做反向代理時(shí)拓瞪, max_clients 變成了:

max_clients = worker_processes * worker_connections/4

因?yàn)榻陕蓿瑸g覽器通常默認(rèn)打開兩個(gè)與服務(wù)器的連接, 而 nginx 使用同一個(gè)文件描述符池中的描述符來(lái)連接后端祭埂。

HTTP 模塊

HTTP 核心模塊(Http Core Module):

控制 Nginx HTTP 處理過(guò)程的核心特性面氓。

alias

default_type

syntax: default_type MIME-type

default: default_type text/plain

context: http, server,location

指定在標(biāo)準(zhǔn) MIME 映射中沒(méi)有指定的文件的默認(rèn) MIME 類型兵钮。

error_page

syntax: error_page code [code…][=|=answer-code] uri

default: no

context: http, server, location, if in location

指定當(dāng)錯(cuò)誤出現(xiàn)時(shí)需要顯示的 URI 。

而且舌界,還可以改變應(yīng)答的代碼為另外一種代碼掘譬,比如:

error_page 404 =200 /.empty.gif;

index

keepalive_timeout

syntax: keepalive_timeout [time]

default: keepalive_timeout 75

context: http, server, location

指定 keep_alive 連接的客戶端的超時(shí)時(shí)間。

keepalive_requests

limit_except

limit_rate

listen

syntax: listen address:port [default [backlog=num|rcvbuf=size|sndbuf=size|accept_filter=filter|deferred|bind|ssl]

default: listen 80

context: server

指定最近的 server {…} 塊的監(jiān)聽地址和端口呻拌。僅指定一個(gè)地址葱轩、一個(gè)端口、或一個(gè)地址的服務(wù)器名藐握,都是可以的靴拱。

如果僅給定 IP 地址,則端口默認(rèn)為 80

如果指令帶有 default 參數(shù)猾普,則最近的 server {…} 配置塊袜炕,將成為 IP 地址:端口 對(duì)的默認(rèn)服務(wù)器。

如果沒(méi)有指令帶有 default 參數(shù)初家,則缺省取 address:port 對(duì)出現(xiàn)的第一個(gè) server 配置快偎窘。

location

syntax: location [=|~|~*|^~] /uri/ { … }

default: no

context: server

在特定 URI 上設(shè)置不同的配置。既能使用普通的字符串也和正則表達(dá)式來(lái)配置溜在。

使用正則表達(dá)式陌知,必須帶一個(gè)前綴:

1、 ~* 表示大小寫不敏感的炕泳。

2纵诞、 ~ 表示大小寫敏感的上祈。

確定哪一個(gè) location 指令匹配某查詢培遵,首先檢查普通字符串。普通字符串匹配該查詢的開始

部分登刺,而且是大小寫敏感的 – 取匹配得最接近的一個(gè)籽腕。之后,將以在配置文件中出現(xiàn)的次序

來(lái)檢查各個(gè)正則表達(dá)式纸俭。找到第一個(gè)匹配查詢的正則表達(dá)式時(shí)停止皇耗。如果沒(méi)有找到匹配的正則

表達(dá)式,則使用普通字符串搜索到的結(jié)果揍很。

有兩種方式修改這樣的行為郎楼。一是使用 “=” 前綴,僅精確匹配查詢窒悔。如果查詢匹配呜袁,則搜索

停止,并立即處理請(qǐng)求简珠。比如阶界,如果對(duì) “/” 的請(qǐng)求比較頻繁,則使用 “l(fā)ocation = / ” 將

加快處理這種請(qǐng)求的過(guò)程。

第二種是使用前綴 ^~ 膘融。該前綴與普通字符串一起使用芙粱,來(lái)告訴 nginx ,如果提供的路徑匹配

則不要去檢查正則表達(dá)式氧映。舉個(gè)例子春畔,”location ^~ /images/” 表示以 /images/ 開始的查詢

則可停止搜索 – 所有的正則表達(dá)式指令都不會(huì)被檢查。

總結(jié)一下岛都,指令以下面的順序來(lái)檢查:

1拐迁、使用 = 前綴的指令,它精確匹配查詢疗绣。如果找到线召,則停止查找。

2多矮、所有剩余的常規(guī)字符串的指令缓淹。如果該匹配使用了 ^~ 前綴,則搜索停止塔逃。

3讯壶、正則表達(dá)式,以在配置文件中定義的次序湾盗。

4伏蚊、如果第 3 點(diǎn)獲得了一個(gè)匹配,則使用該結(jié)果格粪。否則躏吊,使用從 第 2 點(diǎn)中匹配到的結(jié)果。

nginx 比對(duì)解碼后的 URIs帐萎, 知道這點(diǎn)很重要比伏。如果你希望匹配 “/images/%20/test”,則你需要

使用 “/images/ /test” 來(lái)確定 location 疆导。

root

sendfile

syntax: sendfile [on|off]

default: sendfile off

context: http, server, location

啟用或不啟用 sendfile()

server

syntax: server {…}

default: no

context: http

虛擬主機(jī)的配置指令赁项。

不區(qū)分 IP 和基于名稱( Host 請(qǐng)求頭) 的虛擬主機(jī)。

listen 指令用來(lái)描述所有監(jiān)聽的地址和端口澈段。

server_name 指令來(lái)描述所有虛擬主機(jī)的名稱悠菜。

server_name

syntax: server_name name […]

default: server_name hostname

context: server

該指令執(zhí)行兩種操作:

。 將 HTTP 請(qǐng)求中的 Host 請(qǐng)求頭與配置文件中 server {…} 配置塊比對(duì)败富,選擇第一個(gè)匹配的悔醋。

這就是虛擬服務(wù)器的定義。用下面的順序處理服務(wù)器名:

1囤耳、完整的篙顺,靜態(tài)的名稱偶芍;

2、以通配符開頭的名稱 – *.example.com

3德玫、以通配符結(jié)尾的名稱 – www.example.*

4匪蟀、使用正則表達(dá)式的名稱

如果沒(méi)有匹配的,則使用以下順序使用配置文件中的某個(gè) [#server server { … }] 塊:

1宰僧、server 塊擁有標(biāo)記為 default 的匹配 listen 指令材彪。

2、擁有匹配的 listen 指令的第一個(gè) server 塊琴儿。

段化。如果 server_name_in_redirect 指令設(shè)置了,則設(shè)置用于 HTTP 轉(zhuǎn)向中的服務(wù)器名造成。

server_tokens

types

HTTP 基本認(rèn)證模塊(Http Auth Basic Module):

使用該模塊显熏,可以基于 HTTP 基本認(rèn)證,使用用戶名和密碼來(lái)保護(hù)站點(diǎn)或其中的某部分晒屎。

auth_basic

syntax: auth_basic [text|off]

default: auth_basic off

context: http, server, location, limit_except

該指令包含 HTTP 基本認(rèn)證使用的測(cè)試名和密碼喘蟆。分配的參數(shù)用于認(rèn)證 realm 。

“off” 值將覆蓋掉從底層指令繼承來(lái)的動(dòng)作鼓鲁。

auth_basic_user_file

syntax: auth_basic_user_file the_file

default: no

context: http, server, location, limit_except

該指令設(shè)置用于認(rèn)證 realm 的 htpasswd 文件名蕴轨。需要注意的是,從 0.6.7 開始骇吭,

相對(duì)路徑的文件路徑將相對(duì)于配置文件 nginx.conf 所在的目錄橙弱,而不是 prefix 目錄。

密碼必須使用 crypt 函數(shù)編碼燥狰,你可以使用apache中的 htpasswd 程序構(gòu)建棘脐。

HTTP 自動(dòng)索引

該模塊提供自動(dòng)給出目錄文件列表頁(yè)面的功能。僅當(dāng) ngx_http_index_module 沒(méi)有找到索引

文件時(shí)碾局,請(qǐng)求才會(huì)到達(dá)該 ngx_http_autoindex_module 模塊荆残。

autoindex

syntax: autoindex [ on|off ]

default: autoindex off

context: http, server, location

啟用或禁止自動(dòng)目錄文件列表功能奴艾。

autoindex_exact_size

syntax: autoindex_exact_size [ on|off ]

default: autoindex_exact_size on

context: http, server, location

定義在目錄列表中如何顯示文件的大小 — 精確的字節(jié)數(shù)或有取舍的更可讀的

autoindex_localtime autoindex_localtime

syntax: autoindex_localtime [ on|off ]

default: autoindex_localtime off

context: http, server, location

是否顯示文件時(shí)間為本地時(shí)間净当,缺省不顯示(為 GMT 時(shí)間)。

索引文件(Index):

設(shè)置 URL 中未指定文件時(shí)的默認(rèn)文件蕴潦∠裉洌可指定多個(gè)文件。

前面的文件沒(méi)找到時(shí)潭苞,將依次查找后面的忽冻。

index

syntax: index file-path [file-path [ … ] ];

default: no

context: server, location

日志(Log):

設(shè)置 Nginx 如何為大量事件寫入日志。

access_log

syntax: access_log path [format [buffer=size | off]]

default: access_log log/access.log combined

context: http, server, location

經(jīng)典案例:

1.server塊配置可如下配置

include www.conf;

include vhosts/*.conf;

2.ngnix 提供了查看狀態(tài)的web界面 具體配置如下:

##status

server{

listen 80;

server_name www.xiaoxiaoshan.com;

location / {

stub_status on;

access_log off;

}

}

nginx狀態(tài)界面 ? ?

第一個(gè)server表示nginx啟動(dòng)到現(xiàn)在共處理了--個(gè)連接此疹。

第二個(gè)accepts表示nginx啟動(dòng)到現(xiàn)在共成功創(chuàng)建--次握手

請(qǐng)求丟失數(shù) = (握手?jǐn)?shù)-連接數(shù))

第三個(gè)handled requests,表示總共處理了--次請(qǐng)求

reading:nginx讀取到客戶端的Header信息數(shù)

Writing:nginx返回個(gè)客戶端的header信息數(shù)

Waiting:nginx已經(jīng)處理完正在等候下一次請(qǐng)求指令的駐留連接僧诚。開啟keep-alive的情況下遮婶,這個(gè)值等一active-(reading+writing)

3.nginx的錯(cuò)誤信息:

nginx的錯(cuò)誤信息是調(diào)試nginx服務(wù)的重要手段,屬于核心功能模塊湖笨,該參數(shù)名字為error_log旗扑,可以放在main區(qū)塊中全局配置,也可以放在不同主機(jī)中單獨(dú)記錄虛擬主機(jī)的錯(cuò)誤信息慈省。

error_log的語(yǔ)法格式及參數(shù)語(yǔ)法說(shuō)明如下:

errot_log? file level;

error_log的默認(rèn)值為:

#defaule: error_log logs/error.log error;

可以放置的標(biāo)簽段為:

#context:main ,http,server,location

4.nginx的訪問(wèn)日志介紹

nginx軟件會(huì)把每個(gè)用戶訪問(wèn)網(wǎng)站的日志信息記錄到指定的日志文件里臀防,共網(wǎng)站提供分析用戶瀏覽行為等。

nginx的訪問(wèn)日志主要有下面兩個(gè)參數(shù)控制:

log_format 用來(lái)定義記錄日志的格式

access_log 用來(lái)指定日志文件的路徑及使用的何種日志格式記錄日志边败。

nginx日志格式中默認(rèn)的參數(shù)配置如下:

#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;

$server_name:虛擬主機(jī)名稱袱衷。

$remote_addr:遠(yuǎn)程客戶端的IP地址。

-:空白笑窜,用一個(gè)“-”占位符替代致燥,歷史原因?qū)е逻€存在。

?$remote_user:遠(yuǎn)程客戶端用戶名稱排截,用于記錄瀏覽者進(jìn)行身份驗(yàn)證時(shí)提供的名字篡悟,如登錄百度的用戶名scq2099yt,如果沒(méi)有登錄就是空白匾寝。

[$time_local]:訪問(wèn)的時(shí)間與時(shí)區(qū)?搬葬,比如18/Jul/2012:17:00:01 +0800,時(shí)間信息最后的"+0800"表示服務(wù)器所處時(shí)區(qū)位于UTC之后的8小時(shí)艳悔。

$request:請(qǐng)求的URI和HTTP協(xié)議急凰,這是整個(gè)PV日志記錄中最有用的信息,記錄服務(wù)器收到一個(gè)什么樣的請(qǐng)求

$status?:記錄請(qǐng)求返回的http狀態(tài)碼猜年,比如成功是200抡锈。

$uptream_status:upstream狀態(tài),比如成功是200.

$body_bytes_sent:?發(fā)送給客戶端的文件主體內(nèi)容的大小乔外,比如899床三,可以將日志每條記錄中的這個(gè)值累加起來(lái)以粗略估計(jì)服務(wù)器吞吐量。

$http_referer:記錄從哪個(gè)頁(yè)面鏈接訪問(wèn)過(guò)來(lái)的杨幼。

$http_user_agent:客戶端瀏覽器信息

$http_x_forwarded_for:客戶端的真實(shí)ip撇簿,通常web服務(wù)器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了差购,通過(guò)$remote_add拿到的IP地址是反向代理服務(wù)器的iP地址四瘫。反向代理服務(wù)器在轉(zhuǎn)發(fā)請(qǐng)求的http頭信息中,可以增加x_forwarded_for信息欲逃,用以記錄原有客戶端的IP地址和原來(lái)客戶端的請(qǐng)求的服務(wù)器地址找蜜。

$ssl_protocol:SSL協(xié)議版本,比如TLSv1稳析。

$ssl_cipher:交換數(shù)據(jù)中的算法洗做,比如RC4-SHA弓叛。

$upstream_addr:upstream的地址,即真正提供服務(wù)的主機(jī)地址诚纸。

$request_time:整個(gè)請(qǐng)求的總時(shí)間邪码。

$upstream_response_time:請(qǐng)求過(guò)程中,upstream的響應(yīng)時(shí)間咬清。

5.nginx訪問(wèn)日志輪詢切割

#!/bin/sh

dateformat=`date +%Y%m%d`

basedir="/application/nginx"

nginxlogdir="$basedir/logs"

logname="access_www"

[-d $nginxlogdir ]&&cd $nginxlogdir || exit 1

[ -f ${logname}.log ]||exit 1

/bin/mv ${logname}.log ${dateformat}_${logname}.log

$basedir/sbin/nginx -s reload

將上述腳本做定時(shí)任務(wù)執(zhí)行闭专。

6.nginx rewrite規(guī)則

nginx rewrite 正則表達(dá)式匹配

大小寫匹配

~ 為區(qū)分大小寫匹配

~* 為不區(qū)分大小寫匹配

!~和!~*分別為區(qū)分大小寫不匹配及不區(qū)分大小寫不匹配

文件及目錄匹配

-f和!-f用來(lái)判斷是否存在文件

-d和!-d用來(lái)判斷是否存在目錄

-e和!-e用來(lái)判斷是否存在文件或目錄

-x和!-x用來(lái)判斷文件是否可執(zhí)行

flag標(biāo)記

last 相當(dāng)于Apache里的[L]標(biāo)記,表示完成rewrite

break 終止匹配, 不再匹配后面的規(guī)則旧烧。

redirect 返回302臨時(shí)重定向 地址欄會(huì)顯示跳轉(zhuǎn)后的地址影钉。

permanent 返回301永久重定向 地址欄會(huì)顯示跳轉(zhuǎn)后的地址。

logcation的幾個(gè)使用實(shí)例:

1)location? / { }:匹配任何查詢掘剪,因?yàn)樗姓?qǐng)求都以 / 開頭平委。但是正則表達(dá)式規(guī)則將被優(yōu)先和查詢匹配。

2)location =/ {}:僅僅匹配/

3)location ~* \.(gif|jpg|jpeg)$

rewrite \.(gif|jpg)$ /logo.png;

}:location不區(qū)分大小寫夺谁,匹配任何以gif廉赔,jpg,jpeg結(jié)尾的文件。

幾個(gè)實(shí)例:

多目錄轉(zhuǎn)成參數(shù)

要求:abc.domian.com/sort/2 => abc.domian.com/index.php?act=sort&name=abc&id=2

規(guī)則配置:

if ($host ~* (.*)\.domain\.com) {

set $sub_name $1;

rewrite ^/sort\/(\d+)\/?$ /index.php?act=sort&cid=$sub_name&id=$1 last;

}

目錄對(duì)換

要求:/123456/xxxx -> /xxxx?id=123456

規(guī)則配置:

rewrite ^/(\d+)/(.+)/ /$2?id=$1 last;

再來(lái)一個(gè)針對(duì)瀏覽器優(yōu)化的自動(dòng)rewrite,這里rewrite后的目錄可以是存在的丰榴;

例如設(shè)定nginx在用戶使用ie的使用重定向到/nginx-ie目錄

規(guī)則如下:

if ($http_user_agent ~ MSIE) {

rewrite ^(.*)$ /nginx-ie/$1 break;

}

目錄自動(dòng)加“/” ,這個(gè)功能一般瀏覽器自動(dòng)完成

if (-d $request_filename){

rewrite ^/(.*)([^/])$ http://$host/$1$2/ permanent;

}

以下這些可能就跟廣義的rewrite重寫無(wú)關(guān)了

禁止htaccess

location ~/\.ht {

deny all;

}

禁止多個(gè)目錄

location ~ ^/(cron|templates)/ {

deny all; break;

}

禁止以/data開頭的文件馏艾,可以禁止/data/下多級(jí)目錄下.log.txt等請(qǐng)求

location ~ ^/data {

deny all;

}

禁止單個(gè)文件

location ~ /data/sql/data.sql {

deny all;

}

給favicon.ico和robots.txt設(shè)置過(guò)期時(shí)間; 這里為favicon.ico為99天,robots.txt為7天并不記錄404錯(cuò)誤日志

location ~(favicon.ico) {

log_not_found off;

expires 99d;

break;

}

location ~(robots.txt) {

log_not_found off;

expires 7d;

break;

}

設(shè)定某個(gè)文件的瀏覽器緩存過(guò)期時(shí)間;這里為600秒,并不記錄訪問(wèn)日志

location ^~ /html/scripts/loadhead_1.js {

access_log off;

expires 600;

break;

}

Nginx還可以自定義某一類型的文件的保質(zhì)期時(shí)間奴愉,具體寫法看下文的代碼:

location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {

if (-f $request_filename) {

expires??? 1h;

break;

}

}

//上段代碼就將js|css|jpg|jpeg|gif|png|swf這類文件的保質(zhì)期設(shè)置為一小時(shí)琅摩。

防盜鏈的設(shè)置:

防盜鏈:如果你的網(wǎng)站是個(gè)下載網(wǎng)站,下載步驟應(yīng)該是先經(jīng)過(guò)你的主頁(yè)找到下載地址锭硼,才能下載房资,為了防止某些網(wǎng)友直接訪問(wèn)下載地址完全不通過(guò)主頁(yè)下載,我們就可以使用防盜鏈的方式檀头,具體代碼如下:

location ~* \.(gif|jpg|swf)$ {

valid_referers none blocked start.igrow.cn sta.igrow.cn;

if ($invalid_referer) {

rewrite ^/ http://$host/logo.png;

}

}

文件反盜鏈并設(shè)置過(guò)期時(shí)間--<盜鏈多次請(qǐng)求也會(huì)打開你的站點(diǎn)的圖片啊轰异,所以設(shè)置下緩存時(shí)間,不會(huì)每次盜鏈都請(qǐng)求并下載這張圖片>

location ~* ^.+\.(jpg|jpeg|gif|png|swf|rar|zip|css|js)$ {

valid_referers none blocked *.jjonline.cn *.jjonline.com.cn *.lanwei.org *.jjonline.org localhost ?42.121.107.189;

if ($invalid_referer) {

rewrite ^/?http://img.jjonline.cn/forbid.gif;

return 417;

break;

}

access_log off;

break;

}

說(shuō)明:

這里的return 417 為自定義的http狀態(tài)碼鳖擒,默認(rèn)為403溉浙,方便通過(guò)nginx的log文件找出正確的盜鏈的請(qǐng)求地址

“rewrite ^/ http://img.jjonline.cn/forbid.gif;”顯示一張防盜鏈圖片

“access_log off;”不記錄訪問(wèn)日志,減輕壓力

“expires 3d”所有文件3天的瀏覽器緩存

只充許固定ip訪問(wèn)網(wǎng)站蒋荚,并加上密碼;這個(gè)對(duì)有權(quán)限認(rèn)證的應(yīng)用比較在行

location \ {

allow 22.27.164.25; #允許的ipd

deny all;

auth_basic “KEY”; #認(rèn)證的一些設(shè)置

auth_basic_user_file htpasswd;

}

說(shuō)明:location的應(yīng)用也有各種變化馆蠕,這里的寫法就針對(duì)了根目錄了期升。

文件和目錄不存在的時(shí)重定向

if (!-e $request_filename) {

#proxy_pass http://127.0.0.1; #這里是跳轉(zhuǎn)到代理ip惊奇,這個(gè)代理ip上有一個(gè)監(jiān)聽的web服務(wù)器

rewrite ^/ http://www.jjonline.cn/none.html; ?#跳轉(zhuǎn)到這個(gè)網(wǎng)頁(yè)去

#return 404; #直接返回404碼,然后會(huì)尋找root指定的404.html文件

}

域名跳轉(zhuǎn)

server {

listen 80;

server_name jump.jjonline.cn ;#需要跳轉(zhuǎn)的多級(jí)域名

index index.html index.htm index.php; #入口索引文件的名字

root /var/www/public_html/; #這個(gè)站點(diǎn)的根目錄

rewrite ^/ http://www.jjonline.cn/;

#rewrite到這個(gè)地址播赁,功能表現(xiàn):在瀏覽器上輸入jump.jjonline.cn并回車颂郎,不會(huì)有任何提示直接變成www.jjonline.cn

access_log off;

}

多域名轉(zhuǎn)向

server {

listen 80;

server_name www.jjonline.cn www.jjonline.org;

index index.html index.htm index.php;

root /var/www/public_html/;

if ($host ~ “jjonline\.org”) {

rewrite ^(.*) http://www.jjonline.cn$1 permanent;

}

}

三級(jí)域名跳轉(zhuǎn)

if ($http_host ~* “^(.*)\.i\.jjonline\.cn$”) {

rewrite ^(.*) http://demo.jjonline.cn$1;

break;

}

域名鏡向

server {

listen 80;

server_name mirror.jjonline.cn;

index index.html index.htm index.php;

root /var/www/public_html;

rewrite ^/(.*) http://www.jjonline.cn/$1 last;

access_log off;

}

某個(gè)子目錄作鏡向,這里的示例是demo子目錄

location ^~ /demo {

rewrite ^.+ http://demo.jjonline.cn/ last;

break;

}

以下在附帶本博客的rewrite寫法,emlog系統(tǒng)的rewrite

location ~ {

if (!-e $request_filename) {

rewrite ^/(.+)$ /index.php last;

}

}

7.fastcgi模塊

配置文件如下:

server {

listen? ? ? 80;

server_name? blog.xiaoxiaoshan.com··;

root? html/blog;

index? index.php index.html index.htm;

location / {

if (-f $request_filename/index.html){

rewrite (.*) $1/index.html break;

}

if (-f $request_filename/index.php){

rewrite (.*) $1/index.php;

}

if (!-f $request_filename){

rewrite (.*) /index.php;

}

}

location ~ .*\.(php|php5)?$

{

fastcgi_pass? 127.0.0.1:9000;

fastcgi_index index.php;

include fastcgi.conf;

}

access_log? /app/logs/blog_access.log? main;

}

8.負(fù)載均衡

upstream backend {

server bacnkend1.example.com weight = 5;

server backend2.example.com:8080;

server unix:/tmp/backend3;

server backup1.example.com:8080 backup;

server backup2.example.com:8080 backup;

ip_hash;

}

server {

location / {

proxy_pass http://backend;

}

}

9.Http_proxy模塊

location / {

? ? proxy_pass http://localhost:8000;

? ? proxy_set_header Host $host;

? ? proxy_set_header X-Real-IP $remote_addr;

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末容为,一起剝皮案震驚了整個(gè)濱河市乓序,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌坎背,老刑警劉巖替劈,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異得滤,居然都是意外死亡陨献,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門懂更,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)眨业,“玉大人,你說(shuō)我怎么就攤上這事沮协×浼瘢” “怎么了?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵慷暂,是天一觀的道長(zhǎng)墅茉。 經(jīng)常有香客問(wèn)我,道長(zhǎng)呜呐,這世上最難降的妖魔是什么就斤? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮蘑辑,結(jié)果婚禮上洋机,老公的妹妹穿的比我還像新娘。我一直安慰自己洋魂,他們只是感情好绷旗,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著副砍,像睡著了一般衔肢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上豁翎,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天角骤,我揣著相機(jī)與錄音,去河邊找鬼。 笑死邦尊,一個(gè)胖子當(dāng)著我的面吹牛背桐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播蝉揍,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼链峭,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了又沾?” 一聲冷哼從身側(cè)響起弊仪,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎杖刷,沒(méi)想到半個(gè)月后励饵,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡挺勿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年曲横,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片不瓶。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡禾嫉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蚊丐,到底是詐尸還是另有隱情熙参,我是刑警寧澤,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布麦备,位于F島的核電站孽椰,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏凛篙。R本人自食惡果不足惜黍匾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望呛梆。 院中可真熱鬧锐涯,春花似錦、人聲如沸填物。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)滞磺。三九已至升薯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間击困,已是汗流浹背涎劈。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人责语。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓炮障,卻偏偏與公主長(zhǎng)得像目派,于是被迫代替她去往敵國(guó)和親坤候。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • Page 1:nginx 服務(wù)器安裝及配置文件詳解 CentOS 6.2 x86_64 安裝 nginx 1.1 ...
    xiaojianxu閱讀 8,539評(píng)論 1 41
  • 1.簡(jiǎn)介: ? Nginx:engine X 企蹭,2002年白筹,開源,商業(yè)版? http協(xié)議:web服務(wù)器(類似于ht...
    尛尛大尹閱讀 1,867評(píng)論 0 3
  • Nginx簡(jiǎn)介 解決基于進(jìn)程模型產(chǎn)生的C10K問(wèn)題,請(qǐng)求時(shí)即使無(wú)狀態(tài)連接如web服務(wù)都無(wú)法達(dá)到并發(fā)響應(yīng)量級(jí)一萬(wàn)的現(xiàn)...
    魏鎮(zhèn)坪閱讀 2,005評(píng)論 0 9
  • Nginx是一個(gè)輕量級(jí)的谅摄,高性能的Web服務(wù)器以及反向代理和郵箱 (IMAP/POP3)代理服務(wù)器徒河。它運(yùn)行在UNI...
    零一間閱讀 2,206評(píng)論 0 12
  • 轉(zhuǎn)載:https://help.aliyun.com/knowledge_detail/5974693.html?...
    meng_philip123閱讀 1,678評(píng)論 1 12