1. 程式人生 > >6、nginx的反向代理及快取功能

6、nginx的反向代理及快取功能

ngx_http_proxy_module模組:

server {

listen

server_name

location / {

proxy_pass http://192.16.3.7:80/;

}

}

 

格式:

location  /uri {

rewrite

proxy_pass http://back_server:port/newuri;

}

 

/uri --> /newuri

 

http://www.magedu.com

http://mysql.magedu.com

 

proxy_connect_timeout:

proxy_hide_header:

 

upstream

 

回顧:nginx

 

ngx_http_proxy_module,  ngx_http_upstream_module

 

 

 

ngx_http_proxy_module:實現反向代理及快取功能

 

proxy_pass http://{SERVER_IP|UPSTREAM_NAME}/uri

 

 

 

proxy_cache_path path [levels=levels] keys_zone=name:size [inactive=time] [max_size=size] ;

 

 

 

proxy_cache zone_name;

 

 

 

proxy_cache_valid [code] time;

 

proxy_cache_method

 

proxy_cache_use_stale error timeout ...

 

proxy_cache_min_uses

 

 

 

proxy_cache_bypass string: 設定在何種情形下nginx將不從cache取資料的;

 

$cookie_nocache $arg_nocache  $http_authorization

 

 

 

proxy_set_header

 

 

 

ngx_http_upstream_module:

 

定義伺服器組

 

proxy_pass, fastcgi_pass, uwsgi_pass,

 

 

 

upstream name {

 

server address [parameters];

 

ip_hash;

 

}

 

 

 

nginx(2)

 

 

 

SNAT模式的大量Client

 

 

 

基於sticky實現session繫結:

 

cookie

 

route

 

learn ()

 

 

 

least_conn: 排程方法,最少連線;

 

 

 

health_check;

 

建議:關閉訪問日誌;

 

 

 

自定義響應首部:

 

add_header X-Via $server_addr;

 

add_header X-Cache $upstream_cache_status;

 

 

 

LNMP

 

fpm

 

 

 

編輯/etc/nginx/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;

 

 

 

 

 

LNAMP

 

 

 

LNMP, fastcgi_cache

 

 

 

 

 

練習:

 

(1) root為同一路徑;

 

(2) root為不同的路徑;

 

location \.php$ {

 

root /web/app/wp;

 

}

 

 

 

location / {

 

root /web/htdocs;

 

}

 

 

 

如何解決問題?

 

 

 

(3) fpm server為另一主機;

 

location \.php$ {

 

fastcgi_pass fastcgi://172.16.100.9:9000;

 

}

 

 

 

location / {

 

root /web/htdocs;

 

}

 

 

 

總結:

 

cache:

 

proxy_cache

 

fastcgi_cache

 

 

 

練習:

 

使用nginx反向代理(rr排程)使用者請求至兩個以上的後端LAMP(按標準路徑部署的有pma);

 

(1) 手動更新所有節點上的pma至新版本;

 

(2) 寫指令碼實現如上過程;

 

 

 

 

 

回顧:nginx upstream, fastcgi

 

upstream name {

 

server

 

server

 

 

 

}

 

wrr

 

ip_hash|least_conn|sticky

 

 

 

fastcgi_pass fastcgi://

 

 

 

LNMMP: Memcached

 

 

 

HAProxy:

 

 

 

 

 

 

 

 

 

 

 

web arch: haproxy

 

mode: http, tcp (https, mysql)

 

 

 

HAProxy:

 

代理(http): 掮客(broker)

 

正向代理:

 

反向代理:

 

 

 

代理作用:web快取(加速)、反向代理、內容路由(根據流量及內容型別等將請求轉發至特定伺服器)、轉碼器;

 

 

 

在代理伺服器上新增Via首部;

 

 

 

快取的作用:

 

減少冗餘內容傳輸;

 

節省頻寬、緩解網路瓶頸;

 

降低了對原始伺服器的請求壓力;

 

降低了傳輸延遲;

 

 

 

HAProxy: 只是http協議的反向代理,不提供快取功能;但額外支援對tcp層對基於tcp通訊的應用做LB;

 

 

 

nginx:

 

server {

 

 

 

}

 

 

 

server {

 

location ~* \.php$ {

 

proxy_pass

 

}

 

 

 

location / {

 

 

 

}

 

}

 

 

 

 

 

upstream {

 

leastconn

 

server

 

server

 

}

 

 

 

upstream {

 

 

 

}

 

 

 

haproxy:

 

frontend

 

use_backend

 

default_backend

 

backend

 

balancer

 

server

 

server

 

 

 

listen:

 

server

 

 

 

default

 

 

 

配置檔案:haproxy.cfg

 

全域性配置

 

代理配置

 

 

 

 

 

回顧:

 

HAProxy:

 

http協議反向代理

 

tcp層的LB

 

 

 

特性:event-driven, ebtree

 

 

 

配置:/etc/haproxy/haproxy.cfg

 

/usr/sbin/haproxy

 

 

 

CentOS 6: /etc/rc.d/init.d/haproxy

 

CentOS 7: haproxy.service

 

 

 

配置分為兩段:

 

global

 

配置引數:log, maxconn, ...

 

proxies

 

defaults, frontend, backend, listen

 

 

 

示例:

 

frontend main *:80

 

default_backend websrvs

 

 

 

backend websrvs

 

balance roundrobin

 

server web1 172.16.100.68 check

 

server web2 172.16.100.69 check

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

nihoa