1.背景介紹
現在許多大型web網站都用到反向代理。除了可以防止外網對內網服務器的惡性攻擊、緩存以減少服務器的壓力和訪問安全控制之外,還可以進行負載均衡,將用戶請求分配給多個服務器。
反向代理服務器Nginx
Nginx作為近年來較火的反向代理服務器,安裝在目的主機端,主要用於轉發客戶機請求,后台有多個http服務器提供服務,nginx的功能就是把請求轉發給后面的服務器,決定哪台目標主機來處理當前請求。
2.知識剖析
1.什么是代理服務器:
代理服務器,客戶端在發送請求時,不會直接發給主機,而是先發給代理服務器,代理服務器接受請求之后將請求分發給不同的主機,並接受主機返回的數據,存在代理服務器中的硬盤中,再發送給客戶端。
2.使用代理服務器有什么優點:
(1)提高訪問速度
由於目標主機返回的數據會存在代理服務器的硬盤中,因此下一次客戶再訪問相同的站點數據時,會直接從代理服務器的硬盤中讀取,起到了緩存的作用,尤其對於熱門站點能明顯提高請求速度。
(2)防火牆作用
由於所有的客戶機請求都必須通過代理服務器訪問遠程站點,因此可在代理服務器上設限,過濾某些不安全信息。
(3)通過代理服務器訪問不能訪問的目標站點
互聯網上有許多開發的代理服務器,客戶機可訪問受限時,可通過不受限的代理服務器訪問目標站點,通俗說,我們使用的翻牆瀏覽器就是利用了代理服務器,可直接訪問外網。
3.正向代理和反向代理:
正向代理,架設再客戶機與目標機之間,只用於代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,並將本來要直接發送到Web服務器上的http請求發送到代理服務器中。
什么意識呢,就是學生從四面八方過來上學,大門只有一個,學校也只有一個,所有的學生都必須通過這個大門才能進入學校,學生好像是客戶機,大門就是代理服務器,學校就是目標主機。
反向代理服務器架設在服務器端,通過緩沖經常被請求的頁面來緩解服務器的工具量,將客戶機請求轉發給內部網絡上的目標服務器;
並將從服務器上得到的結果返回給Internet請求連接的客戶端,此時代理服務器與目標主機一起對外表現為一個服務器。
打個比方,反向代理就好像是幼兒園學生放學了要回家,老師只有一個,學生家長有很多,老師領着學生將學生交給家長,這里面呢,學生就是各個客戶機請求,老師是一個代理服務器,家長是各個目標主機,老師管理者各個學生,再把各個學生分發給不同的家長,這就是反向代理。
4.負載均衡
(1)為什么要使用負載均衡
當一台服務器的單位時間內訪問量越大的時候,服務器壓力會越大,當一台服務器壓力大得超過自身得承受壓力的時候,服務器會崩潰。
為了避免服務器崩潰,讓用戶更好的體驗,我們通常通過負載均衡的方式來分擔服務器的壓力。那么什么是負載均衡呢?我們可以建立很多個服務器,
這些服務器組成一個服務器集群,然后當用戶訪問我們的網站的時候,先訪問一個中間服務器,再讓這個中間服務器在服務器集群中選擇壓力較小的服務器,
然后將該訪問請求引入選擇的服務器。這樣,用戶每次的訪問,都會保證服務器集群中的每個服務器的壓力區域平衡,分擔了服務器的壓力,避免了服務器崩潰的情況。
(2)幾種負載均衡的方式
1)、輪詢(默認)
每個請求按時間順序逐一分配到不同的后端服務器,如果后端服務器down掉,能自動剔除。
2)weight
指定輪循幾率,weight和訪問比率成正比,用於后端服務器性能不均的情況。
3)ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪問固定訪問一個后端服務器,可以解決session的問題。
4)fair(第三方)
按后端服務器的響應時間來分配請求,響應時間短的優先分配。
5)url_hash(第三方)
5.nginx的動靜分離
一般由nginx處理並發的http請求,如果該請求返回的響應是靜態文件(html、htm、css、js、圖片等)則直接由nginx處理,如果是動態文件(jsp、jspx、do、wsd)等,則將該請求轉發給Servlet容器Tomcat、Jetty、resin等進行處理。
3.常見問題
怎么實現上面說的反向代理,負載均衡和動靜分離?
在nginx的安裝目錄下打開nginx.conf文件,在里面配置一些內容。
nginx的負載均衡是怎么達到的?
在nginx的安裝目錄下打開nginx.conf文件,在里面配置我們需要用到的負載均衡的方式,比如輪詢,比重之類的。
正向代理一般在什么情況下使用?
正向代理一般是我們訪問國外或者我們直接訪問不到的地址的時候,這時候就需要一個正向代理,代理我們的服務器,然后通過正向代理向目的服務器發起請求,之后就可以訪問到目的服務器了。