首頁  >  文章  >  運維  >  nginx新增第三方模組

nginx新增第三方模組

王林
王林轉載
2020-10-26 16:23:303135瀏覽

nginx新增第三方模組

目的:

加入第三方寫的插件,以nginx-sticky-module為例,以下簡稱sticky

透過/usr/local /nginx/sbin/nginx -V 查看nginx已安裝的模組

(推薦教程:nginx教程

sticky模組與Ip_hash都是與負載平衡演算法相關,但又有差別,差別是:

1、ip hash,根據客戶端的IP,將請求分配到不同的伺服器上

2、sticky,根據伺服器給客戶端的cookie,當客戶端再次要求時會帶上此cookie,nginx會把有此cookie的請求轉發到頒發cookie的伺服器上

注意:在一個區域網路內有3台電腦,他們有3個內部網路IP ,但是當他們發起請求時,卻只有一個外網IP,是電信運營商分配在他們連接那個路由器上的,如果使用ip_hash 方式,則Nginx會將請求分配到不同上游伺服器,如果使用sticky 模組,則會把請求分配到辦法cookie的伺服器上,實現:內網nat用戶的均衡。這是iphash無法做到的

Sticky工作原理:

Sticky是基於cookie的一種負載平衡解決方案,透過分發和識別cookie,使來自同一個客戶端的請求落在在同一台伺服器上,預設cookie標識名為route :

1、客戶端首次發起存取請求,nginx接收後,發現請求頭沒有cookie,則以輪詢方式將請求分發給後端伺服器。

2、後端伺服器處理完請求,將回應資料回傳給nginx。

3、此時nginx產生帶route的cookie,回傳給客戶端。 route的值與後端伺服器對應,可能是明文,也可能是md5、sha1等Hash值

4、客戶端接收請求,並保存帶有route的cookie。

5、當客戶端下次發送請求時,會帶上route,nginx根據接收到的cookie中的route值,轉發給對應的後端伺服器。

Sticky官網位址

官方位址:

https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/src

下載位址:

wget https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/master.tar.gz

Nginx安裝Sticky模組

#1.下载的文件上传,解压
tar -xvzf nginx-goodies-nginx-sticky-module-ng-08a395c66e42.tar

#2.重命名为nginx-sticky-module
mv nginx-goodies-nginx-sticky-module-ng-08a395c66e42 /usr/local/nginx-sticky-module

#3.进入nginx源码目录进行编译
./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-sticky-module --with-http_stub_status_module --with-http_ssl_module 

#4.安装
 1.停止nginx后进行安装:make && make install
 2.在线更新安装: make upgrade

這樣就安裝完了,透過./sbin/nginx -V 查看編譯參數,可看到sticky模組已被編譯進nginx

[root@bogon nginx]# ./sbin/nginx -V
nginx version: nginx/1.16.0
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 
built with OpenSSL 1.0.2k-fips  26 Jan 2017
TLS SNI support enabled
configure arguments: --prefix=/usr/local/nginx --add-module=/usr/local/nginx-sticky-module --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module

修改nginx.conf,啟用sticky 功能

upstream zyi {
    #使用sticky,不设置expires则浏览器关闭时结束会话
    sticky domain=zy.csxiuneng.com path=/;
    server localhost:9001;
}

server {
     listen       80;
     server_name  zy.csxiuneng.com;
     access_log  logs/zy.access.log  main;
     location / {
        
         proxy_pass http://zyi;
         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
         proxy_set_header Host $host;
         client_max_body_size 10m;
         client_body_buffer_size 256k;
         proxy_connect_timeout 90;
         proxy_send_timeout 90;
         proxy_buffer_size 4k;
         proxy_buffers 4 32k;
     }

sticky 語法:

sticky [name=route] [domain=.foo.bar] [path=/] [expires=1h] 
       [hash=index|md5|sha1] [no_fallback] [secure] [httponly];
    [name=route]       设置用来记录会话的cookie名称
    [domain=.foo.bar]    设置cookie作用的域名
    [path=/]          设置cookie作用的URL路径,默认根目录
    [expires=1h]        设置cookie的生存期,默认不设置,浏览器关闭即失效
    [hash=index|md5|sha1]   设置cookie中服务器的标识是用明文还是使用md5值,默认使用md5
    [no_fallback]       设置该项,当sticky的后端机器挂了以后,nginx返回502 (Bad Gateway or Proxy Error) ,而不转发到其他服务器,不建议设置
    [secure]          设置启用安全的cookie,需要HTTPS支持
    [httponly]         允许cookie不通过JS泄漏,没用过

重啟Nginx:./sbin/nginx -s reload

訪問:zy.csxiuneng.com ,可以看到cookies中有一項為route

nginx新增第三方模組

##注意點:

1.同一客戶端,如果啟動時同時發起多個請求,有可能落在不同的後端伺服器上
2.由於cookie最初由伺服器端下發,如果客戶端停用cookie,則cookie不會生效。
3.客戶端可能不帶cookie ,Android客戶端發送請求時,一般不會帶上所有的cookie,需要明確指定哪些cookie會帶上。如果希望用sticky做負載平衡,請對Android開發說加上cookie。
4.cookie名稱不要和業務使用的cookie重名。 Sticky預設的cookie名稱是route,可以改成任何值
5.客戶端發的第一個請求是不帶cookie的。伺服器下發的cookie,在客戶端下一次請求時才能生效。
6.Nginx sticky模組不能與ip_hash同時使用

如果要新增多個第三方模組,使用多個 --add-module 指令:

./configure --prefix=/usr/local/nginx --add-module=/usr/local/nginx-sticky-module/ --add-module=/usr/local/nginx-http-concat-1.2.2/

以上是nginx新增第三方模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除