nginx功能扩展整理
0、基本負載均衡配置
?
編輯/etc/nginx/nginx.conf,加入負載平衡配置:
?
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;}?
重新啟動Nginx:
?
sudo service nginx restart1、子請求
當一個請求發起一個“子請求”的時候,依照 Nginx 的術語,習慣把前者稱為后者的“父請求”(parent request)。
location /main {echo_location /foo; # echo_location發送子請求到指定的locationecho_location /bar; } location /foo {echo foo; } location /bar {echo bar; }輸出:
$ curl location/main
$ foo ? 03. ?bar
這里,main location就是發送2個子請求,分別到foo和bar。這就類似一種函數調用。
“子請求”方式的通信是在同一個虛擬主機內部進行的。所以 Nginx 核心在實現“子請求”的時候,就僅僅調用了若干個 C 函數,全然不涉及不論什么網絡或者 UNIX 套接字(socket)通信。我們由此能夠看出“子請求”的運行效率是極高的。
2、ngx_lua簡單例子
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存儲會話到Redis,我們需要使用 tomcat-redis-session-manager開源庫包,具體需要一些調整,下載這個項目的源碼項目,重新構建,本文使用版本為commons-pool2-2.2.jar 和 jedis-2.6.1.jar.復制這些Jar到tomcat的lib目錄。將你的commons-pool, jedis 更新版本和tomcat版本在tomcat-redis-session-manager的build.gradle中配置一下,然后重新構建項目,將構建結果 tomcat-redis-session-manager-1.2.jar 復制到tomcat lib目錄下,兩個實例都要復制,修改每個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" />重新啟動tomcat一切完成,你現在可以看到tomcat會話存儲在redis中,使用先前tomcat內置案例,試驗兩個tomcat開機和關機不同情況進行測試,會話數據都不會受到影響。
4、nginx集群設置方向
? 如果有多臺NGINX想實現負載均衡的話,
1、每臺nginx都有公網地址,在域名處設置同個域名多個指向,最簡單實現輪洵。但故障切負會慢一點。
2、一臺公網nginx通過upstream功能,輪洵、ip、url多方式分發到內網多臺nginx。但公網的nginx如果down機的話,內網全段。
3、一對公網nginx加三個公網ip,通過keepalive實現高可用,再upstream到內網(就是我們剛剛上一節講的主從備份)。
一般來說,上面1、2、3種方法基本可以解決,建議用2或3;
如果并發量真的巨大的話,一般就要借助硬件F5等設備做負載均衡,跟DNS、CDN等服務商合作做域名解析轉發、緩存配置,這也是目前大多數大廠的架構配置。
5、失效轉移設置
如果后端tomcat服務器處理超時,則nginx不請求下一個tomcat節點,而是直接返回。nginx默認,會重復嘗試所有的節點以后,才會返回給瀏覽器錯誤。例如:在location設置參數(默認值也是如此):?
proxy_next_upstream http_502 http_504 error timeout invalid_header;?
其中有一個參數值 timeout,這個參數代表如果超時,則嘗試其他節點。因此要去掉這個參數,修改后如下?
proxy_read_timeout 1;?
proxy_next_upstream http_502 http_504 error invalid_header;?
?
轉載于:https://www.cnblogs.com/chappell/p/10609433.html
總結
以上是生活随笔為你收集整理的nginx功能扩展整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: learning hdmi edid p
- 下一篇: Java-Runoob:Java Str