天天看點

nginx 反向代理_Nginx 反向代理

nginx 反向代理_Nginx 反向代理
nginx 反向代理_Nginx 反向代理

新人大禮包,30G Java架構資料,免費領取​zhuanlan.zhihu.com

nginx 反向代理_Nginx 反向代理

學到老活到老

前端圈一直很新,一直要不停的學習,而且在進入大廠的路上,還要求熟悉一門背景語言等等。用一句别人開玩笑的話來說,java十年前的技術現在還能用,而前端的技術就不是這樣的了突然想起了deno項目釋出的時候,一個搞笑的issue,“求别更新了,老子學不動了”。雖然看起來是一個玩笑的issue,但卻道出了前端們不得不表現出來的疲态,知識點越來越龐大,學習的内容越來越多也聽到一些朋友們說,換成現在再面試阿裡,恐怕不好進了啊。當然很多都是随便一說的玩笑話,聽過一笑便可,不必當真,也不必抱怨了好了,今天就直接來說一下主題吧,前端要了解一些運維的Nginx用法,内容不多,簡單看看就好,這兩個功能在工作當中就夠用了,那麼首先來看個問題,什麼是反向代理與負載均衡

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

什麼是反向代理

當我們有一個伺服器叢集,并且伺服器叢集中的每台伺服器的内容一樣的時候,同樣我們要直接從個人電腦通路到伺服器叢集伺服器的時候無法通路,必須通過第三方伺服器才能通路叢集這個時候,我們通過第三方伺服器通路伺服器叢集的内容,但是我們并不知道是哪一台伺服器提供的内容,此種代理方式稱為反向代理

什麼是負載均衡

公司會建立很多的伺服器,這些伺服器組成了伺服器叢集,然後,當使用者通路網站的時候,先通路一個中間伺服器,再讓這個中間伺服器在伺服器叢集中選擇一個壓力較小的伺服器,然後将該通路請求引入選擇的伺服器是以,使用者每次通路,都會保證伺服器叢集中的每個伺服器壓力趨于平衡,分擔了伺服器壓力,避免了伺服器崩潰的情況一句話:nginx會給你配置設定伺服器壓力小的去通路。可以關注這個公衆号檢視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
  • nginx
  • 當你敲完nginx這5個鍵的時候,并沒有任何反應,此時你隻需通路localhost:8080(預設)即可
nginx 反向代理_Nginx 反向代理
  • 關閉nginx
  • 如果出現下圖情況,不要驚慌,是因為之前nginx被啟動過了
  • 隻需 nginx -s stop ,停止nginx服務
  • 然後再次啟動nginx即可
nginx 反向代理_Nginx 反向代理
  • 重新開機nginx
  • nginx -s reload
  • 每次修改完.conf檔案就需要重新開機nginx
  • 檢查配置
  • 檢查修改的nginx.conf配置是否正确
  • nginx -t
  • 如果出現下面ok和successfull就代表正确了,其他的都不對
  1. nginx:the configuration file/usr/local/etc/nginx/nginx.conf syntaxisok

  2. nginx:configuration file/usr/local/etc/nginx/nginx.conf testissuccessful

對于我們前端來說正常工作當中,倒是不需要過多的修改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
  • worker_connections
  • upstream子產品
  • 負載均衡就靠它
  • 文法格式:upstream name {}
  • 裡面寫的兩個server分别對應着不同的伺服器
  • server子產品
  • 實作反向代理
  • listen監督端口号
  • location / {}通路根路徑
  • proxy_pass http://firstdemo,代理到firstdemo裡兩個伺服器上

上面修改了nginx.conf之後,别忘了最重要的一步重新開機nginx那麼再次通路localhost:8080,會看到如下圖頁面

nginx 反向代理_Nginx 反向代理

還有另一個頁面

nginx 反向代理_Nginx 反向代理

每次重新整理都會通路不同的伺服器,這樣就做到了

負載均衡

處理不過,更應該做到的是當使用者第一次通路到其中一台伺服器後,下次再通路的時候就直接通路該台伺服器就好了,不用總變化了。那麼就發揮了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.http://news.so.m.qss.test.so.com這個位址就可以檢視我的開發環境,進行走查了。這就是nginx最大的功能,反向代理我也接觸的不是很多,畢竟不是專業運維出身,可比性差了很多。略知一二,也隻是友善大家工作中使用吧,再次感謝大家的收看了,哈哈

繼續閱讀