1、ngx_http_proxy_module模塊php
ngx_http_proxy_module模塊可根據用戶請求的uri傳遞至後端服務器,實現反向代理html
命令:nginx
1.proxy_passweb
設置一個代理服務器的地址,協議,和一個可選的URI的位置應該映射。做爲一個協議,「HTTP」或「https」能夠指定。地址能夠被指定爲一個域名或IP地址,和一個可選的端口正則表達式
語法:proxy_pass URL;算法
可用的上下文:location, if in location, limit_exceptvim
注意:proxy_pass後面的路徑不帶uri時,其會將location的uri傳遞給後端主機;proxy_pass後面的路徑是一個uri時,其會將location的uri替換爲proxy_pass的uri;若是location定義其uri時使用了正則表達式的模式,則proxy_pass以後必須不能使用uri; 用戶請求時傳遞的uri將直接附加代理到的服務的以後;後端
2.proxy_set_headercentos
設定發日後端主機的請求報文的請求首部的值緩存
語法:proxy_set_header FIELD VALUE;
可用的上下文:http, server, location
示例:
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
三、proxy_cache_path
定義可用於proxy功能的緩存
語法:proxy_cache_path path [levels=levels] [use_temp_path=on|off] keys_zone=name:size [inactive=time] [max_size=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time] [purger=on|off] [purger_files=number] [purger_sleep=time] [purger_threshold=time];
可用上下文:http
示例:
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;
四、proxy_cache
指明要調用的緩存,或關閉緩存機制
語法:proxy_cache ZONE | off;
可用上下文:http, server, location
五、proxy_cache_key
緩存中用於「鍵」的內容;
語法:proxy_cache_key STRING;
默認值:proxy_cache_key $scheme$proxy_host$request_uri;
可用上下文:http, server, location
六、proxy_cache_valid
定義對特定響應碼的響應內容的緩存時長;
語法:proxy_cache_valid [code ...] time;
可用上下文:http, server, location
示例:
定義在http{...}當中
proxy_cache_path /var/cache/nginx/proxy_cache levels=1:1:1 keys_zone=pxycache:20m max_size=1g;
定義在須要調用緩存功能的配置段,例如server{...}
proxy_cache pxycache;
proxy_cache_key $request_uri;
proxy_cache_valid 200 302 301 1h;
proxy_cache_valid any 1m;
七、proxy_cache_use_stale
不肯定緩存的響應能夠用代理服務器的通訊過程當中出現錯誤時,使用該指令的參數匹配的proxy_next_upstream指令的參數
語法:proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | off ...;
可用上下文:http, server, location
八、proxy_cache_methods
若是客戶端請求方法在這個指令中列出,那麼響應將被緩存。「獲取」和「頭」的方法老是添加到列表中,雖然建議明確指定它們。又見proxy_no_cache指令。
語法:proxy_cache_methods GET | HEAD | POST ...;
可用上下文:http, server, location
九、proxy_hide_header
隱藏所定義的首部,用戶不可見
語法:proxy_hide_header FIELD;
可用上下文:http, server, location
十、proxy_connect_timeout
定義了用於創建與代理服務器鏈接超時,這個超時一般不能超過75秒。
語法:proxy_connect_timeout time;
可用上下文:http, server, location
十一、proxy_buffers
集數和用於從代理服務器讀取響應緩衝區的大小,爲一個單一的鏈接。默認狀況下,緩衝區大小等於一個內存頁,4K或8K
語法:proxy_buffers NUMBER SIZE;
可用上下文:http, server, location
2、ngx_http_headers_module模塊
ngx_http_headers_module模塊容許添加「過時」和「緩存控制頭字段,和任意的領域,一個響應頭。向由代理服務器響應給客戶端的響應報文添加自定義首部,或修改指定首部的值;
命令:
一、add_header
添加自定義首部;
語法:add_header name value [always];
可用上下文:http, server, location, if in location
示例:
add_header X-Via $server_addr;
add_header X-Accel $server_name;
二、expires
用於定義Expire或Cache-Control首部的值;
語法:expires [modified] time;
可用上下文:http, server, location, if in location
3、ngx_http_upstream_module模塊
ngx_http_upstream_module模塊用於定義服務器能夠經過proxy_pass,fastcgi_pass,uwsgi_pass,scgi_pass參照組,和memcached_pass指令。
命令:
一、upstream
定義一組服務器。服務器能夠在不一樣的端口上監聽。此外,服務器監聽TCP和Unix域套接字能夠混合。
語法:upstream name { ... }
可用上下文:http
示例:
upstream httpdsrvs {
server ...
server...
...
}
二、server
在upstream上下文中server成員,以及相關的參數;Context:upstream
語法:server address [parameters];
可用上下文:upstream
address表示格式:
unix:/PATH/TO/SOME_SOCK_FILE
IP[:PORT]
HOSTNAME[:PORT]
parameters:
(1) weight=number
權重,默認爲1;
(2)max_fails=number
失敗嘗試最大次數;超出此處指定的次數時,server將被標記爲不可用;
(3)fail_timeout=time
設置將服務器標記爲不可用狀態的超時時長;
(4)max_conns
當前的服務器的最大併發鏈接數;
(5)backup
將服務器標記爲「備用」,即全部服務器均不可用時此服務器才啓用;
(6)down
標記爲「不可用」;
三、least_conn;
最少鏈接調度算法,當server擁有不一樣的權重時其爲wlc,適用於長鏈接服務
四、ip_hash;
源地址hash調度方法;
五、hash
基於指定的key的hash表來實現對請求的調度,此處的key能夠直接文本、變量或兩者的組合;
做用:將請求分類,同一類請求將發往同一個upstream server;
語法:hash key [consistent];
示例:
hash $request_uri consistent;
hash $remote_addr;
六、keepalive
爲每一個worker進程保留的空閒的長鏈接數量;鏈接參數設置KeepAlive閒置的最大鏈接數上游服務器保存在每一個工做進程緩存。當這個數字被超過期,最近使用的鏈接被關閉。
4、ngx_stream_core_module模塊
模擬反代基於tcp或udp的服務鏈接,即工做於傳輸層的反代或調度器;
命令:
一、stream
定義stream相關的服務
可用上下文:main
示例:
stream {
upstream sshsrvs {
server 192.168.22.2:22;
server 192.168.22.3:22;
least_conn;
}
server {
listen 10.1.0.6:22022;
proxy_pass sshsrvs;
}
}
二、listen
監聽端口
可用上下文:server
語法:listen address:port [ssl] [udp] [proxy_protocol] [backlog=number] [bind] [ipv6only=on|off] [reuseport] [so_keepalive=on|off|[keepidle]:[keepintvl]:[keepcnt]];
反代配置實例:
實驗目的:
將用戶的請求分別調度至後端RS服務器
在兩臺RS服務器上面先配置好web服務:
反代服務器配置:
[root@centos7 nginx]# vim /etc/nginx/nginx.conf
在http段中添加如下配置:
upstream WebServer { server 10.1.68.1 weight=1 max_fails=2; server 10.1.68.2 weight=1 max_fails=2; }
server段中的配置:
server { listen 80; server_name localhost; #添加響應首部信息 add_header X-Via $server_addr; add_header X-Accel $server_name; #設定發日後端主機的請求報文的請求首部的值 proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #將全部來自本機的請求發送WebServer服務器組,默認算法爲rr location / { index index.html index.htm; proxy_pass http://WebServer; } }
測試:
動靜分離配置實例:
實驗目的:
將不一樣的資源分別分發至不一樣服務器組,以實現動靜分離機制
Nginx Reverse的配置:
在http段中添加如下配置:
upstream static { server 10.1.68.1 weight=1 max_fails=2; server 10.1.68.2 weight=1 max_fails=2; } upstream dynamic { server 10.1.68.3 weight=1 max_fails=2; server 10.1.68.4 weight=1 max_fails=2; } upstream picture { server 10.1.68.5 weight=1 max_fails=2; server 10.1.68.6 weight=1 max_fails=2; }
server段中的配置:
server { listen 80; server_name localhost; add_header X-Via $server_addr; add_header X-Accel $server_name; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } location ~* ^/.*\.(html|htm|xml)$ { #將靜態內容發往static服務器組 proxy_pass http://static; } location ~* ^/.*\.(jpg|png|gif)$ { #將圖片資源發往picture服務器組 proxy_pass http://picture; } location ~* ^/.*\.php$ { #將以.php結尾的資源發往dynamic服務器組 proxy_pass http://dynamic; } }
測試靜態資源訪問:
訪問靜態資源
再次訪問可調度至RS2靜態資源服務器
測試動態資源訪問:
訪問動態資源
再次訪問可調度至RS2動態資源服務器
測試圖片資源訪問:
訪問圖片資源
再次訪問可調度至RS2圖片資源服務器