Nginx反向代理與負載均衡

什麼是反向代理與負載均衡

什麼是反向代理

當咱們有一個服務器集羣,而且服務器集羣中的每臺服務器的內容同樣的時候,一樣咱們要直接從我的電腦訪問到服務器集羣服務器的時候沒法訪問,必須經過第三方服務器才能訪問集羣。
這個時候,咱們經過第三方服務器訪問服務器集羣的內容,可是咱們並不知道是哪一臺服務器提供的內容,此種代理方式稱爲反向代理。

什麼是負載均衡

公司會創建不少的服務器,這些服務器組成了服務器集羣,而後,當用戶訪問網站的時候,先訪問一箇中間服務器,再讓這個中間服務器在服務器集羣中選擇一個壓力較小的服務器,而後將該訪問請求引入選擇的服務器。
因此,用戶每次訪問,都會保證服務器集羣中的每一個服務器壓力趨於平衡,分擔了服務器壓力,避免了服務器崩潰的狀況。
一句話:Nginx會給你分配服務器壓力小的去訪問。

Nginx反向代理與負載均衡的實現

用戶訪問網站的時候首先會訪問Nginx服務器,而後Nginx服務器再從服務器集羣中選擇壓力較小的服務器,將該訪問請求引向該服務器。

Nginx配置

下面修改配置方面我就從Mac系統下來進行簡單的演示,如何安裝的話也暫以Mac爲主了,Windows系統直接去Nginx官網下載安裝便可。
安裝nginx

1-進到homebrew官網,而後複製命令,預安裝須要的東西

2-brew install nginx    安裝nginx

3-nginx -v  顯示版本號

進入nginx

cd /usr/local/etc/nginx

複製代碼
下圖爲進入Nginx文件夾下的文件內容。


當進到這個目錄下,咱們就能夠操做Nginx了,接下來就列舉一些很是很是有用的命令,多敲幾遍,必定要記住。
Nginx經常使用命令
  • 啓動Nginx
  • Nginx
  • 當你敲完Nginx這5個鍵的時候,並無任何反應,此時你只需訪問localhost:8080(默認)便可


  • 關閉Nginx
  • 若是出現下圖狀況,不要驚慌,是由於以前Nginx被啓動過了
  • 只需nginx -s stop,中止Nginx服務
  • 而後再次啓動Nginx便可


  • 重啓Nginx
  • nginx -s reload
  • 每次修改完.conf文件就須要重啓nginx

  • 檢查配置
  • 檢查修改的nginx.conf配置是否正確
  • nginx -t
  • 若是出現下面ok和successfull就表明正確了,其餘的都不對

nginx: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok

nginx: configuration file /usr/local/etc/nginx/nginx.conf test is successful

複製代碼
對於咱們前端來講正常工做當中,卻是不須要過多的修改Nginx的。咱們之因此修改Nginx配置,是爲了作一些反向代理罷了。

proxy_pass

Nginx反向代理主要經過proxy_pass來配置,將你項目的開發機地址填寫到proxy_pass後面,正常的格式爲proxy_pass URL便可:
server {

listen 80;

location / {

    proxy_pass http://10.10.10.10:20186;

}

} 

複製代碼

Upstream模塊實現負載均衡

  • ip_hash指令
  • server指令
  • upstream指令及相關變量
上面寫的三個指令,咱們直接經過代碼來一一分析:
// 修改nginx.conf

worker_processes 1;

events {

worker_connections 1024;

}

http {

upstream firstdemo {

    server 39.106.145.33;

    server 47.93.6.93;

}

server {

    listen 8080;

    location / {

        proxy_pass http://firstdemo;

    }

}

} 

複製代碼
上面修改的nginx.conf就是上圖中花圈的那個文件,Nginx配置的主要修改就在這裏。化繁爲簡,把本來nginx.conf裏的內容直接替換爲上面的不到20行的代碼了。
既然不到20行,那就把裏面對應的內容通通解釋一下吧,有個瞭解就好
  • worker_processes
  • 工做進程數,和CPU核數相同

  • worker_connections
  • 每一個進程容許的最大鏈接數

  • upstream模塊
  • 負載均衡就靠它
  • 語法格式:upstream name {}
  • 裏面寫的兩個server分別對應着不一樣的服務器

  • server模塊
  • 實現反向代理
  • listen監督端口號
  • location / {}訪問根路徑
  • proxy_pass http://firstdemo ,代理到firstdemo裏兩個服務器上

上面修改了nginx.conf以後,別忘了最重要的一步重啓Nginx。
那麼再次訪問localhost:8080,會看到以下圖頁面:


還有另外一個頁面:


每次刷新都會訪問不一樣的服務器,這樣就作到了負載均衡處理
不過,更應該作到的是當用戶第一次訪問到其中一臺服務器後,下次再訪問的時候就直接訪問該臺服務器就行了,不用總變化了。那麼就發揮了ip_hash的威力了。
// 省略...

upstream firstdemo {

    ip_hash;

    server 39.106.145.33;

    server 47.93.6.93;

} 

複製代碼
ip_hash它的做用是若是第一次訪問該服務器後就記錄,以後再訪問都是該服務器了,這樣好比第一次訪問是33服務器,那以後再訪問也會分配爲33服務器訪問了。

工做中的簡單使用

在公司開發項目的時候,遇到設計,產品走查環節的時候,不能每次都讓他們去配一個host,畢竟這樣不友好,走查起來有麻煩。因此更應該給他們直觀的感覺,既給一個訪問地址就能夠看到樣子。
下面給你們看一下,我正常在公司時nginx作的反向代理配置,和我們上面的一模一樣,只是加了一個server_name,用指定的域名去訪問便可。
server {

listen       80;

server_name  chd.news.so.m.qss.test.so.com ;

auth_basic off;

location / {

    proxy_pass    http://10.10.10.10:20186;

    proxy_set_header Host $host;

    proxy_redirect off;

    proxy_set_header X-Real-IP $remote_addr;

    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    proxy_connect_timeout 60;

    proxy_read_timeout 600;

    proxy_send_timeout 600;

}

} 

複製代碼
每次修改完Nginx配置後不要忘記重啓Nginx才能生效,這樣只須要訪問chd.news.so.m.qss.test.so.com這個地址就能夠查看個人開發環境,進行走查了。
歡迎工做一到五年的Java工程師朋友們加入Java程序員開發: 721575865
羣內提供免費的Java架構學習資料(裏面有高可用、高併發、高性能及分佈式、Jvm性能調優、Spring源碼,MyBatis,Netty,Redis,Kafka,Mysql,Zookeeper,Tomcat,Docker,Dubbo,Nginx等多個知識點的架構資料)合理利用本身每一分每一秒的時間來學習提高本身,不要再用"沒有時間「來掩飾本身思想上的懶惰!趁年輕,使勁拼,給將來的本身一個交代!
相關文章
相關標籤/搜索