nginx 反向代理,nginx 负载均衡【nginx】(一)

1 具体内容

中文官网:
http://www.nginx.cn/doc/
https://www.nginx.cn/
英文官网:
http://nginx.org/en/

1.1 nginx简介

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3/SMAP)代理服务器 。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx以事件驱动的方式编写,所以有非常好的性能,同时也是一个非常高效的反向代理、负载平衡服务器。在性能上,Nginx占用很少的系统资源,能支持更多的并发连接,达到更高的访问效率;在功能上,Nginx是优秀的代理服务器和负载均衡服务器;在安装配置上,Nginx安装简单、配置灵活。

1.2 正向代理和反向代理

1.2.1正向代理
正向代理类似一个跳板机,代理访问外部资源。
在这里插入图片描述

 作用:
  (1)访问原来无法访问的资源
  (2) 可以做缓存,加速访问资源   
  (3)对客户端访问授权,上网进行认证
  (4)代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息

1.2.2反向代理
反向代理的感觉是,客户端是无感知代理的存在的,反向代理对外都是透明的,访问者者并不知道自己访问的是一个代理。因为客户端不需要任何配置就可以访问。反向代理(Reverse Proxy)实际运行方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个服务器。

在这里插入图片描述

作用:
1,保证内网的安全,可以使用反向代理提供WAF(web application firewall)功能,阻止web攻击
2,负载均衡,通过反向代理服务器来优化网站的负载

1.3 web服务器搭建

1.3.1单机版nginx规划

在这里插入图片描述

2个服务器(反向代理服务器和web服务器)

web服务器:qy142-webserver1      192.168.xxx.11
反向代理服务器:  qy142-nginx1  192.168.xxx.21

1.3.2web后台服务器搭建:

克隆电脑(克隆后的所有操作都在虚拟机里面完成,重启后再使用ssh工具去连接)
centos7:

 1,修改网卡配置文件,修改ipaddr   
   vim /etc/sysconfig/network-scripts/ifcfg-ens33  
            修改第15行
 2,修改主机名称
   vim /etc/hostname   //改名
3,重启系统:reboot
4,使用xshell连接

centos6:

1,修改了三个地方,删除了uuid 和 hwaddr  修改了ipaddr
    vim /etc/sysconfig/network-scripts/ifcfg-eth0
2,修改主机名称
   vim /etc/sysconfig/network
 
3,删除mac地址和网卡对应文件
   rm -rf /etc/udev/rules.d/70-persistent-net.rules
4,修改主机和ip地址对应文件
   vim /etc/hosts
   192.168.52.20 nginx1

查看防火墙状态: service  firewalld status
关闭防火墙: service firewalld stop;
开机自动关闭: systemctl disable firewalld
验证是否装有jdk,是否配置有JAVA_HOME:
   java -version
   echo  $JAVA_HOME

配置 tomcat 启动运行web项目

  复制apache-tomcat-9.0.52.tar.gz到虚拟机下  /root/software
 解压:
  tar -xzvf /root/software/apache-tomcat-9.0.52.tar.gz -C /usr/
进入目录:  
  cd /usr/apache-tomcat-9.0.52/
启动tomcat:
     ./bin/startup.sh   
另外链接一个窗口:
   cd /usr/apache-tomcat-9.0.52/
   查看日志:
        tail -F logs/catalina.out  
     为了更方便的启动和关闭tomcat配置环境变量:
    在tomcat目录下执行pwd:
	/usr/apache-tomcat-9.0.52
      vim /etc/profile
             export TOMCAT_HOME=/usr/apache-tomcat-9.0.52
	          export JAVA_HOME=/usr/java/jdk1.8.0_151
export TOMCAT_HOME=/usr/apache-tomcat-9.0.52
export ClASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$TOMCAT_HOME/bin
    echo $TOMCAT_HOME
    让配置生效:
	   source /etc/profile
  显示结果:
      echo $TOMCAT_HOME   
  在任意目录下都可以启动关闭tomcat
          startup.sh
          shutdown.sh

查看tomcat是否在运行:

ps -ef|grep tomcat|grep -v grep

查看端口号是否被占用:
netstat -ano|grep 8080
测试(确保里面防火墙关闭的):

http://192.168.170.31:8080/

准备web后台项目,并打war包,上传war包到:

/usr/apache-tomcat-9.0.52/webapps/

再次测试:
http://192.168.170.31:8080/ssm_restful_demo_20211210/deptRest/queryById?deptNo=70
http://192.168.170.31:8080/ssm_restful_demo_20211210/deptRest/queryAll?pageNo=1&pageSize=10

1.4 部署安装nginx

