高性能Nginx服务器(5)----基于Nginx1.9实现TCP反向代理与负载均衡(四层负载均衡)

  • TCP四层负载均衡是依据请求连接的。新来一个连接才会轮训,否则不会进行负载均衡策略。因为每一个TCP连接是长连接,不能像HTTP七层负载均衡一样,来一个信息,就进行负载均衡策略
  • 我们之前的nginx负载均衡都是七层负载均衡,基于HTTP(应用层),这节课我们讲的是基于TCP(四层负载均衡),简单说我们这节课讲的负载均衡都是基于Socket实现的(Socket就是基于TCP实现的)。
  • nginx在1.9之前是不支持TCP四层负载均衡以及反向代理的,在1.9之前是使用LVS,F5等实现四层负载均衡的
  • LVS是基于四层传输的(TCP),而Nginx是基于Http协议进行反向代理和负载均衡的。
  • Nginx的七层负载均衡是基于应用层的Http的负载均衡,四层负载均衡是基于传输层TCP协议的负载均衡
  • 四层负载均衡:
    在这里插入图片描述
  • 区别:
    (1)Nginx的四层负载均衡(基于TCP)使用长连接的方式,只要客户端与服务端保持连接,nginx就不会轮训到下一台服务器上去,只有来一个新连接的时候,才会进行轮训。
    (2)Nginx的七层负载均衡(基于HTTP)每发送一次新的数据,就会轮训到下一台服务器上去。

网络模型知识回顾

  • 七层网络主要关注应用层(HTTP)和传输层(TCP)
    在这里插入图片描述

  • 服务器与服务器之间的通信必须需要IP地址+端口号
    (1)IP地址分为局域网和外网
    (2)端口号:用来区分不同的应用程序

  • TCP与UDP的区别

  1. UDP:
    (1)是面向无连接的(对方是否在线我不管,直接发送就行),将数据以及源的封装成数据包,不需要建立连接
    (2)每个数据报的大小限制在64k以内
    (3)因不需要建立连接,所以是不可靠协议(可能发生丢包)
    (4)不需要建立连接,速度快
  2. TCP
    (1)建立连接,形成传输数据的通道
    (2)在连接中进行大数据量的传输,以字节流的方式
    (3)通过三次握手完成连接,是可靠的协议(不会发生丢包,三次握手确定了对方在线,不丢包,安全可靠)
    (4)必须建立连接,所以效率比UDP差
  • 三次握手:
    在这里插入图片描述
    简单来说就是:
    (1)在吗?
    (2)在!
    (3)好!
    这时候就确认对方在线,连接通道建立,可以发送数据

HTTP协议

  • HTTP协议是一种超文本传输协议,他的底层是基于TCP协议封装的,HTTP协议是属于应用层的协议
  • HTTP协议主要由请求和响应组成的。
  • HTTP协议的请求分为请求参数和方法类型,请求头,请求体;响应分为响应状态,响应头,响应体等。
  • HTTP协议是同步方式。

安装环境(Linux)

  • 注意:我们的nginx一定要是1.9以上的。
  • 实现的效果
    在这里插入图片描述
  1. 下载安装包

(1)下载nginx

wget http://nginx.org/download/nginx-1.9.10.tar.gz

(2)下载nginx_tcp_proxy_module插件

wget https://github.com/yaoweibin/nginx_tcp_proxy_module/tarball/master

(3)解压插件

tar -zxvf master

(4)解压nginx

tar -zxvf nginx-1.9.10.tar.gz

(5)进入nginx目录

cd nginx-1.9.10

(6)下载tcp.patch的最新补丁

patch -p1 < …/yaoweibin-nginx_tcp_proxy_module-b8a3028/tcp.patch
如果报错:
-bash: patch: 未找到命令 执行 yum -y install patch 安装即可。

(7)编译Nginx

./configure --add-module=…/yaoweibin-nginx_tcp_proxy_module-121c026

(8)make && make install

make && make install

