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

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

相关推荐
努力的悟空1 小时前
国土变更调查拓扑错误自动化修复工具的研究
运维·自动化
周末不下雨3 小时前
win11+ubuntu22.04双系统 | 联想 24 y7000p | ubuntu 22.04 | 把ubuntu系统装到1T的移动固态硬盘上!!!
linux·运维·ubuntu
耗同学一米八3 小时前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题四
运维·网络
_半夏曲3 小时前
node.js、nginx、iis、tomcat针对部署方面的简述
nginx·node.js·tomcat
东华果汁哥4 小时前
【linux 免密登录】快速设置kafka01、kafka02、kafka03 三台机器免密登录
linux·运维·服务器
肖永威4 小时前
CentOS环境上离线安装python3及相关包
linux·运维·机器学习·centos
布鲁格若门5 小时前
CentOS 7 桌面版安装 cuda 12.4
linux·运维·centos·cuda
Eternal-Student5 小时前
【docker 保存】将Docker镜像保存为一个离线的tar归档文件
运维·docker·容器
dessler5 小时前
云计算&虚拟化-kvm-扩缩容cpu
linux·运维·云计算
DC_BLOG5 小时前
Linux-Apache静态资源
linux·运维·apache