1.4.1,克隆服务器nginx1

      修改IP地址
   vim /etc/sysconfig/network-scripts/ifcfg-ens33  
      修改主机名称
 vim /etc/hostname   //改名
      修改子安全系统
            vim /etc/sysconfig/selinux     

1.4.2,安装前的准备
1)确保进行了安装了linux常用必备支持库。
(windows vs编译写好的c和c++,在linux下用g++和gcc编译c)
检查是否安装了g++、gcc。
rpm -qa | grep gcc 之后需要出现3个包如下图所示。如果没有出现。需要安装g++、gcc。
检查是否安装gcc-c++
rpm -qa|grep gcc --有的已经安装但版本低,检查时仍然出错
如果有就不需要安装

     yum install -y gcc-c++

2)准备和安装 pcre-8.38.tar.gz。
该文件为正则表达式库。让nginx支持rewrite需要安装这个库(rewrite :和apache等web服务软件一样,rewrite的组要功能是实现RUL地址的重定向。Nginx的rewrite功能需要PCRE软件的支持,即通过perl兼容正则表达式语句进行规则匹配的。)。

    ( PCRE(Perl Compatible Regular Expressions)是一个Perl库,包括 perl 兼容的正则表达式库。 nginx通过ngx_http_rewrite_module模块支持url重写)
      pcre:  http://www.pcre.org/
    pcre安装:
解压pcre-8.12.tar.gz
   tar -xzvf /root/software/pcre-8.44.tar.gz -C /usr  解压
   进入解压后的目录
      cd /usr/pcre-8.44/ 
     配置
      ./configure(./configure是用来检测你的安装平台的目标特征的。比如它会检测你是不是有CC或GCC,并不是需要CC或GCC)
    编译
     make(是用来编译的,它从Makefile中读取指令,然后编译。)
    安装
    make install(用来安装的,它也从Makefile中读取指令,安装到指定的位置。)
    检查是否安装
	 pcre-config --version

3)安装gzip模块需要 zlib 库

    yum install -y zlib-devel

1.4.3,nginx安装

   tar -xzvf /root/software/nginx-1.18.0.tar.gz -C /usr/
  进入目录
  cd /usr/nginx-1.18.0/
   配置
   ./configure
    编译
    #make
    安装
     #  make install
    查看是否安装成功
     ls /usr/local/nginx/   
   进入安装目录
     cd /usr/local/nginx/
    启动:(进入上面红圈安装的目录,在sbin中,有nginx的启动文件)
    ./sbin/nginx 
       (如果报错 error while loading shared libraries: libpcre.so.1: cannot open shared object file: No such file or directory,用如下方法查看缺少)
      ldd $(which /usr/local/nginx/sbin/nginx)
      ldd是list, dynamic, dependencies的缩写, 意思是, 列出动态库依赖关系。

通过列表可以看出,在/lib64下缺少libpcre.so.1我们到这里面去建立软连接
ln -s libpcre.so.0.0.1 libpcre.so.1
测试:(在浏览器访问当前nginx服务器)
http://192.168.170.21/
分析为什么可以访问地址:
vim conf/nginx.conf http->server->(listen 80 location root index)
修改监听端口号:
:36 listen 8088
重启服务:
/usr/local/nginx/sbin/nginx -s reload
再次访问:
http://192.168.170.21:8088/
1.4.4,反向代理配置

让我们可以通过nginx访问webserver1上的tomcat
 vim  /usr/local/nginx/conf/nginx.conf
 在43  3yy->p
 在46下面加入(注意要自己IP):
 location /qy141/ {
    proxy_pass http://192.168.170.31:8080/; 
}
然后再回去启动nginx
     查看nginx进程是否启动: 
      ps -ef|grep nginx |grep -v grep
     存在进程,重启nginx : 
         /usr/local/nginx/sbin/nginx -s reload
    不存在进程,直接启动nginx:
        /usr/local/nginx/sbin/nginx
       测试:
 http://192.168.170.21:8088/    
http://192.168.170.21:8088/qy141/ssm_restful_demo_20211210/deptRest/queryById?deptNo=70
http://192.168.170.21:8088/qy141//ssm_restful_demo_20211210/deptRest/queryAll?pageNo=1&pageSize=10

1.5 配置文件详解:

1.5.1结构:
全局设置
全局设置包含Events和HTTP
HTTP包含upstream和多个Server
Server又包含多个location
1.5.2 重要配置解释:

	main(全局设置,设置的指令将影响其他所有设置)
	server(主机设置,用于指定主机和端口)
	upstream(负载均衡服务器设置,设置一系列的后端服务器)
	location(URL匹配特定位置的设置,用于匹配网页位置)。
	     详细配置:
	          全局配置 :
	user是个主模块指令,指定Nginx Worker进程运行用户以及用户组,默认由nonody账号运行。
	worker_processes是个主模块指令,指定了Nginx要开启的进程数。每个Nginx进程平均耗费10M~12M内存 ,支持5W并发。建议指定和CPU的数量一致即可。

