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

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

相关推荐
_.Switch2 分钟前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
2401_850410832 分钟前
文件系统和日志管理
linux·运维·服务器
JokerSZ.6 分钟前
【基于LSM的ELF文件安全模块设计】参考
运维·网络·安全
芯盾时代38 分钟前
数字身份发展趋势前瞻:身份韧性与安全
运维·安全·网络安全·密码学·信息与通信
心灵彼岸-诗和远方2 小时前
DevOps业务价值流:架构设计最佳实践
运维·产品经理·devops
一只哒布刘2 小时前
NFS服务器
运维·服务器
苹果醋33 小时前
Java8->Java19的初步探索
java·运维·spring boot·mysql·nginx
二十雨辰3 小时前
[linux]docker基础
linux·运维·docker
Jason-河山3 小时前
【自动化更新,让商品信息跳舞】——利用API返回值的幽默编程之旅
运维·自动化
雨雪飘零3 小时前
Windows系统使用OpenSSL生成自签名证书
nginx·证书·openssl