7、nginx的upstream及fastcgi模組應用
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 //只對哪些方法獲取的資源進行快取,一般使用get
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