nginx功能扩展整理
0、基本負(fù)載均衡配置
?
編輯/etc/nginx/nginx.conf,加入負(fù)載平衡配置:
?
http { upstream tomcat {server localhost:8080;server localhost:8081;} include /etc/nginx/mime.types; default_type application/octet-stream;?
更新/etc/nginx/conf.d/default.conf,配置反向代理:
?
location / {proxy_pass http://tomcat;}?
重新啟動(dòng)Nginx:
?
sudo service nginx restart1、子請(qǐng)求
當(dāng)一個(gè)請(qǐng)求發(fā)起一個(gè)“子請(qǐng)求”的時(shí)候,依照 Nginx 的術(shù)語(yǔ),習(xí)慣把前者稱為后者的“父請(qǐng)求”(parent request)。
location /main {echo_location /foo; # echo_location發(fā)送子請(qǐng)求到指定的locationecho_location /bar; } location /foo {echo foo; } location /bar {echo bar; }輸出:
$ curl location/main
$ foo ? 03. ?bar
這里,main location就是發(fā)送2個(gè)子請(qǐng)求,分別到foo和bar。這就類似一種函數(shù)調(diào)用。
“子請(qǐng)求”方式的通信是在同一個(gè)虛擬主機(jī)內(nèi)部進(jìn)行的。所以 Nginx 核心在實(shí)現(xiàn)“子請(qǐng)求”的時(shí)候,就僅僅調(diào)用了若干個(gè) C 函數(shù),全然不涉及不論什么網(wǎng)絡(luò)或者 UNIX 套接字(socket)通信。我們由此能夠看出“子請(qǐng)求”的運(yùn)行效率是極高的。
2、ngx_lua簡(jiǎn)單例子
Hello Lua!
# nginx.conf worker_processes 4;events {worker_connections 1024; } http {server {listen 80;server_name localhost;location=/lua {content_by_lua ‘ngx.say("Hello, Lua!")';}} }輸出:
$ curl 'localhost/lua'
Hello,Lua。
3、配置session粘滯
需要配置Tomcat存儲(chǔ)會(huì)話到Redis,我們需要使用 tomcat-redis-session-manager開(kāi)源庫(kù)包,具體需要一些調(diào)整,下載這個(gè)項(xiàng)目的源碼項(xiàng)目,重新構(gòu)建,本文使用版本為commons-pool2-2.2.jar 和 jedis-2.6.1.jar.復(fù)制這些Jar到tomcat的lib目錄。將你的commons-pool, jedis 更新版本和tomcat版本在tomcat-redis-session-manager的build.gradle中配置一下,然后重新構(gòu)建項(xiàng)目,將構(gòu)建結(jié)果 tomcat-redis-session-manager-1.2.jar 復(fù)制到tomcat lib目錄下,兩個(gè)實(shí)例都要復(fù)制,修改每個(gè)tomcat的conf/content.xml文件,在tomcat的context.xml中配置:
<Valve className="com.orangefunction.tomcat.redissessions.RedisSessionHandlerValve" /> <Manager className="com.orangefunction.tomcat.redissessions.RedisSessionManager" host="localhost" port="6379" database="0" maxInactiveInterval="60" />重新啟動(dòng)tomcat一切完成,你現(xiàn)在可以看到tomcat會(huì)話存儲(chǔ)在redis中,使用先前tomcat內(nèi)置案例,試驗(yàn)兩個(gè)tomcat開(kāi)機(jī)和關(guān)機(jī)不同情況進(jìn)行測(cè)試,會(huì)話數(shù)據(jù)都不會(huì)受到影響。
4、nginx集群設(shè)置方向
? 如果有多臺(tái)NGINX想實(shí)現(xiàn)負(fù)載均衡的話,
1、每臺(tái)nginx都有公網(wǎng)地址,在域名處設(shè)置同個(gè)域名多個(gè)指向,最簡(jiǎn)單實(shí)現(xiàn)輪洵。但故障切負(fù)會(huì)慢一點(diǎn)。
2、一臺(tái)公網(wǎng)nginx通過(guò)upstream功能,輪洵、ip、url多方式分發(fā)到內(nèi)網(wǎng)多臺(tái)nginx。但公網(wǎng)的nginx如果down機(jī)的話,內(nèi)網(wǎng)全段。
3、一對(duì)公網(wǎng)nginx加三個(gè)公網(wǎng)ip,通過(guò)keepalive實(shí)現(xiàn)高可用,再upstream到內(nèi)網(wǎng)(就是我們剛剛上一節(jié)講的主從備份)。
一般來(lái)說(shuō),上面1、2、3種方法基本可以解決,建議用2或3;
如果并發(fā)量真的巨大的話,一般就要借助硬件F5等設(shè)備做負(fù)載均衡,跟DNS、CDN等服務(wù)商合作做域名解析轉(zhuǎn)發(fā)、緩存配置,這也是目前大多數(shù)大廠的架構(gòu)配置。
5、失效轉(zhuǎn)移設(shè)置
如果后端tomcat服務(wù)器處理超時(shí),則nginx不請(qǐng)求下一個(gè)tomcat節(jié)點(diǎn),而是直接返回。nginx默認(rèn),會(huì)重復(fù)嘗試所有的節(jié)點(diǎn)以后,才會(huì)返回給瀏覽器錯(cuò)誤。例如:在location設(shè)置參數(shù)(默認(rèn)值也是如此):?
proxy_next_upstream http_502 http_504 error timeout invalid_header;?
其中有一個(gè)參數(shù)值 timeout,這個(gè)參數(shù)代表如果超時(shí),則嘗試其他節(jié)點(diǎn)。因此要去掉這個(gè)參數(shù),修改后如下?
proxy_read_timeout 1;?
proxy_next_upstream http_502 http_504 error invalid_header;?
?
轉(zhuǎn)載于:https://www.cnblogs.com/chappell/p/10609433.html
總結(jié)
以上是生活随笔為你收集整理的nginx功能扩展整理的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: learning hdmi edid p
- 下一篇: Java-Runoob:Java Str