error_log是个主模块指令,用来定义全局错误日志文件。日志输出级别有debug、info、notice、warn、error、 crit可供选择,其中,debug输出日志最为最详细,而crit输出日志最少。
pid是个主模块指令,用来指定进程pid的存储文件位置。
worker_rlimit_nofile用于绑定worker进程和CPU, Linux内核2.4以上可用
   events:
        事件指令是设定Nginx的工作模式及连接数上限
HTTP 服务器配置:
include是个主模块指令,实现对配置文件所包含的文件的设定,可以减少主配置文件的复杂度。类似于Apache中的include方法。
default_type属于HTTP核心模块指令,这里设定默认类型为二进制流,也就是当文件类型未定义时使用这种方式	
log_format是Nginx的HttpLog模块指令,用于指定Nginx日志的输出格式。main为此日志输出格式的名称,可以在下面的access_log指令中引用。
 client_max_body_size用来设置允许客户端请求的最大的单个文件字节数;
 client_header_buffer_size用于指定来自客户端请求头的headerbuffer大小。对于大多数请求,1K的缓冲区大小已经足够,如果自定义了消息头或有更大的Cookie,可以增加缓冲区大小。这里设置为32K;
 large_client_header_buffers用来指定客户端请求中较大的消息头的缓存最大数量和大小, “4”为个数,“128K”为大小,最大缓存量为4个128K;
 sendfile 参数用于开启高效文件传输模式。将tcp_nopush和tcp_nodelay两个指令设置为on用于防止网络阻塞;
 keepalive_timeout 设置客户端连接保持活动的超时时间。在超过这个时间之后,服务器会关闭该连接;
 client_header_timeout设置客户端请求头读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误;
 client_body_timeout设置客户端请求主体读取超时时间。如果超过这个时间,客户端还没有发送任何数据,Nginx将返回“Request time out(408)”错误,默认值是60;
 send_timeout指定响应客户端的超时时间。这个超时仅限于两个连接活动之间的时间,如果超过这个时间,客户端没有任何活动,Nginx将会关闭连接。
在安装目录的conf下nginx.conf配置(加入红字部分)

server虚拟主机配置:

server标志定义虚拟主机开始
     listen 用于指定虚拟主机的服务端口
     server_name 用来指定IP地址或者域名,多个域名之间用空格分开
     index 用于设定访问的默认首页地址
     root指令用于指定虚拟主机的网页根目录,这个目录可以是相对路径,也可以是绝对路径。
     Charset用于 设置网页的默认编码格式。
      access_log用来指定此虚拟主机的访问日志存放路径
      main用于指定访问日志的输出格式。
 location URL匹配配置
    URL地址匹配是进行Nginx配置中最灵活的部分。 location支持正则表达式匹配,也支持条件判断匹配,用户可以通过location指令实现Nginx对动、静态网页进行过滤处理。
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
    root  /root/baidu;
    expires 30d;
}

通过location指令来对网页URL进行分析处理,所有扩展名以.gif、.jpg、.jpeg、.png、.bmp、.swf结尾的静态文件都交给nginx处理,而expires用来指定静态文件的过期时间,这里是30天。

这段设置是将upload和html下的所有文件都交给nginx来处理,当然,upload和html目录包含在/root/baidu/test目录中。

 location ~ ^/(upload|html)/ {
  root /root/baidu/test;
  expires 30d;
}

location是对此虚拟主机下动态网页的过滤处理,也就是将所有以.jsp为后缀的文件都交给本机的8080端口处理。

location ~ .*.jsp$ {
 index index.html;
 proxy_pass http://localhost:8080;
}
 upstream myapp{ #定义负载均衡设备的Ip及设备状态
      ip_hash;
      server  192.168.23.30:8080;  down;
      server  192.168.23.31:8080;  weight=2;
      server  192.168.23.32:8080; 
      server  192.168.23.33:8080;  backup;
}

完整配置:

 # 全局配置
user nginx;  # Nginx运行的用户
worker_processes auto;  # Nginx工作进程数,auto表示根据CPU核心数自动配置

error_log /var/log/nginx/error.log;  # 错误日志路径
pid /var/run/nginx.pid;  # 进程ID文件路径

# 事件模块配置
events {
    worker_connections 1024;  # 每个工作进程可以同时处理的连接数
}

# HTTP模块配置
http {
    include /etc/nginx/mime.types;  # MIME类型配置文件
    default_type application/octet-stream;  # 默认的MIME类型

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';  # 日志格式

    access_log /var/log/nginx/access.log main;  # 访问日志路径及格式

    sendfile on;  # 开启sendfile功能
    tcp_nopush on;  # 开启tcp_nopush功能
    tcp_nodelay on;  # 开启tcp_nodelay功能

    keepalive_timeout 65;  # 单个连接的超时时间
    client_max_body_size 100m;  # 客户端请求的最大大小

    include /etc/nginx/conf.d/*.conf;  # 加载额外的配置文件

    server {
        listen 80;  # 监听的端口号

        server_name example.com;  # 服务器名

        location / {
            root /usr/share/nginx/html;  # 网站根目录
            index index.html;  # 默认首页文件
        }

        error_page 404 /404.html;  # 404错误页面配置
        error_page 500 502 503 504 /50x.html;  # 50x错误页面配置

        location = /50x.html {
            root /usr/share/nginx/html;  # 50x错误页面的路径
        }
    }
}

1.6 负载均衡:

1.6.1 概念:
为了保证服务的高可用,服务单元往往都是集群化部署的,当服务消费者消费服务时,负载均衡组件(nginx)获取服务提供者所有实例的注册信息,并通过一定的负载均衡策略(可以自己配置)选择一个服务提供者实例,向该实例进行服务消费,这样就实现了负载均衡。

在Nginx配置文件中,upstream用于定义后端服务器池,通常用于负载均衡和反向代理。下面是一个示例的upstream配置及其注释:

http {
    # ...

    upstream backend {
        server backend1.example.com weight=5;  # 后端服务器1的地址和权重
        server backend2.example.com;  # 后端服务器2的地址,默认权重为1
        server unix:/tmp/backend3.sock;  # 使用Unix域套接字连接到后端服务器3
    }

    server {
        listen 80;

        location / {
            proxy_pass http://backend;  # 反向代理到后端服务器池
        }
    }

    # ...
}

在HTTP Upstream模块中,可以通过server指令指定后端服务器的IP地址和端口,同时还可以设定每个后端服务器在负载均衡调度中的状态。常用的状态有:

server:指定后端服务器的地址。可以是主机名、IP地址或Unix域套接字。如果使用Unix域套接字连接到后端服务器,需要在地址前添加unix:前缀。

weight:指定每个后端服务器的权重。默认值为1。权重越高的服务器将获得更多的请求。

max_fails:指定在标记后端服务器为不可用之前,允许的最大失败次数。默认值为1。如果一个后端服务器在一定时间内连续失败了指定次数,就会被标记为不可用。

fail_timeout:指定标记后端服务器为不可用的时间。默认值为10秒。如果一个后端服务器被标记为不可用,它将不会被分配新的请求,直到fail_timeout时间过去。

backup:指定一个后端服务器作为备份服务器。当所有其他服务器都不可用时,备份服务器会接收请求。备份服务器不会参与正常的负载均衡。可以在server参数后添加backup关键字来指定一个服务器作为备份服务器。

down:指定一个后端服务器当前不可用,并且不应该分配新的请求。可以在server参数后添加down关键字来标记一个服务器为不可用。

max_conns:指定一个服务器的最大并发连接数。超过这个数目的请求将不会被分配到该服务器。可以在server参数后添加max_conns=N来指定一个服务器的最大并发连接数为N。

slow_start:指定一个服务器在启动时逐渐增加其权重,以避免在一开始就接收大量请求而导致系统负载过高。可以在server参数后添加slow_start=seconds来指定服务器的慢启动时间。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
nginx反向代理负载均衡配置可以在同一台服务器上实现,也可以在多台服务器上实现。 以下是一个简单的nginx反向代理负载均衡配置示例: ```nginx # upstream定义后端服务器,可以是多个 upstream backend { server backend1.example.com; server backend2.example.com; } # 反向代理配置 server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # 负载均衡配置 upstream backend { server backend1.example.com weight=5; server backend2.example.com weight=10; server backend3.example.com weight=5; } server { listen 80; server_name example.com; location / { # ip_hash表示使用客户端IP进行hash负载均衡 # least_conn表示使用最少连接数负载均衡 # round_robin表示使用轮询负载均衡 # 具体使用哪种负载均衡算法可以根据实际需求选择 # max_fails和fail_timeout表示当节点失败次数和失败时间超过设定值时,将该节点暂时从负载均衡池中剔除 # backup表示将该节点设置为备份节点,只有当其他节点都不可用时才会使用 # 具体参数可以参考nginx官方文档 # https://nginx.org/en/docs/http/ngx_http_upstream_module.html#upstream proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; # 下面是负载均衡相关配置 # ip_hash; # least_conn; # round_robin; # server backend1.example.com max_fails=3 fail_timeout=30s; # server backend2.example.com max_fails=3 fail_timeout=30s; # server backend3.example.com max_fails=3 fail_timeout=30s backup; } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杵意

谢谢金主打赏呀!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值