12.03 前端應該懂得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或者sudo nginx。如果nginx監聽的是80端口,需要加sudo

關閉nginx:nginx -s stop

重啟nginx:nginx -s reload或者sudo nginx -s reload。跟啟動命令相同

檢查配置:nginx -t

proxy_pass

nginx反向代理主要通過proxy_pass來配置,將你項目的開發機地址填寫到proxy_pass後面,正常的格式為proxy_pass URL即可。

server {
listen 80;
location / {
proxy_pass http://127.0.0.1:8080;
}
}

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;
}
}
}

這裡對專業名詞做個解釋:

  • worker_processes:工作進程數,和CPU核數相同
  • worker_connections: 每個進程允許的最大連接數
  • upstream模塊: 負載均衡就靠它 語法格式:upstream name {} 裡面寫的兩個server分別對應著不同的服務器
  • server模塊: 實現反向代理。 listen監督端口號,location / {}訪問根路徑,proxy_pass http://firstdemo,代理到firstdemo裡兩個服務器上
  • 注意:每次修改完nginx配置文件之後記得重啟。

    什麼是正向代理

    正向代理:局域網中的客戶端不能直接訪問Internet,則需要通過代理服務器來訪問,這種代理服務就稱為正向代理。Nginx本身只支持http的正向代理,並通過ngx_http_proxy_connect_module模塊支持http、https的正向代理;

    反向代理:如果局域網向Internet提供資源服務,讓Internet上的其他客戶端來訪問局域網內不的資源,使它們必須通過一個代理服務器來進行訪問內部資源,這種服務就稱為反向代理;Nginx通過proxy模塊實現反向代理功能。

    這是兩個比較通俗的解釋,下面我們直接上配置:

    server { 
    resolver 114.114.114.114; #指定DNS服務器IP地址
    listen 80;
    location / {
    proxy_pass http://$http_host$request_uri; #設定代理服務器的協議和地址
    proxy_set_header HOST $http_host;
    proxy_buffers 256 4k;
    proxy_max_temp_file_size 0k;
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    proxy_next_upstream error timeout invalid_header http_502;
    }
    }
    server {
    resolver 114.114.114.114; #指定DNS服務器IP地址
    listen 443;
    location / {

    proxy_pass https://$host$request_uri; #設定代理服務器的協議和地址
    proxy_buffers 256 4k;
    proxy_max_temp_file_size 0k;
    proxy_connect_timeout 30;
    proxy_send_timeout 60;
    proxy_read_timeout 60;
    proxy_next_upstream error timeout invalid_header http_502;
    }
    }

    總結

    本篇文章主要介紹了Nginx比較基礎的兩個功能,正向代理和反向代理,平時我們在公司用的比較多的應該是反向代理,正向代理一般用於我們要跟第三方聯調時,服務端要主動調用第三方接口的情況。學會了這兩種配置方法基本能滿足我們日常的開發需求,當然nginx的強大肯定不止於此,更多的功能需要大夥自己去學習了。


    分享到:


    相關文章: