NGINX 负载均衡以及反向代理和location的使用

nginx的常用命令

复制代码
nginx -c /path/nginx.conf  	     # 以特定目录下的配置文件启动nginx:
nginx -s reload            	 	 # 修改配置后重新加载生效
nginx -s stop  				 	 # 快速停止nginx
nginx -s quit  				 	 # 正常停止nginx
nginx -t    					 # 测试当前配置文件是否正确
nginx -t -c /path/to/nginx.conf  # 测试特定的nginx配置文件是否正确

Bash

Copy

nginx编译安装参数

复制代码
--prefix=/usr/local/nginx                        //指向安装目录
--conf-path=/etc/nginx/nginx.conf                //指定配置文件
--http-log-path=/var/log/nginx/access.log        //指定访问日志
--error-log-path=/var/log/nginx/error.log        //指定错误日志
--lock-path=/var/lock/nginx.lock                 //指定lock文件
--pid-path=/run/nginx.pid                        //指定pid文件

--http-client-body-temp-path=/var/lib/nginx/body    //设定http客户端请求临时文件路径
--http-fastcgi-temp-path=/var/lib/nginx/fastcgi     //设定http fastcgi临时文件路径
--http-proxy-temp-path=/var/lib/nginx/proxy         //设定http代理临时文件路径
--http-scgi-temp-path=/var/lib/nginx/scgi           //设定http scgi临时文件路径
--http-uwsgi-temp-path=/var/lib/nginx/uwsgi         //设定http uwsgi临时文件路径

--with-debug                                        //启用debug日志
--with-ipv6                                         //启用ipv6支持
--with-http_ssl_module                              //启用ssl支持
--with-http_stub_status_module                      //获取nginx自上次启动以来的状态
--with-http_realip_module                 //允许从请求标头更改客户端的IP地址值,默认为关
--with-http_auth_request_module           //实现基于一个子请求的结果的客户端授权。如果该子请求返回的2xx响应代码,所述接入是允许的。如果它返回401或403中,访问被拒绝与相应的错误代码。由子请求返回的任何其他响应代码被认为是一个错误。
--with-http_addition_module               //作为一个输出过滤器,支持不完全缓冲,分部分响应请求
--with-http_dav_module                    //增加PUT,DELETE,MKCOL:创建集合,COPY和MOVE方法 默认关闭,需编译开启
--with-http_geoip_module                  //使用预编译的MaxMind数据库解析客户端IP地址,得到变量值
--with-http_gunzip_module                 //它为不支持"gzip"编码方法的客户端解压具有"Content-Encoding: gzip"头的响应。
--with-http_gzip_static_module            //在线实时压缩输出数据流
--with-http_spdy_module                   //SPDY可以缩短网页的加载时间
--with-http_sub_module                    //允许用一些其他文本替换nginx响应中的一些文本
--with-http_xslt_module                   //过滤转换XML请求
--with-mail                               //启用POP3/IMAP4/SMTP代理模块支持
--with-mail_ssl_module                    //启用ngx_mail_ssl_module支持启用外部模块支持

--with  表示在编译过程中需要给nginx添加的模块
--without 表示编译nginx时默认该模块是添加进去的当使用这个参数时表示将默认编译的模块移除

JavaScript

Copy

NGINX反向代理

反向代理的模块就是

复制代码
ngx_http_proxy_module

Undefined

Copy

配置他就一条命令

复制代码
location{
proxy_pass http://   ; 反代后端的地址

}

C++

Copy

还要其他的配置'

复制代码
proxy_pass :真实后端服务器的地址,可以是ip也可以是域名和url地址
proxy_redirect :如果真实服务器使用的是的真实IP:非默认端口。则改成IP:默认端口。
proxy_set_header:重新定义或者添加发往后端服务器的请求头
proxy_set_header X-Real-IP $remote_addr;#只记录连接服务器的上一个ip地址信息。
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; #通过这个选项可以记录真正客户端机器的ip地址

proxy_connect_timeout::后端服务器连接的超时时间发起三次握手等候响应超时时间
proxy_send_timeout:后端服务器数据回传时间,就是在规定时间之内后端服务器必须传完所有的数据
proxy_read_timeout :nginx接收upstream(上游/真实) server数据超时, 默认60s, 如果连续的60s内没有收到1个字节, 连接关闭。像长连接

Bash

Copy

NGINX负载均衡

负载均衡模块采用

复制代码
upstream_fair

Undefined

Copy

负载均衡写法

复制代码
upstream 组名 {
    
    server ip; 
    server ip;

}

Markdown

Copy

负载均衡方式有 upstream 支持4种负载均衡调度算法

复制代码
1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器;

2、ip_hash:每个请求按访问IP的hash结果分配,同一个IP客户端固定访问一个后端服务器。可以保证来自同一ip的请求被打到固定的机器上,可以解决session问题。

3、url_hash:按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器。

4、fair:这是比上面两个更加智能的负载均衡算法。此种算法可以依据页面大小和加载时间长短智能地进行负载均衡,也就是根据后端服务器的响应时间来分配请求,响应时间短的优先分配。Nginx本身是不支持 fair的,如果需要使用这种调度算法,必须下载Nginx的 upstream_fair模块。

Makefile

Copy

热备

复制代码
upstream myweb { 
      server 172.17.14.2:8080; 
      server 172.17.14.3:8080 backup;  #热备     
    }

CSS

Copy

权重轮询

复制代码
upstream web {
    server 192.168.10.1:8080 weight=1;
    server 192.168.10.2:8080 weight=1;

}

CSS

Copy

