nginx服務有緩存機制,可是要看nginx作爲何服務器來用,才啓用緩存,不然本身的壓力就很是大了(後端服務器壓力小),由於nginx最拿手的是維持鏈接,緩存可使用其餘服務。
nat服務工做在三層和四層,能夠簡單理解爲工做在四層。
注意:若是能工做在應用層就叫作代理,那麼這個服務器就能監聽一些端口但不是所有,---意思是服務器具備業務處理能力,一邊是客戶端(要理解客戶端發的內容),一邊是服務端(用本身的方式把內容傳過去),因此能夠有本身的緩存了html
上邊講的是正向代理和反向代理的原理,nginx是能夠作反向代理的
lvs是四層的負載均衡器,nginx是七層的負載均衡器,原理跟lvs類似linux
那麼代理服務器和後端服務器:
後端服務器的網關不須要指向代理服務器,意思就是二者之間能夠跨路由,因此二者之間能夠是公網或私網地址,客戶端也有可能能夠訪問後端服務器nginx
CDN:內容分發網絡,自己也是代理服務器,帶有緩存功能,都是公網地址
nginx通常不做爲http服務器,而是做爲反代服務器
nginx做爲反代服務器,httpd做爲後端服務器
代理服務器徹底能夠有多個主機,靠server來定義,而且能夠基於location把請求分發到不一樣的後端服務器上web
下面開始演示nginx的反向代理功能:後端主機名稱叫作UPSS1192.168.10.11
ntpdate 172.16.0.1---同步下時間
修改網卡爲vmnet1
ifconfig eno1677736 192.168.10.11/24 up
route -n查看路由條目,發現是沒有配置網關的
ping 192.168.10.254---在沒有網關的狀況下,依然能夠ping通,由於在同一個網絡中正則表達式
後端服務器安裝http服務和mod_ssl模塊
yum install -y httpd mod_ssl
vim /var/www/html/index.html
<h1>Upstream Server1</h1>vim
systemctl start httpd.service
ss -tnl後端
#代理服務器安裝nginx服務
代理服務器:172.16.0.6,192.168.10.254
ntpdata 172.16.0.1
yum clean all
yum repolist
yum install nginx
cd /etc/nginx
vim conf.d/ilinux.conf---編輯nginx的配置文件:
server {
listen 80;
server_name www.ilinux.io;
location / {---沒有root就無法提供web服務,可是咱們是反代服務器,不須要web功能
proxy_pass http://192.168.10.11:80;---能夠是域名,能夠是ip地址,後邊要不要跟斜線,若是沒有斜線,是把能匹配到的補到後邊,若是有斜線,是替換斜線
proxy_set_header X-Real-IP $remote_addr;---把客戶端真實地址添加到報文首部發給後端主機
add_header X-Via $server_addr;---把真實後端服務器地址發給客戶端
}
location ~* .(jpg|jpeg|png)$ {---這是另外一臺後端服務器了UPSS2,使用了正則表達式匹配的話,url後邊不能加斜線
proxy_pass http://192.168.10.12:80;
}
}緩存
nginx -t
systemctl start nginx.service
ss -tnl---查看有沒有80端口服務器
代理服務器部署好nginx後,外部主機訪問172.16.0.6會訪問到nginx提供的默認主頁,由於咱們作的是提供域名的虛擬主機(本身配置的),因此要訪問域名www.ilinux.io,而且在外部主機上作域名解析
vim /etc/hosts
172.16.0.6 www.ilinux.io---添加這樣一行
再來訪問www.ilinux.io就能夠看到Upstream Server1了---說明反向代理成功了網絡
UPSS2:須要安裝httpd
網絡類型設置爲vmnet1
ifconfig eno16777736 192.168.10.12/24 up
vim /var/www/html/index.html
<h1>Upstream Server2</h1>
find /usr/share -iname "*.jpg" -exec cp {} var/www/html/ \;
systemctl start httpd---客戶端就能夠訪問圖片資源了
視頻中的課件:
ngx_http_proxy_module模塊:
一、proxy_pass URL:
Context:location,if in location,limit_except
注意:proxy_pass後面的路徑不帶url時,其會將location的url傳遞給後端主機;
server {
...
server_name HOSTNAME;
location /url/ {
proxy http://hos[:port];
}
...
}
http://HOSTNAME/url-->http://host/url
proxy_pass後面的路徑是一個url時,其會將location的url替換爲proxy_pass的url; server { ... server_name HOSTNAME; location /url/ { proxy http://host/new_url/; } ... } http://HOSTNAME/url-->http://host/new_url/ 若是location定義其url時使用了正則表達式的模式,或在if語句或limit_execept中使用proxy_pass指令,則proxy_pass以後必須不能使用url;用戶請求時傳遞的url將直接附加代理到的服務的以後; server { ... server_name HOSTNAME; location ~|~* /url/ { proxy http://host; } ... } http://HOSTNAME/url/-->http://host/url/; 二、proxy_set_header field value; 設定發日後端主機的請求報文的請求首部的值;Context:http,server,location proxy_set_header X-Real-IP $remote_addr;---添加真實的請求IP地址到發日後端主機的請求報文中 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;---代理能夠是多級的,追加而不是重設,上邊的加強版本 三、proxy_cache_path 定義可用於proxy功能的緩存;Context:http 四、proxy_cache zone | off 指明要調用的緩存,或關閉緩存機制;Context:http,server,location 五、proxy_cahe_key string; 緩存中用於"鍵"的內容; 默認值:proxy_cache_key $scheme$proxy_host$request_url; 六、proxy_cache_valid [code ...] time; 定義對特定響應碼的響應內容的緩存時長; 定義在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_url; proxy_cache_valid 200 302 301 1h; proxy_cache_valid any 1m; 七、proxy_cache_use_state 八、proxy_cache_methods GET|HEAD|POST...; 九、proxy_hide_header field; 十、proxy_connect_timeout time; 默認爲60s;
ngx_http_headers_modules模塊:向由代理服務器響應給客戶端的響應報文添加自定義首部,或修改指定首部的值;一、add_header name value [always];添加自定義首部;add_header X-Via $server_addr;add_header X-Accel $server_name;二、expires [modified] time;expires epoch | max|off;用於定義Expire或Cache-Control首部的值;