4-1-面試必備-nginx實現反向代理配置與實戰

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後端

tcpdump -i eno16777736 tcp port 80---能夠看到是誰來訪問的後端虛擬主機,全是代理服務器發來的請求
代理服務器也會記錄訪問日誌的,可是爲了提升代理性能,有可能關掉日誌,後端服務器可########以修改日誌的格式,查看真實的客戶端地址,1:13:32是爲了證實下面課件的2選項

#代理服務器安裝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了---說明反向代理成功了網絡

注意:做爲代理服務器來說,是能夠有多個主機的,每個主機靠一個server來定義,後端服務器也可能有多個主機,因此須要明確標識後端服務器的每一個主機(基於IP、端口或域名)

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---客戶端就能夠訪問圖片資源了

yum info wireshark(須要在圖形環境中打開)---這一步不須要
vim /etc/httpd/conf/httpd.conf
修改成LogFormat "%{X-Real-IP}i %l %u %t \"%r" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
httpd -t---檢查語法錯誤
systemctl restart httpd.service
而後客戶端強制刷新一次,
tail /var/log/httpd/access_log---就能夠看到記錄的日誌裏真實的IP地址

視頻中的課件:
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首部的值;

相關文章
相關標籤/搜索