前文鏈接
[JavaEE] 搭建SpringCloud環(huán)境 進入微服務時代
http://www.reibang.com/p/a0365a635975
溫馨提示:本文是基于前文的擴展 沒有基礎(chǔ)的新手可以先去學習上文
一.簡介
最近玩了玩Nginx
感覺體驗還不錯 只是網(wǎng)上的文章有些讓我迷惑 所以我來寫一篇比較簡潔的文章記錄一下
Nginx (engine x) 是一個高性能的HTTP和反向代理服務,也是一個IMAP/POP3/SMTP服務刻撒。Nginx是由伊戈爾·賽索耶夫為俄羅斯訪問量第二的Rambler.ru站點(俄文:Рамблер)開發(fā)的椒惨,第一個公開版本0.1.0發(fā)布于2004年10月4日谍椅。
通俗的講 就是一個服務器 我們在開發(fā)中主要用于做反向代理
與負載均衡
功能 下面就跟著我們的鏡頭一起來看吧!
二.安裝
Nginx
官網(wǎng): http://nginx.org/en/
本文基于的環(huán)境是macOS 10.13.6
所以這里只講述Mac
上的安裝方法Windows
請自行安裝
1.安裝Homebrew
Homebrew
是一套非常好用的包管理工具 我們可以直接使用它來安裝Nginx
首先在終端執(zhí)行
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
一行代碼完事 安裝好之后 輸入brew
查看是否安裝正確
2.安裝Nginx
很簡單 在終端中輸入命令
brew install Nginx
但是在安裝過程中有可能遇到一個錯誤
問題出在了文件夾訪問權(quán)限上 我們使用chmod
命令來給文件夾授權(quán)
sudo chmod 777 /usr/local/sbin
授權(quán)之后再次執(zhí)行安裝即可
brew install Nginx
我們看到下圖的提示就說明安裝成功了
二.開始使用
1.讓我們跑起來
經(jīng)過上述步驟 我們的Nginx
已經(jīng)安裝完畢了 之后我們來啟動一下吧 直接在終端中輸入:
nginx
如果沒有任何錯誤提示 證明已經(jīng)啟動成功了...
我們打開localhost:8080
來訪問一下
看到如上圖的樣子說明Nginx
已經(jīng)啟動成功了 好了下課 - - (開玩笑的)
接下來你有可能會有疑問 接下來我們用它做啥子呢?
我在文章開頭已經(jīng)說過了Nginx
主要實現(xiàn)兩個功能反向代理
和負載均衡
2.反向代理
什么是反向代理呢? 其實很好理解 就是通過Nginx
轉(zhuǎn)發(fā)請求到你其他的接口 以達到隱藏服務器真實地址
的功能
下面我們就來配置一下 首先定位到配置文件路徑
/usr/local/etc/nginx/nginx.conf
command
+ shift
+ g
直接追過去
之后我們會看到一個nginx.conf
先別急 首先我們把這個文件復制一份 防止改壞了(程序員必備思想 - -)
之后用文本編輯器打開 可以看到一大坨代碼 我把注釋的地方都刪了
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
include servers/*;
}
我們可以看見有一個叫server
的字段 我們在這里面就可以配置服務器相關(guān)的東西了
localhost
服務器監(jiān)聽端口號
好的我們接下來就來配置一下反向代理 我們只需要在server
里面的location
中添加一個proxy_pass [空格] 你的服務器地址
即可
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://localhost:8082;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
我這里在本地開了個8082
端口的微服務 你們自行開啟 如果不會 請學習我的springcloud
文章5分鐘搭建出微服務
http://www.reibang.com/p/a0365a635975
我們修改完配置之后需要重新啟動Nginx
首先結(jié)束進程
nginx -s stop
然后重新啟動
nginx
好的 我們來試驗一下效果吧 這里不要忘了 修改完配置文件必須重啟Nginx
才能生效
我們可以看到 我訪問的是Nginx
的8080
端口 而我的服務是在8082
上面的 這時Nginx
會把請求轉(zhuǎn)發(fā)到8082
讓我可以訪問到服務 可以看到網(wǎng)頁上寫著8082
這是我在服務內(nèi)部打印的端口
我們成功訪問了接口 但是并沒有暴露出服務器的地址 這就是所謂的反向代理 你請求給Nginx
它幫你轉(zhuǎn)發(fā)到你的本地服務上去
3.負載均衡
負載均衡就是把用戶的請求 分攤到功能相同的不同服務器上去 來減輕單個服務器的壓力 我想有些人到這里應該不太明白 我舉個例子解釋一下
百度
這個網(wǎng)站每天有幾億人
進行訪問 這么龐大的訪問量往往用一個服務器是不可能完成快速響應的 所以百度使用了集群策略 買了100臺服務器 每個服務器都能提供搜索服務 用戶訪問百度的時候 會按照一定邏輯 隨機訪問其中一個 這樣就不至于造成單個壓力過大而宕機了 反過來說 即使單個服務器宕機后 還有99個服務器可以服務 所以搜索功能是不受影響的
這篇文章我用本地來模擬一下負載均衡
我從本地開兩個服務:8082和:8083做集群
之后我們來簡單配置一下nginx.conf
文件
upstream jiqun {
server localhost:8082;
server localhost:8083;
}
server {
listen 8080;
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://jiqun;
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
配置中可以看到 首先聲明兩個服務 起個別名為jiqun
之后我們修改proxy_pass
為http://jiqun
就可以了 這樣我們訪問接口的時候 就會隨機轉(zhuǎn)發(fā)到這兩個相同的服務上去 實現(xiàn)負載均衡了
我們可以看到 訪問同一個網(wǎng)址 會在兩個不同端口的微服務之間來回切換 說明我們已經(jīng)實現(xiàn)了負載均衡
了
好的 接下來 我們來引入一個概念權(quán)重
假如我們有兩個服務器
一個處理能力強
一個處理能力弱
我們希望讓處理能力強的服務器 多接收一些用戶請求 所以我們就要給nginx配置權(quán)重
upstream jiqun {
server localhost:8082 weight=2;
server localhost:8083 weight=1;
}
weight
就是權(quán)重 配置為2的權(quán)重要比1高 我們來實際看一下效果 好的重啟Nginx
我們來看看效果
我看一下圖2
1.訪問4次8082
2.訪問2次8083
3.循環(huán)
而沒有配置的權(quán)重的圖1
1.訪問2次8082
2.訪問2次8083
3.循環(huán)
所以沒有配置過權(quán)重 默認就是同樣的權(quán)重 好了 這就是Nginx
最基本的配置實現(xiàn)了