目錄
Ubuntu中安裝Nginx
概念介紹
負載均衡
幾種負載均衡算法
反向代理
環(huán)境規(guī)劃
配置反向代理
加權負載均衡(Weighted Load Balancing)
輪詢(Round Robin)
IP 哈希(IP Hash)
最少連接(Least Connections)
URL 哈希(URL Hash)
想要安裝nginx,首先我們需要有一臺Ubuntu的虛擬機,然后最好在沒有安裝前做一個快照,防止出錯可以快速恢復到沒有安裝前的狀態(tài)
Ubuntu中安裝Nginx
(1)安裝依賴庫
sudo apt install libgd-dev
(2)下載nginx的源碼包
wget http://nginx.org/download/nginx-1.22.1.tar.gz
(3)解壓該壓縮包
tar -zvxf nginx-1.22.1.tar.gz
(4)進入到解壓完成的nginx目錄中,進行編譯安裝
cd nginx-1.22.1
(5)編譯并指定安裝位置,執(zhí)行安裝之后會創(chuàng)建指定文件夾/www/nginx
但是這編譯卻有很多的文件找不到,并且報錯說沒有prce庫,PCRE庫支持正則表達式。如果我們在配置文件nginx.conf中使用了正則表達式,那么在編譯Nginx時就必須把PCRE庫編譯進Nginx,因為Nginx的HTTP模塊需要靠它來解析正則表達式。
可以使用下載libpcre3和libpcre3-dev的方法來解決:
sudo apt update
sudo apt install libpcre3 libpcre3-dev
(6)編譯完成后進行安裝
make && make install
安裝完成后,移動到/www/nginx目錄下就可以看到幾個文件了
conf/ - 這個目錄包含Nginx的配置文件,用于配置服務器的行為,包括虛擬主機配置、代理設置等。
html/ - 這個目錄通常包含Nginx服務器的網頁文件,也就是網站的內容文件,比如HTML、CSS、JavaScript文件等。
logs/ - 這個目錄包含Nginx服務器的日志文件,記錄了服務器的活動、訪問日志、錯誤日志等。
sbin/ - 這個目錄包含Nginx服務器的可執(zhí)行文件,是服務器的主要執(zhí)行文件,用于啟動、停止、重載服務器等操作。
(7)使用
啟動Nginx:
sbin/nginx
除了啟動還有一些常用的命令:
nginx -s reload 修改配置后重新加載生效
nginx -s stop 快速停止nginx
nginx -s start 啟動nginx
nginx -s quit 完整有序的停止nginx
nginx -v 查看nginx的版本
nginx -V 查看版本和nginx的配置選項
nginx -t -c /path/to/nginx.conf 測試nginx配置文件是否正確
nginx -s reopen 重新打開日志文件
啟動完成后可以在瀏覽器中輸入Ubuntu機器的ipd地址,檢查是否成功運行:
可以看到是正常運行的?
概念介紹
因為需要配置反向代理實現(xiàn)負載均衡,這里需要先知道一下反向代理和負載均衡分別都是什么
負載均衡
當一個網站需要多臺服務器時,通常會部署負載均衡器,因為請求量太大,單臺服務器無法進行高效處理。部署多臺服務器還有助于消除單點故障,從而提高網站的可靠性。
幾種負載均衡算法
-
1.輪詢?每個請求按照時間順序逐一分配到下游的服務節(jié)點,如果其中某一節(jié)點故障,nginx 會自動剔除故障系統(tǒng)使用戶使用不受影響。
-
2.加權負載均衡?在配置文件中對下游的服務節(jié)點指定權重值 weight, weight 值越大則被分配的評率越高,一般這種負載均衡,用于節(jié)點的配置情況不一樣,有的可能配置高,有的配置低。
-
3.ip hash 對每個請求,針對 ip 進行 hash, 然后分配到后臺節(jié)點,這樣一來,同一 ip 會被固定分配到下游固定服務上。它能夠暫時的解決集群環(huán)境中容器之間 session 共享的問題(因為session每次只能和一個人,一對一的記錄,但是如果現(xiàn)在需要負載均衡就出現(xiàn)了一種一對多的情況,可以使用ip_hash實現(xiàn)一對一),但是不是解決的根本之道,只是權宜之策,我們試想,如果訪問的好好的,家里的路由器被重啟了,或者運營商分配給你的 ip 地址改變了,那么你再次訪問的時候,新的 ip 就可能被分配到新的服務上,之前的 session 也就失效了。
-
4.least_conn (最少連接調度算法) 最少連接調度算法,對下游服務中連接情況,優(yōu)先選擇連接數最少的服務分配。
-
5.url_hash按訪問的URL的哈希結果來分配請求,使每個URL定向到一臺后端服務器,可以進一步提高后端緩存服務器的效率。Nginx本身不支持url_hash,如果需要這種調度算法,則必須安裝Nginx的hash軟件包。
反向代理
反向代理接受來自客戶端的請求,將其轉發(fā)到可完成該請求的服務器,并將服務器的響應返回給客戶端。
環(huán)境規(guī)劃
了解了負載均衡和反向代理都是什么后那么現(xiàn)在開始來進行演示,這里需要使用反向代理實現(xiàn)負載均衡最少需要三臺設備,這里我的計劃是這樣的:
centos1(192.168.159.200):作為web服務器
Ubuntu(192.168.159.202):作為負載均衡服務器2號
centos2(192.168.159.201):作為負載均衡服務器1號
畫一張圖來演示一下:
?
首先來測試一下兩個服務器的nginx頁面是否可以成功訪問
centos2:
Ubuntu:
可以看到這里的兩臺設備都是可以正常訪問的
配置反向代理
現(xiàn)在我們就可以在centos1上配置反向代理了
加權負載均衡(Weighted Load Balancing)
(1)首先進入到對應的安裝nginx的目錄的conf目錄下:
cd /etc/nginx/
(2)編輯配置文件:
vim nginx.conf
upstream nginx_boot{
# 30s內檢查心跳發(fā)送兩次包,未回復就代表該機器宕機,請求分發(fā)權重比為1:2
server 192.168.159.201 weight=100 max_fails=2 fail_timeout=30s;
server 192.168.159.202 weight=100 max_fails=2 fail_timeout=30s;
# 這里的IP請配置成你WEB服務所在的機器IP
}
server {
listen 80;
server_name 192.168.159.200;
location / {
root html; # 配置一下index的地址,最后加上index.ftl。
index index.html index.htm index.jsp index.ftl;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 請求交給名為nginx_boot的upstream上
proxy_pass http://nginx_boot;
}
location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
root /usr/local/nginx/html/static;
expires 7d;}
}
(2)修改完成后一定要重新啟動nginx服務
systemctl restart nginx.service
(3)然后我們就可以在瀏覽器中再次訪問192.168.159.200
第一次:
第二次:
可以從上面兩次訪問的結果看到,這里的反向代理已經實現(xiàn)了。我們第一次訪問192.168.159.200(centos1)流量被轉發(fā)到centos2(192.168.159.201)上,然后第二次訪問流量被轉發(fā)到了ubuntu(192.168.159.202)上,成功的實現(xiàn)了負載均衡。
這里是使用的權重的方式來實現(xiàn)的,上面的例子中,我將兩臺設備的權重均設置為100,所以,都是每次刷新都會換另外一個設備響應,在實際應用中是可以根據服務器的性能和流量大小來更加靈活的設置權重。
后面再來分別演示一下輪詢算法和ip-hash算法的實現(xiàn)效果
輪詢(Round Robin)
首先介紹一下輪詢算法:每個請求按照時間順序逐一分配到下游的服務節(jié)點,如果其中某一節(jié)點故障,nginx 會自動剔除故障系統(tǒng)使用戶使用不受影響。
輪詢算法的配置非常的簡單,甚至比權重算法都簡單,只需要在web服務器的nginx配置文件中將每個ip后的weight去掉即可
修改后的配置文件:
upstream nginx_boot{
# 30s內檢查心跳發(fā)送兩次包,未回復就代表該機器宕機,請求分發(fā)權重比為1:2
server 192.168.159.201 max_fails=2 fail_timeout=30s;
server 192.168.159.202 max_fails=2 fail_timeout=30s;
# 這里的IP請配置成你WEB服務所在的機器IP
}
server {
listen 80;
server_name 192.168.159.200;
location / {
root html; # 配置一下index的地址,最后加上index.ftl。
index index.html index.htm index.jsp index.ftl;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 請求交給名為nginx_boot的upstream上
proxy_pass http://nginx_boot;
}
location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
root /usr/local/nginx/html/static;
expires 7d;}
}
可以再次訪問一下:
第一次:
第二次:?
可以看到還是兩次訪問,分被將流量分到了兩個設備個一次,這也就是輪詢,一人一次
IP 哈希(IP Hash)
對每個請求,針對 ip 進行 hash, 然后分配到后臺節(jié)點,這樣一來,同一 ip 會被固定分配到下游固定服務上。
比如說我現(xiàn)在就要每次都讓訪問centos1(192.168.159.200)的流量只分配到centos2(192.168.159.201)上,不去ubuntu,當然在本例中只有兩臺負載均衡設備,可以直接關閉一臺達到同樣的效果,但是實際應用中我想不會這么簡單,這里還是修改nginx配置文件為:
upstream nginx_boot{
ip_hash;
# 30s內檢查心跳發(fā)送兩次包,未回復就代表該機器宕機,請求分發(fā)權重比為1:2
server 192.168.159.201 weight=100 max_fails=2 fail_timeout=30s;
server 192.168.159.202 weight=100 max_fails=2 fail_timeout=30s;
# 這里的IP請配置成你WEB服務所在的機器IP
}
server {
listen 80;
server_name 192.168.159.200;
location / {
root html; # 配置一下index的地址,最后加上index.ftl。
index index.html index.htm index.jsp index.ftl;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 請求交給名為nginx_boot的upstream上
proxy_pass http://nginx_boot;
}
location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
root /usr/local/nginx/html/static;
expires 7d;}
}
這樣我們無論刷新頁面多少次,響應的始終都是Ubuntu(192.168.159.202)這臺設備響應
最少連接(Least Connections)
最少連接調度算法,對下游服務中連接情況,優(yōu)先選擇連接數最少的服務分配。使用最少連接策略可以避免出現(xiàn)某些服務器負載過重的情況。
最少連接的算法將配置文件修改為:
upstream nginx_boot{
least_conn;
# 30s內檢查心跳發(fā)送兩次包,未回復就代表該機器宕機,請求分發(fā)權重比為1:2
server 192.168.159.201 weight=100 max_fails=2 fail_timeout=30s;
server 192.168.159.202 weight=100 max_fails=2 fail_timeout=30s;
# 這里的IP請配置成你WEB服務所在的機器IP
}
server {
listen 80;
server_name 192.168.159.200;
location / {
root html; # 配置一下index的地址,最后加上index.ftl。
index index.html index.htm index.jsp index.ftl;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 請求交給名為nginx_boot的upstream上
proxy_pass http://nginx_boot;
}
location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
root /usr/local/nginx/html/static;
expires 7d;}
}
這樣配置后根據least_conn 策略將會我們請求的分配到連接數最少的服務器上。但是這里我們只有三臺設備無法演示連接最少的環(huán)境,就不演示了。
URL 哈希(URL Hash)
url_hash按訪問的URL的哈希結果來分配請求,使每個URL定向到一臺后端服務器,可以進一步提高后端緩存服務器的效率。Nginx本身不支持url_hash,如果需要這種調度算法,則必須安裝Nginx的hash軟件包。
該策略的配置如下:
upstream nginx_boot{
hash $request_uri;
# 30s內檢查心跳發(fā)送兩次包,未回復就代表該機器宕機,請求分發(fā)權重比為1:2
server 192.168.159.201 weight=100 max_fails=2 fail_timeout=30s;
server 192.168.159.202 weight=100 max_fails=2 fail_timeout=30s;
# 這里的IP請配置成你WEB服務所在的機器IP
}
server {
listen 80;
server_name 192.168.159.200;
location / {
root html; # 配置一下index的地址,最后加上index.ftl。
index index.html index.htm index.jsp index.ftl;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# 請求交給名為nginx_boot的upstream上
proxy_pass http://nginx_boot;
}
location ~ .*.(gif|jpg|jpeg|bmp|png|ico|txt|js|css){
root /usr/local/nginx/html/static;
expires 7d;}
}
?在配置文件中hash指令將哈希算法設置為URL哈希,$request_uri表示使用請求的URL作為哈希值。因為需要安裝相應的軟件包和環(huán)境不滿足,這里也就不再演示了文章來源:http://www.zghlxwxcb.cn/news/detail-823820.html
到此,Ubuntu下安裝nginx和使用五種算法實現(xiàn)nginx反向代理負載均衡就完成了(^▽^)文章來源地址http://www.zghlxwxcb.cn/news/detail-823820.html
到了這里,關于編譯安裝Nginx和使用五種算法實現(xiàn)Nginx反向代理負載均衡的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!