打算搭個(gè)自己的項(xiàng)目肢预。前后端完全分離读存,前端文件都不放在后端的項(xiàng)目中谨娜,所以搭個(gè)Nginx進(jìn)行請(qǐng)求的轉(zhuǎn)發(fā)航攒。也就是傳說(shuō)中的反向代理了。后面再折騰一下負(fù)載均衡功能趴梢,畢竟Nginx兩大功能漠畜,不能不體驗(yàn)啊。
環(huán)境 window10 + springboot + Nginx-1.14.0坞靶。
常用命令:
1憔狞、啟動(dòng):
C:\server\nginx-1.0.2>start nginx或
C:\server\nginx-1.0.2>nginx.exe
2、停止:
C:\server\nginx-1.0.2>nginx.exe -s stop或
C:\server\nginx-1.0.2>nginx.exe -s quit
注:stop是快速停止nginx彰阴,可能并不保存相關(guān)信息瘾敢;quit是完整有序的停止nginx,并保存相關(guān)信息。
3簇抵、重新載入Nginx:
C:\server\nginx-1.0.2>nginx.exe -s reload
當(dāng)配置信息修改庆杜,需要重新載入這些配置時(shí)使用此命令。
4正压、重新打開(kāi)日志文件:
C:\server\nginx-1.0.2>nginx.exe -s reopen
5、查看Nginx版本:
C:\server\nginx-1.0.2>nginx -v
反向代理:
先起一個(gè)8889端口责球。暴露一個(gè)api接口:http://localhost:8889/hello
然后我們配置一下配置文件焦履,隱藏一下真正的地址。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
index index.html index.htm;
root D:\Devs\simple\src\main;
location /test/ {
proxy_pass http:// localhost:8889/;
}
}
}
然后訪問(wèn)localhost/test/hello的請(qǐng)求會(huì)被映射到http://localhost:8889/hello雏逾。由于80端口是默認(rèn)端口嘉裤,所以可以不寫(xiě),其中server_name主要用來(lái)匹配url地址栖博。其中proxy_pass屬性可以有很多種配法屑宠。推薦一個(gè)nginx 之 proxy_pass詳解。到目前為止仇让,方向代理成功了典奉。
負(fù)載均衡:
起4個(gè)服務(wù),分別部署在8889端口-8892端口丧叽。然后寫(xiě)配置文件->
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
upstream tomcatserver {
server localhost:8889 down; #不參加負(fù)載
server localhost:8890 weight=2; #權(quán)重為2
server localhost:8891 max_fails=3 fail_timeout=30s; #在30秒內(nèi)最多失敗3次
server localhost:8892 backup; #備用服務(wù)卫玖,負(fù)載最輕
}
server {
listen 80;
server_name localhost;
index index.html index.htm;
root D:\Devs\simple\src\main;
location /test/ {
proxy_pass http://tomcatserver/;
}
location /api/ {
proxy_pass http://localhost:8889/blog/;
}
location /hub/ {
proxy_pass http://127.0.0.1:9090/sso/;
}
}
}
至此負(fù)載均衡也簡(jiǎn)單的實(shí)現(xiàn)了。這時(shí)我們來(lái)關(guān)注一下Nginx的負(fù)載均衡策略踊淳,他有5種:
1假瞬、輪詢(默認(rèn))
每個(gè)請(qǐng)求按時(shí)間順序逐一分配到不同的后端服務(wù)器,如果后端服務(wù)器down掉迂尝,能自動(dòng)剔除脱茉。
upstream backserver {
server 192.168.0.14;
server 192.168.0.15;
}
2、指定權(quán)重
指定輪詢幾率垄开,weight和訪問(wèn)比率成正比琴许,用于后端服務(wù)器性能不均的情況。
upstream backserver {
server 192.168.0.14 weight=10;
server 192.168.0.15 weight=10;
}
3溉躲、IP綁定 ip_hash
每個(gè)請(qǐng)求按訪問(wèn)ip的hash結(jié)果分配虚吟,這樣每個(gè)訪客固定訪問(wèn)一個(gè)后端服務(wù)器,可以解決session的問(wèn)題签财。
upstream backserver {
ip_hash;
server 192.168.0.14:88;
server 192.168.0.15:80;
}
4串慰、fair(第三方)
按后端服務(wù)器的響應(yīng)時(shí)間來(lái)分配請(qǐng)求,響應(yīng)時(shí)間短的優(yōu)先分配唱蒸。
upstream backserver {
server server1;
server server2;
fair;
}
5邦鲫、url_hash(第三方)
按訪問(wèn)url的hash結(jié)果來(lái)分配請(qǐng)求,使每個(gè)url定向到同一個(gè)后端服務(wù)器,后端服務(wù)器為緩存時(shí)比較有效庆捺。
upstream backserver {
server squid1:3128;
server squid2:3128;
hash $request_uri;
hash_method crc32;
}
具體實(shí)現(xiàn)古今,請(qǐng)參見(jiàn)源碼。實(shí)在是看不太懂滔以。捉腥。
結(jié)束
nginx實(shí)現(xiàn)反向代理及負(fù)載均衡
nginx 配置詳解(新手必看)
一張腦圖說(shuō)清 Nginx 的主流程