在講訴具體的配置以前,先說下正向代理與反向代理的區別。html
正向代理:是一個位於客戶端和原始服務器(origin server)之間的服務器,爲了從原始服務器取得內容,客戶端向代理髮送一個請求並指定目標(原始服務器),而後代理向原始服務器轉交請求並將得到的內容返回給客戶端。客戶端才能使用正向代理,並且必需要進行一些特別的設置才能使用正向代理。。正向代理是一種最終用戶知道並主動使用的代理方式。 ios
正向代理的典型用途是爲在防火牆內的局域網客戶端提供訪問Internet的途徑。正向代理還可使用緩衝特性減小網絡使用率。正向代理容許客戶端經過它訪問任意網站而且隱藏客戶端自身,所以你必須採起安全措施以確保僅爲通過受權的客戶端提供服務。 nginx
反向代理:是指以代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。反向代理對用戶來講是透明的,用戶是感知不到的。 web
反向代理的典型用途是將防火牆後面的服務器提供給Internet用戶訪問。反向代理還能夠爲後端的多臺服務器提供負載平衡,或爲後端較慢的服務器提供緩衝服務。正則表達式
user www www; worker_processes 1; error_log logs/error.log; pid logs/nginx.pid; worker_rlimit_nofile 65535; events { use epoll; worker_connections 65535; } http { include mime.types; default_type application/octet-stream; include /usr/local/nginx/conf/vhosts/proxy.conf; sendfile on; keepalive_timeout 65; gzip on; client_max_body_size 50m; #緩衝區代理緩衝用戶端請求的最大字節數,能夠理解爲保存到本地再傳給用戶 client_body_buffer_size 256k; client_header_timeout 3m; client_body_timeout 3m; send_timeout 3m; proxy_connect_timeout 300s; #nginx跟後端服務器鏈接超時時間(代理鏈接超時) proxy_read_timeout 300s; #鏈接成功後,後端服務器響應時間(代理接收超時) proxy_send_timeout 300s; proxy_buffer_size 64k; #設置代理服務器(nginx)保存用戶頭信息的緩衝區大小 proxy_buffers 4 32k; #proxy_buffers緩衝區,網頁平均在32k如下的話,這樣設置 proxy_busy_buffers_size 64k; #高負荷下緩衝大小(proxy_buffers*2) proxy_temp_file_write_size 64k; #設定緩存文件夾大小,大於這個值,將從upstream服務器傳遞請求,而不緩衝到磁盤 proxy_ignore_client_abort on; #不容許代理端主動關閉鏈接 server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
server { listen 80; server_name jerishi1.com; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.10.38:3000; } access_log logs/jerishi1.com_access.log; } server { listen 80; server_name jerishi2.com; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://192.168.10.40:80; } access_log logs/jerishi2.com_access.log; }
upstream monitor_server { server 192.168.0.1:80; server 192.168.0.2:80; } server { listen 80; server_name nagios.xxx123.tk; location / { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://monitor_server; } access_log logs/nagios.jerishi.com_access.log; }
$:/usr/local/nginx-1.5.1/sbin/nginx -t
$:/usr/local/nginx-1.5.1/sbin/nginx -s reload
$:/usr/local/nginx-1.5.1/sbin/nginx -s stop
代碼示例:後端
location = / { # 只匹配"/". [ configuration A ] } location / { # 匹配任何請求,由於全部請求都是以"/"開始 # 可是更長字符匹配或者正則表達式匹配會優先匹配 [ configuration B ] } location ^~ /images/ { # 匹配任何以 /images/ 開始的請求,並中止匹配 其它location [ configuration C ] } location ~* .(gif|jpg|jpeg)$ { # 匹配以 gif, jpg, or jpeg結尾的請求. # 可是全部 /images/ 目錄的請求將由 [Configuration C]處理. [ configuration D ] }
1. 用uri測試全部的prefix string;
2. Uri精確匹配到=定義的loacation,使用這個location,中止搜索;
3. 匹配最長prefix string,若是這個最長prefix string帶有^~修飾符,使用這個location,中止搜索,不然:
4. 存儲這個最長匹配;
5. 而後匹配正則表達;
6. 匹配到第一條正則表達式,使用這個location,中止搜索;
7. 沒有匹配到正則表達式,使用#4步存儲的prefix string的location。緩存
語法:root path
默認值:root html
配置段:http、server、location、if
root會根據完整的URI請求來映射,也就是/path/uri.
示例:安全
location ~ ^/qcloud/ { root /data/release/www.qcloud.com; autoindex on; auth_basic "Restricted"; auth_basic_user_file passwd/weblogs; }
若是一個請求的URI是/qcloud/www.buy.qcloud.com/main.js時,web服務器將會返回/data/release/www.qcloud.com/qcloud/www.buy.qcloud.com/main.js的文件。服務器
語法:alias path
配置段:location
alias會把location後面配置的路徑丟棄掉,把當前匹配到的目錄指向到指定的目錄。
示例:網絡
location ~ ^/qcloud/ { alias /data/release/www.qcloud.com; autoindex on; auth_basic "Restricted"; auth_basic_user_file passwd/weblogs; }
若是一個請求的URI是/qcloud/www.buy.qcloud.com/user.js時,web服務器將會返回/data/release/www.qcloud.com/www.buy.qcloud.com/main.js的文件。