ip_hash

复制代码
upstream web {
    ip_hash
    server 192.168.10.1:8080;
    server 192.168.10.2:8080;
}

CSS

Copy

负载均衡其他参数

  • down,表示当前的server暂时不参与负载均衡。
  • backup,预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻。
  • max_fails,允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误。
  • fail_timeout,在经历了max_fails次失败后,暂停服务的时间单位秒。max_fails可以和fail_timeout一起使用。

示例

复制代码
 upstream myweb { 
      server 172.17.14.2:8080 weight=2 max_fails=2 fail_timeout=2;
      server 172.17.14.3:8080 weight=1 max_fails=2 fail_timeout=1;    
    }

CSS

Copy

如何调用负载均衡组 upstream 写入http块中

复制代码
server{

    listen 80;
    server_name _;
    
    location / {
    proxy_pass http://web;
    
    }

}

Perl

Copy

nginx 配置后端健康检查模块

nginx_upstream_check_module模块

复制代码
 wget https://github.com/yaoweibin/nginx_upstream_check_module/archive/refs/heads/master.zip

Bash

Copy

安装patch

复制代码
yum install patch 

Undefined

Copy

解压出来后直接

复制代码
patch -p1 < /root/nginx_upstream_check_module-master/check_1.20.1+.patch

JavaScript

Copy

在编译时指定位置加入模块

复制代码
./configure --prefix=/usr/local/nginx --group=nginx --user=nginx --sbin-path=/usr/local/nginx/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/tmp/nginx/client_body --http-proxy-temp-path=/tmp/nginx/proxy --http-fastcgi-temp-path=/tmp/nginx/fastcgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-pcre --with-http_realip_module --with-stream --add-module=/root/nginx_upstream_check_module-master/

JavaScript

Copy

重新make 然后把拷贝走nginx新的二进制文件

复制代码
cp objs/nginx /usr/local/nginx/sbin

Bash

Copy

启用健康检查

复制代码
upstream web {
    server 192.168.209.128 weight=1;
    server 192.168.209.130 weight=1;
    check interval=5000 rise=2 fall=3 timeout=4000 type=http port=80;
    check_http_send "HEAD / HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;

}


server {
    listen 80;
    server_name _;
    location / {
        proxy_pass http://web;
    
    }
    location /status {
        check_status;
            access off:
    
    }
    
    
    }



}

Swift

Copy

参数解释:

  • interval:表示每隔多少毫秒向后端发送健康检查包;
  • rise:表示如果连续成功次数达到2 服务器就被认为是up;
  • fail:表示如果连续失败次数达到3 服务器就被认为是down;
  • timeout:表示后端健康请求的超时时间是多少毫秒;
  • type:表示发送的健康检查包是什么类型的请求;
  • port: 表示发送检查到后端的服务的端口;
  • check_http_send:表示http健康检查包发送的请求内容。为了减少传输数据量,推荐采用"head"方法;
  • check_http_expect_alive:指定HTTP回复的成功状态,默认认为2XX和3XX的状态是健康的;

nginx 会话保持

基于ip_hash的nginx负载均衡

复制代码
upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
}

Markdown

Copy

sticky_cookie_insert---而是基于cookie实现 需要添加第三方模块 先显示他的安装信息

复制代码
nginx -V

Undefined

Copy

需要先下载最新的源码包

复制代码
wget https://nginx.org/download/nginx-1.25.3.tar.gz

Bash

Copy

这个是cookie的模块包

复制代码
wget  https://bitbucket.org/nginx-goodies/nginx-sticky-module-ng/get/08a395c66e42.zip

Ruby

Copy

全部解压出来 然后开始加入模块 进入nginx的源码包的目录里面 根据你的nginx安装的信息继续进行编译

复制代码
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --add-module=/root/nginx-sticky-module-ng

JavaScript

Copy

之前安装使用软件包管理器安装的nginx会直接覆盖掉

复制代码
make && make install

Go

Copy

直接在负载均衡模块里面加入

复制代码
upstream qfedu {
        server 192.168.198.143;
        server 192.168.198.145;
        sticky;
}

Markdown

Copy

反向代理模块代理就行了 其他参数

复制代码
sticky expires=1h domain=testpm.com path=/;

Lua

Copy

缓存一小时 匹配域名 以及路径

相关推荐
七夜zippoe8 小时前
CANN Runtime任务描述序列化与持久化源码深度解码
大数据·运维·服务器·cann
Fcy64810 小时前
Linux下 进程(一)(冯诺依曼体系、操作系统、进程基本概念与基本操作)
linux·运维·服务器·进程
袁袁袁袁满10 小时前
Linux怎么查看最新下载的文件
linux·运维·服务器
代码游侠10 小时前
学习笔记——设备树基础
linux·运维·开发语言·单片机·算法
主机哥哥10 小时前
阿里云OpenClaw部署全攻略,五种方案助你快速部署!
服务器·阿里云·负载均衡
Harvey90310 小时前
通过 Helm 部署 Nginx 应用的完整标准化步骤
linux·运维·nginx·k8s
珠海西格电力科技12 小时前
微电网能量平衡理论的实现条件在不同场景下有哪些差异?
运维·服务器·网络·人工智能·云计算·智慧城市
释怀不想释怀12 小时前
Linux环境变量
linux·运维·服务器
zzzsde12 小时前
【Linux】进程(4):进程优先级&&调度队列
linux·运维·服务器
聆风吟º14 小时前
CANN开源项目实战指南:使用oam-tools构建自动化故障诊断与运维可观测性体系
运维·开源·自动化·cann