使用Nginx實現服務器反向代理和負載均衡

  前言

  同事總問我Nginx作反向代理負載均衡的問題,所以特地留下一篇掃盲貼!
html

  直接部署服務器的風險

  假設,我開發了一個網站,而後買了一臺Web服務器和一臺數據庫服務器,直接部署到公共網絡上。以下圖,網站用戶經過手機、平板、臺式機等終端設備,連上網絡,輸入 118.178.109.187 這個地址,個人系統就讀取數據庫,而後直接返回一個網頁。nginx

  像這種網站部署的方式在今天的網絡部署上特別常見。這種部署方式雖然簡單、方便,高效,可是也存在着巨大的安全隱患。爲何呢?那是由於我將全部服務器資源都直接暴露在了公共網絡上。直接將服務器暴露在網上的風險特別高。據阿里統計,他們天天在全球範圍內,會被黑客攻擊大概16億次。是否是很震驚?個人兩臺服務器在網上裸奔,沒有防火牆,沒有安全策略,也不知道其餘黑客還掌握了哪些漏洞。所以一旦被各類黑客掃描到了,個人服務器就很容易淪爲別人的肉雞,任人宰割。web

  因此啊,一旦要直接暴露在網上的服務器都應該是具備強大的安全策略來方式被攻擊。好比,防火牆策略要作好,漏洞要修補好,端口不要亂開放等等。並且即使是這樣,地球上也沒有任何人敢保證他的服務器不被入侵。所以,不被入侵是不可能的了!那麼咱們應該怎麼辦呢?我以爲應該增長黑客入侵的門檻,以及減小入侵成功以後的收益。這樣費力又不討好的事情,我相信不少黑客是不肯意作的。數據庫

  那說了那麼多,怎麼操做呢?我以爲要暴露在公網上的服務器,必須都應該是不存儲任何數據的服務器,即使是服務器掛了。用戶雖然不能訪問了,可是至少數據不會丟失。 因此經常使用的策略就是,重要的東西儘可能放內網。瀏覽器

  以下圖,手機、平板、臺式機等終端設備經過公網訪問反向代理服務器。反向代理服務器上有兩張網卡,一張網卡是公共網卡,另外一張網卡是局域網網卡。反向代理服務器經過將請求反向代理到192.168.1.1這臺Web服務器,Web服務器鏈接局域網的數據庫進行SQL查詢操做,而後將數據返回給反向代理服務器,反向代理服務器再將數據經過公網傳給終端設備。安全

 

  這種技術就相對安全一點了,由於只有反向代理服務器直接暴露在公網上了,即使是反向代理服務器被攻擊了,只要局域網內的其餘服務器不被攻擊,也損失不了什麼。服務器

  反向代理

  如何理解反向代理呢?就像剛剛那個圖,反向代理(Reverse Proxy)方式是指以代理服務器來接受 internet 上的鏈接請求,而後將請求轉發給內部網絡上的服務器,並將從服務器上獲得的結果返回給 internet 上請求鏈接的客戶端,此時代理服務器對外就表現爲一個反向代理服務器。網絡

  咱們從客戶端的視野來看,實際上客戶端並不知道真實的服務提供者是哪臺服務器,它只知道它請求了反向代理服務器。所以反向代理這種方式又對外隱藏了真實服務器的地址,從必定程度上下降了安全隱患。併發

  在Windows上部署nginx實現Web服務器反向代理和負載均衡

  本次主要經過一個例子來演示一下nginx。大概流程爲,創建三個網站 分別是 192.168.17.69:20001 ,192.168.17.69:20002 ,192.168.17.69:20003  。咱們在瀏覽器上輸入 192.168.17.69 的時候,經過 nginx 反向代理這三個站點,並實現負載均衡。  app

  那麼先來介紹一下nginx吧!

  nginx (engine x) 是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務。Nginx是由伊戈爾·賽索耶夫爲俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發的,第一個公開版本0.1.0發佈於2004年10月4日。

  nginx是一款輕量級的Web 服務器/反向代理服務器及電子郵件(IMAP/POP3)代理服務器,並在一個BSD-like 協議下發行。其特色是佔有內存少,併發能力強,事實上nginx的併發能力確實在同類型的網頁服務器中表現較好,中國大陸使用nginx網站用戶有:百度、京東、新浪、網易、騰訊、淘寶等。

  nginx 的下載地址 http://nginx.org/en/download.html ,我這邊使用的是 Windows 版本  nginx-1.14.2 .,下載完以後解壓到文件夾,如圖:

  nginx的常規配置文件爲 conf / nginx.conf

  

  我這邊已經配置好了一個最基礎的反向代理和負載均衡配置:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

   #配置 nginx 的站點爲 192.168.17.67 ,反向代理 192.168.17.69:20001 , 192.168.17.69:20002 , 192.168.17.69:20003 三個站點,並實現負載均衡 server { listen
80; server_name 192.168.17.69; location / { proxy_pass http://web; index index.html index.htm; } } upstream web { server 192.168.17.69:20001; server 192.168.17.69:20002; server 192.168.17.69:20003; } }

  server 表示 nginx 服務監聽 192.168.17.69 服務器的 80 端口。進行 http 協議反向代理 web ,web下面有三個站點。多個就實現負載均衡。 

  配置完 nginx 以後,咱們將 nginx 運行起來。使用 dos 命令:nginx.exe 或者 start nginx 均可以:

  而後咱們來訪問一下 192.168.17.69

 

  

   能夠看到,我每次刷新 或者 進入 192.168.17.69 的時候,看到的頁面都有些不同。經過觀察,咱們能夠得知,nginx 將咱們的請求進行了反向代理和負責均衡。

相關文章
相關標籤/搜索