如果报错
In file included from …/nginx_tcp_proxy_module-master/ngx_tcp.h:32,
from …/nginx_tcp_proxy_module-master/ngx_tcp.c:5:
…/nginx_tcp_proxy_module-master/ngx_tcp_upstream.h:144: error: expected specifier-qualifier-list before ‘ngx_resolver_addr_t’
make[1]: *** [objs/addon/nginx_tcp_proxy_module-master/ngx_tcp.o] Error 1
make[1]: Leaving directory `/opt/apps_install/nginx-1.9.9’
make: *** [build] Error 2
修改第三方模块包里的头文件,ngx_tcp_upstream.h 144 行将ngx_resolver_addr_t 改为 ngx_addr_t
Cd /usr/local/yaoweibin-nginx_tcp_proxy_module-121c026
Vi ngx_tcp_upstream.h
在这里插入图片描述

(9)继续 make && make install
(10)修改nginx.conf的配置文件

### 修改为TCP模块
tcp {
   
   ### 定义多个上游服务器
   upstream  itmayeidu{
      ### 定义TCP模块上游服务器
      server 192.168.5.165:80001;
	  server 192.168.5.165:80002;
   }
    server {
        listen       9999;
        server_name  192.168.212.137;
		### 反向代理upstream
        proxy_pass itmayeidu;
    }
}

(7)启动Nginx
(8)创建两个Socket服务器端,因为Socket其实就是依据TCP实现的,这里省略Socket的服务器端程序,就是最基本的两个
在这里插入图片描述
(9)Nginx连接反向代理TCP服务器
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
window 版本 nginx 最新版本 一般结合Tomcat 使用 配置信息如下: #运行用户 user www-data; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; #工作模式及连接数上限 events { use epoll; #epoll是多路复用IO(I/O Multiplexing)的一种方式,但是仅用于linux2.6以上内核,可以大大提高nginx的性能 worker_connections 1024;#单个后台worker process进程的最大并发链接数 # multi_accept on; } #设定http服务器,利用它的反向代理功能提供负载均衡支持 http { #设定mime类型,类型由mime.type文件定义 include /etc/nginx/mime.types; default_type application/octet-stream; #设定日志格式 access_log /var/log/nginx/access.log; #sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,对于普通应用, #必须设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置为 off,以平衡磁盘与网络I/O处理速度,降低系统的uptime. sendfile on; #tcp_nopush on; #连接超时时间 #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; #开启gzip压缩 gzip on; gzip_disable "MSIE [1-6]\.(?!.*SV1)"; #设定请求缓冲 client_header_buffer_size 1k; large_client_header_buffers 4 4k; include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; #设定负载均衡服务器列表 upstream mysvr { #weigth参数表示权值,权值越高被分配到的几率越大 #本机上的Squid开启3128端口 server 192.168.8.1:3128 weight=5; server 192.168.8.2:80 weight=1; server 192.168.8.3:80 weight=6; } server { #侦听80端口 listen 80; #定义使用www.xx.com访问 server_name www.xx.com; #设定本虚拟主机的访问日志 access_log logs/www.xx.com.access.log main; #默认请求 location / { root /root; #定义服务器的默认网站根目录位置 index index.php index.html index.htm; #定义首页索引文件的名称 fastcgi_pass www.xx.com; fastcgi_param SCRIPT_FILENAME $document_root/$fastcgi_script_name; include /etc/nginx/fastcgi_params; } # 定义错误提示页面 error_page 500 502 503 504 /50x.html; location = /50x.html { root /root; } #静态文件,nginx自己处理 location ~ ^/(images|javascript|js|css|flash|media|static)/ { root /var/www/virtual/htdocs; #过期30天,静态文件不怎么更新,过期可以设大一点,如果频繁更新,则可以设置得小一点。 expires 30d; } #PHP 脚本请求全部转发到 FastCGI处理. 使用FastCGI默认配置. location ~ \.php$ { root /root; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /home/www/www$fastcgi_script_name; include fastcgi_params; } #设定查看Nginx状态的地址 location /NginxStatus { stub_status on; access_log on; auth_basic "NginxStatus"; auth_basic_user_file conf/htpasswd; } #禁止访问 .htxxx 文件 location ~ /\.ht { deny all; } } }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值