本文系統(tǒng):Centos6.5_x64
三臺(tái)主機(jī):nginx主機(jī),hostname: master. IP: 192.168.10.128 apache主機(jī),hostname: client1. IP: 192.168.10.129 一、nginx 地址重定向
二、nginx 反向代理 1、地址重定向:是指當(dāng)使用者瀏覽某個(gè)網(wǎng)址時(shí),將他導(dǎo)向到另一個(gè)網(wǎng)址的技術(shù)。常用在把一串很長的網(wǎng)址,轉(zhuǎn)成較短的網(wǎng)址。因?yàn)楫?dāng)要傳播某網(wǎng)站時(shí),常常因?yàn)榫W(wǎng)址太長,不好記憶;又有可能因?yàn)閾Q了網(wǎng)路的免費(fèi)網(wǎng)頁空間,網(wǎng)址又必須要變更,不知情的使用者還以為網(wǎng)站關(guān)閉了。這時(shí)就可以用網(wǎng)路上的轉(zhuǎn)址了。這個(gè)技術(shù)使一個(gè)網(wǎng)頁是可借由不同的統(tǒng)一資源定位符(URL)連結(jié)。 1.1、這 個(gè)模塊允許使用正則表達(dá)式重寫URI(需PCRE庫),并且可以根據(jù)相關(guān)變量重定向和選擇不同的配置。如果這個(gè)指令在server字段中指定,那么將在被 請(qǐng)求的location確定之前執(zhí)行,如果在指令執(zhí)行后所選擇的location中有其他的重寫規(guī)則,那么它們也被執(zhí)行。如果在location中執(zhí)行這 個(gè)指令產(chǎn)生了新的URI,那么location又一次確定了新的URI。這樣的循環(huán)可以最多執(zhí)行10次,超過以后nginx將返回500錯(cuò)誤
rewrite 指令:可以使用在 server, location, if 區(qū)域; 語法:rewrite regex replacement flag
按照相關(guān)的正則表達(dá)式與字符串修改URI,指令按照在配置文件中出現(xiàn)的順序執(zhí)行。
注 意如果一個(gè)重定向是相對(duì)的(沒有主機(jī)名部分),nginx將在重定向的過程中使用匹配server_name指令的“Host”頭或者 server_name指令指定的第一個(gè)名稱,如果頭不匹配或不存在,如果沒有設(shè)置server_name,將使用本地主機(jī)名,如果你總是想讓nginx 使用“Host”頭,可以在server_name使用“*”通配符(查看http核心模塊中的server_name)。例如:
但是如果我們將其放入一個(gè)名為/download/的location中,則需要將last標(biāo)記改為break,否則nginx將執(zhí)行10次循環(huán)并返回500錯(cuò)誤。
如果替換字段中包含參數(shù),那么其余的請(qǐng)求參數(shù)將附加到后面,為了防止附加,可以在最后一個(gè)字符后面跟一個(gè)問號(hào):
注意:大括號(hào)({和}),可以同時(shí)用在正則表達(dá)式和配置塊中,為了防止沖突,正則表達(dá)式使用大括號(hào)需要用雙引號(hào)(或者單引號(hào))。例如要重寫以下的URL:
為:
則使用以下正則表達(dá)式(注意引號(hào)):
如果指定一個(gè)“?”在重寫的結(jié)尾,Nginx將丟棄請(qǐng)求中的參數(shù),即變量$args,當(dāng)使用$request_uri或$uri&$args時(shí)可以在rewrite結(jié)尾使用“?”以避免nginx處理兩次參數(shù)串。
同樣,重寫只對(duì)路徑進(jìn)行操作,而不是參數(shù),如果要重寫一個(gè)帶參數(shù)的URL,可以使用以下代替:
注意$args變量不會(huì)被編譯,與location過程中的URI不同(參考http核心模塊中的location)
示例:當(dāng)訪問www.的時(shí)候跳轉(zhuǎn)到www.Aries.com;
break 指令 可使用server, location, if 區(qū)域; 中止Rewirte,不在繼續(xù)匹配 last 指令 可server, location, if 區(qū)域; last與break的區(qū)別在于,last并不會(huì)停止對(duì)下面location的匹配。
測(cè)驗(yàn)一下break與last的區(qū)別
使用firebug 可以看到; if 指令 可使用server, location 區(qū)域; 示例:當(dāng)訪問http://www.網(wǎng)址的時(shí)候跳轉(zhuǎn)到www.Aries.com;
return 指令 可使用server, location, if 區(qū)域
語法:return code rewrite_log 指令 可使用server, location, if 區(qū)域
啟用時(shí)將在error log中記錄notice 標(biāo)記的重寫日志。
set 指令 可使用server, location, if 區(qū)域
語法:set variable value
uninitialized_variable_warn 指令 可使用 http, server, location, if 區(qū)域
|
1
2
3
|
location ~ \.(gif|jpg|jpeg|png|bmp|ico)$ { log_not_found off; #不記錄404 not found 錯(cuò)誤日志 expires 30d; break ; } |
控制匹配/resource/或者/mediatorModule/里所有的文件緩存設(shè)置到最長時(shí)間
1
2
3
4
|
location ~ /(resource|mediatorModule)/ { root /opt/demo ; expires max; } |
設(shè)定某個(gè)文件的過期時(shí)間;這里為600秒,并不記錄訪問日志
1
2
3
4
5
6
|
location ^~ /html/scripts/loadhead_1 .js { access_log off; root /opt/lampp/htdocs/web ; expires 600; break ; } |
設(shè)置GZIP
一般情況下壓縮后的html、css、js、php、jhtml等文件,大小能降至原來的25%,也就是說,原本一個(gè)100k的html,壓縮后只剩下25k。這無疑能節(jié)省很多帶寬,也能降低服務(wù)器的負(fù)載。
在nginx中配置gzip比較簡(jiǎn)單
一般情況下只要在nginx.conf的http段中加入下面幾行配置即可
1
2
3
4
|
gzip on; gzip_min_length 1000; gzip_buffers 48k; gzip_types text /plain application /x-javascript text /css text /html application /xml ; |
可以通過網(wǎng)頁gzip檢測(cè)工具來檢測(cè)網(wǎng)頁是否啟用了gzip
臨時(shí)重定向示例:訪問www./c 重定向到www./cc
編輯nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
server { listen 80 default_server; server_name www. ; access_log logs /lansgg .access.log main; error_log logs /lansgg .error.log; root /opt/nginx/nginx/html/lansgg ; index index.html; rewrite ^ /c/ (.*)$ http: //www . /cc/ $1; } [root@master lansgg] # tree . ├── c │ └── index.html ├── cc │ └── index.html ├── index.html └── it.jpg 2 directories, 4 files |
訪問http://www./c 會(huì)跳轉(zhuǎn)到http://www./cc
302即為臨時(shí)重定向;
永久重定向(隱含重定向)
編輯nginx.conf
1
2
3
4
5
6
7
8
9
|
server { listen 80 default_server; server_name www. ; access_log logs /lansgg .access.log main; error_log logs /lansgg .error.log; root /opt/nginx/nginx/html/lansgg ; index index.html; rewrite ^ /c/ (.*)$ /cc/ $1; } |
訪問 http://www./c/ 頁面顯示的是跳轉(zhuǎn)后的頁面,可是url卻沒有變化;firebug也看不到302代碼信息;現(xiàn)在它其實(shí)是301;
2、反向代理:是指以代理服務(wù)器來接受internet上的連接請(qǐng)求,然后將請(qǐng)求轉(zhuǎn)發(fā)給內(nèi)部網(wǎng)絡(luò)上的服務(wù)器,并將從服務(wù)器上得到的結(jié)果返回給internet上請(qǐng)求連接的客戶端,此時(shí)代理服務(wù)器對(duì)外就表現(xiàn)為一個(gè)服務(wù)器。
2.1、配置nginx實(shí)現(xiàn)反向代理;
需求:訪問http://192.168.10.128/other 返回 apache主機(jī)的other目錄下的Index.html
涉及nginx指令:
語法:proxy_pass URL
可使用字段:location, location中的if字段
這個(gè)指令設(shè)置被代理服務(wù)器的地址和被映射的URI,地址可以使用主機(jī)名或IP加端口號(hào)的形式,例如:proxy_pass http://192.168.10.129/url
2.2、配置nginx配置文件nginx.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
server { listen 80 default_server; server_name www. ; access_log logs /lansgg .access.log main; error_log logs /lansgg .error.log; root /opt/nginx/nginx/html/lansgg ; location / { index index.html; } location /other { proxy_pass http: //192 .168.10.129 /other ; proxy_set_header X-Real-IP $remote_addr; } } |
2.3、配置client1
1
2
|
mkdir /var/www/html/other echo '192.168.10.129' > /var/www/html/other/index .html |
2.4、測(cè)試;
訪問url: http://www./other 你會(huì)發(fā)現(xiàn)跳轉(zhuǎn)到了 : http://192.168.10.129/other/
查看日志:
1
2
|
[root@client1 ~] # tail -f /var/log/httpd/access_log 192.168.10.1 - - [06 /Nov/2014 :21:25:44 0800] 'GET /other/ HTTP/1.1' 200 15 '-' 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:32.0) Gecko/20100101 Firefox/32.0'
|
|