本文将分享TraefikHTTP反向代理、负载均衡软件的详细内容,并且还将对反向代理与负载均衡进行详尽解释,此外,我们还将为大家带来关于CDN、反向代理、负载均衡、Linux下面安装nginx以及进行
本文将分享Traefik HTTP反向代理、负载均衡软件的详细内容,并且还将对反向代理与负载均衡进行详尽解释,此外,我们还将为大家带来关于CDN、反向代理、负载均衡、Linux 下面安装 nginx 以及进行TCP反向代理、负载均衡的过程、Nginx 反向代理、负载均衡配置、nginx反向代理、动静分离、负载均衡的相关知识,希望对你有所帮助。
本文目录一览:- Traefik HTTP反向代理、负载均衡软件(反向代理与负载均衡)
- CDN、反向代理、负载均衡
- Linux 下面安装 nginx 以及进行TCP反向代理、负载均衡的过程
- Nginx 反向代理、负载均衡配置
- nginx反向代理、动静分离、负载均衡
Traefik HTTP反向代理、负载均衡软件(反向代理与负载均衡)
Traefik 介绍
Træfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件,能轻易的部署微服务. 它支持多种后端 (Docker, Swarm,
Mesos/Marathon, Consul, Etcd, Zookeeper, BoltDB, Rest API, file…)
,可以对配置进行自动化、动态的管理.
选择traefik主要是有以下特点让我们决定使用:
-
Golang编写,单文件部署,与系统无关,同时也提供小尺寸Docker镜像。
-
支持Docker/Etcd后端,天然连接我们的微服务集群。
-
内置Web UI,管理相对方便。
-
自动配置Acme(Let’s Encrypt)证书功能。
-
性能尚可,我们也没有到压榨LB性能的阶段,易用性更重要。
除了这些以外,traefik还有以下特点:
-
Restful API支持。
-
支持后端健康状态检查,根据状态自动配置。
-
支持动态加载@R_301_5668@和graceful重启。
-
支持WebSocket和HTTP/2。
除了上面提到的微服务化集群支持,一些AB测试阶段也可以通过frontend的路由特性进行动态分配,当然这些对HAProxy等软件都是标准支持的。
Traefik 官网
https://traefik.io/
CDN、反向代理、负载均衡
网站需要加速网站的访问速度,主要手段有使用CDN和反向代理。
SDN和反向代理的基本原理都是缓存,区别
1、在于CDN部署在网络提供商的机房,使用户在请求网站服务时,可以从距离自己最近的网络提供商机房获取数据;
2、反向代理则部署在网站的中心机房,当用户请求到达中心机房后,首先访问的服务器反向代理服务器,如果反向代理服务器中缓存着用户请求的资源,
就将其直接返回给用户。
使用这两个技术,都是为了:一方面加快用户访问速度,另一方面也减轻了后端服务器的负载压力。
在现实开发中,企业均会采用第三方的 CDN 服务,阿里 CND 直接将域名绑定管理即可,按量收费。
也可以 在使用亚马逊提供的反向代理 集群服务ELB服务 。
细节
1、反向代理
用户在请求时,先把请求发送给代理的服务器,然后由代理服务器根据算法去请求真实的服务器,最后返回给用户。这种做法,其一是提高了安全性;
其二是通过多台的real server分担了用户的请求,实现了负载均衡。
2、负载均衡
负载均衡的出现,是通过横向的扩展,尽可能地降低单台服务器的压力。常见WEB层面的负载均衡的方案有硬件F5、Nginx代理、LVS、各个云商的负载
均衡服务(如AWS的ELB服务)等。负载均衡后面连的一般是实际提供服务的服务器,如通过ELB服务,可以做到流量的均匀分担,从而减少单机服务器的压力。
Linux 下面安装 nginx 以及进行TCP反向代理、负载均衡的过程
1. 下载安装nginx
注意 因为stream 并不是 nginx自带的module 所以需要 在安装是 通过 --with 的方式增加上.
下载必要的程序包
# openssl
wget https://www.openssl.org/source/openssl-1.1.1c.tar.gz
#zilib
wget http://www.zlib.net/zlib-1.2.11.tar.gz
#pcre
wget https://netix.dl.sourceforge.net/project/pcre/pcre/8.40/pcre-8.40.tar.gz
#nginx
wget http://nginx.org/download/nginx-1.17.3.tar.gz
2. 解压缩
tar -zxvf xxxx.tar.gz
3. 分别进行安装
1. 首先 使用 tar 包 安装上 zlib openssh 以及 pcre 三个包
Firest 进入解压缩好的目录
./configure or ./config
second
make && make install
2. 进行安装nginx
#进入nginx 的目录
执行配置.
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module --with-http_realip_module --with-http_gzip_static_module --with-stream --with-stream_ssl_module
# 注意 stream 就可以进行 TCP层的反向代理了.
参考网站:https://blog.csdn.net/jijiuqiu6646/article/details/78675891
4. 问题解决.
打开nginx 时会报错 如下:
[root@k8smaster sbin]# ./nginx
./nginx: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
[root@k8smaster sbin]# openssl version
openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
解决方法为:
参考网站:
https://blog.csdn.net/caohongshuang/article/details/78031978
查看 依赖关系
ldd $(which /usr/local/nginx/sbin/nginx)
[root@k8smaster sbin]# ldd $(which /usr/local/nginx/sbin/nginx)
linux-vdso.so.1 => (0x00007ffe6b5f2000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f95a7389000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f95a716d000)
libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00007f95a6f36000)
libpcre.so.1 => /lib64/libpcre.so.1 (0x00007f95a6cd4000)
libssl.so.1.1 => /lib64/libssl.so.1.1 (0x00007f95a6a42000)
libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f95a6559000)
libz.so.1 => /lib64/libz.so.1 (0x00007f95a6343000)
libc.so.6 => /lib64/libc.so.6 (0x00007f95a5f76000)
/lib64/ld-linux-x86-64.so.2 (0x00007f95a758d000)
libfreebl3.so => /lib64/libfreebl3.so (0x00007f95a5d73000)
进入到openssl 相关的目录 进行 软连接处理
[root@k8smaster sbin]# cd /usr/local/lib64/
[root@k8smaster lib64]# ll
total 10468
drwxr-xr-x 2 root root 55 Sep 2 18:26 engines-1.1
-rw-r--r-- 1 root root 5619436 Sep 2 18:26 libcrypto.a
lrwxrwxrwx 1 root root 16 Sep 2 18:26 libcrypto.so -> libcrypto.so.1.1
-rwxr-xr-x 1 root root 3383960 Sep 2 18:26 libcrypto.so.1.1
-rw-r--r-- 1 root root 1022072 Sep 2 18:26 libssl.a
lrwxrwxrwx 1 root root 13 Sep 2 18:26 libssl.so -> libssl.so.1.1
-rwxr-xr-x 1 root root 684992 Sep 2 18:26 libssl.so.1.1
drwxr-xr-x 2 root root 61 Sep 2 18:26 pkgconfig
[root@k8smaster lib64]# ln libssl.so.1.1 /usr/lib64/libssl.so.1.1
[root@k8smaster lib64]# ln libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
5. 修改nginx配置文件.
注意 第三步 nginx的 configure 时有一个配置简述
Configuration summary
+ using system PCRE library
+ using system OpenSSL library
+ using system zlib library
nginx path prefix: "/usr/local/nginx"
nginx binary file: "/usr/local/nginx/sbin/nginx"
nginx modules path: "/usr/local/nginx/modules"
nginx configuration prefix: "/usr/local/nginx/conf"
nginx configuration file: "/usr/local/nginx/conf/nginx.conf"
nginx pid file: "/usr/local/nginx/logs/nginx.pid"
nginx error log file: "/usr/local/nginx/logs/error.log"
nginx http access log file: "/usr/local/nginx/logs/access.log"
nginx http client request body temporary files: "client_body_temp"
nginx http proxy temporary files: "proxy_temp"
nginx http fastcgi temporary files: "fastcgi_temp"
nginx http uwsgi temporary files: "uwsgi_temp"
nginx http scgi temporary files: "scgi_temp"
这里面就可以看到配置文件的位置了. 进行修改可以.
vim /usr/local/nginx/conf/nginx.conf
增加上与 http 同级的配置节:
stream{
server {
listen 1433;
proxy_pass 10.24.14.56:1433;
}
}
# 注意 第一点 需要有 分号 我经常忘记
# 第二点 大括号要处理好.
如果 80 端口已经使用的花 可以在http 里面讲 80端口修改一下就可以了.
6. 启动以及验证
/usr/local/nginx/sbin/nginx -s reload
7. 验证负载均衡
修改配置节的内容:
stream{
upstream zhaobsh{
server 10.24.14.56:1433;
server 10.24.210.11:1433;
}
server {
listen 1433;
proxy_pass zhaobsh;
}
}
验证效果为:
Nginx 反向代理、负载均衡配置
一、概述
Tomcat 服务器作为一个 Web 服务器,其并发数在 300-500 之间,如果有超过 500的并发数便会出现 Tomcat 不能响应新的请求的情况,严重影响网站的运行。另外,在访问量大的情况下,Tomcat 的线程数会不断增加。由于Tomcat 自身对内存的占用有控制,当对内存的占用达到最大值时便会出现内存溢出,对网站的访问严重超时等现象,这时便需要重新启动 Tomcat 以释放占用的内存,这样做便会阻断网站运行。所以对 Tomcat 做负载均衡便很有必要。目前可以和 Tomcat 做负载均衡的主流服务器是 Apache ,但是 Nginx 由于功能多、配置简单等优点逐渐成为很多负载均衡服务器的首选。 Nginx 的并发数可达到50000 ,所以理论上可以和Tomcat 以 1:100 的比例来配置,这样便可以很好的解决网站并发瓶颈问题。
二、Nginx 之反向代理
(1).正向代理的概念
正向代理: 也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。 结论就是,正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。
(2).反向代理的概念
继续举例:
例用户访问 http://www.test.com/readme,但www.test.com上并不存在readme页面,他是偷偷从另外一台服务器上取回来,然后作为自己的内容返回用户,但用户并不知情。这里所提到的 www.test.com 这个域名对应的服务器就设置了反向代理功能。 结论就是,反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间(name-space)中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
三、Nginx之 负载均衡
nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除非那个后端服务器宕了才会换一个。
nginx的upstream目前支持的5种方式的分配
1、轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。 upstream backserver { server 192.168.0.14; server 192.168.0.15; }
2、指定权重 指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。 upstream backserver { server 192.168.0.14 weight=10; server 192.168.0.15 weight=10; }
3、IP绑定 ip_hash 每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。 upstream backserver { ip_hash; server 192.168.0.14:88; server 192.168.0.15:80; }
4、fair(第三方) 按后端服务器的响应时间来分配请求,响应时间短的优先分配。 upstream backserver { server server1; server server2; fair; }
5、url_hash(第三方) 按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。 upstream backserver { server squid1:3128; server squid2:3128; hash $request_uri; hash_method crc32; }
在需要使用负载均衡的server中增加
proxy_pass http://backserver/; upstream backserver{ ip_hash; server 127.0.0.1:9090 down; (down 表示单前的server暂时不参与负载) server 127.0.0.1:8080 weight=2; (weight 默认为1.weight越大,负载的权重就越大) server 127.0.0.1:6060; server 127.0.0.1:7070 backup; (其它所有的非backup机器down或者忙的时候,请求backup机器) }
max_fails :允许请求失败的次数默认为1.当超过最大次数时,返回proxy_next_upstream 模块定义的错误
fail_timeout:max_fails次失败后,暂停的时间
http://blog.csdn.net/gaowenhui2008/article/details/46697895
四、配置
http://www.cnblogs.com/piscesLoveCc/p/5794926.html
nginx.conf
#user nobody;
worker_processes 1;
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#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 logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
#服务器的集群
** upstream 192.168.65.131 { #服务器集群名字
server 192.168.100.111:8081 weight=1;#服务器配置 weight是权重的意思,权重越大,分配的概率越大。
server 192.168.65.130:8081 weight=2;
} **
server {
listen 80;
server_name 192.168.65.131;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://192.168.65.131;
proxy_set_header X-Real-IP $remote_addr;
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}
# deny access to .htaccess files, if Apache''s document root
# concurs with nginx''s one
#
#location ~ /\.ht {
# deny all;
#}
}
# another virtual host using mix of IP-, name-, and port-based configuration
#
#server {
# listen 8000;
# listen somename:8080;
# server_name somename alias another.alias;
# location / {
# root html;
# index index.html index.htm;
# }
#}
# HTTPS server
#
#server {
# listen 443 ssl;
# server_name localhost;
# ssl_certificate cert.pem;
# ssl_certificate_key cert.key;
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 5m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
# location / {
# root html;
# index index.html index.htm;
# }
#}
}
nginx反向代理、动静分离、负载均衡
反向代理
要说反向代理,我们就先要理解正向代理 ,下面我们就谈谈正向代理和反向代理吧。
正向代理
一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端才能使用正向代理。(摘自百度百科)
如下图:
正向代理
正向代理好比,你去找工作,首先你不知道哪里有工作,但是你可以把你的要求信息告诉别人,这时别人知道你想找什么样的工作了。他就帮你问,然后又合适的工作后,别人告诉你这里有符合你要求的工作,你就可以去试试了。
正向代理总结就一句话:代理端代理的是客户端。
反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。(摘自百度百科)
如下图:
反向代理
反向代理好比,你去超市或者购物中心购物,超市、购物中心就好比一个代理。你只关心你去超市、购物中心购买你想买的商品,具体商品从哪里来你并不关心。但是超市本没有商品,所以超市、购物中心自身去进货,这个过程你并不知道,没有感知。这时代理端代理的是超市、购物中心,你并看不到供货商。
反向代理总结就一句话:代理端代理的是服务端。
下面我们就来看看nginx的反向代理如何做了
反向代理前后如图:
反向代理前后
nginx反向代理其实主要通过配置proxy_pass参数即可代理到某个服务器
vim /usr/local/nginx/conf/nginx.conf
添加如下配置即可:
location / { //在对应的 location 中配置,配置中的监听端口为80
proxy_pass http://127.0.0.1:8080
}
启动`tomcat`、`nginx`,`/usr/local/nginx/sbin/nginx`
浏览器访问,`http://192.168.58.149` 如下图所示:

但是当我们访问`http://192.168.58.149/demo.jsp`,如下图:
`demo.jsp`,将demo.jsp拷贝到`tomcat`中`ROOT`下,中代码如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Welcome to my demo.jsp</title>
</head>
<body>
Welcome to my demo.jsp<br/>
remote ip is: <%-- <%=request.getHeader("real_ip") %> --%> <br/>
nginx server ip is: <%=request.getRemoteAddr()%>
</body>
</html>

我们得到的是`nginx`代理服务器的`ip`,但是我们并不想要代理服务器的ip,我们想要的是客户端真实的访问ip,因此我们可以通过`nginx`中获取真实`ip`,然后传给真实服务器。
同样,我们需要到`nginx.conf`中配置,如下:`proxy_set_header real_ip $remote_addr;`
location / {
#设置真实ip
proxy_set_header real_ip $remote_addr; //real_ip 设置变量名,可以通过web端获取
proxy_pass http://127.0.0.1:8080;//代理8080端口的tomcat服务器
}
同时,demo.jsp页面中打开remote ip is: <%=request.getHeader("real_ip") %> <br/>
接下来,重启nginx,访问浏览器
/usr/local/nginx/sbin/nginx -s reload
如图:
nginx真实ip
反向代理到这里就完毕了,接下来就说说动静分离吧
动静分离
动静分离是让动态网站里的动态网页根据一定规则把不变的资源和经常变的资源区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路(摘自夏天的森林的博客)。
动静分离简单的概括是:动态文件与静态文件的分离。
为什么要做动静分离?
在我们的软件开发中,有些请求是需要后台处理的(如:.jsp,.do等等),有些请求是不需要经过后台处理的(如:css、html、jpg、js等等文件),这些不需要经过后台处理的文件称为静态文件,否则动态文件。因此我们后台处理忽略静态文件。这会有人又说那我后台忽略静态文件不就完了吗。当然这是可以的,但是这样后台的请求次数就明显增多了。在我们对资源的响应速度有要求的时候,我们应该使用这种动静分离的策略去解决。
动静分离将网站静态资源(HTML,JavaScript,CSS,img等文件)与后台应用分开部署,提高用户访问静态代码的速度,降低对后台应用访问。这里我们将静态资源放到nginx中,动态资源转发到tomcat服务器中。
因此,动态资源转发到tomcat服务器我们就使用到了前面讲到的反向代理了。
动静分离的原理很简单,通过location对请求url进行匹配即可,具体配置如下:
vim /usr/local/nginx/conf/nginx.conf
//动态资源
location ~ .(jsp|jspx|do|action)(/.*)?$ { //动态请求转发到tomcat服务器,匹配方式可自定义
#设置真实ip
proxy_set_header real_ip $remote_addr; //real_ip 设置变量名,可以通过web端获取
proxy_pass http://127.0.0.1:8080;
}
//静态资源
location ~ .*.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ { //静态资源到nginx服务器下static(具体目录自定义)获取
root static;
}
在nginx下创建static文件夹
mkdir /usr/local/nginx/static,并且拷贝1.png到static下
启动tomcat、nginx,访问http://192.168.58.149/1.png和...://192.168.58.149/demo.jsp,如图:
静态资源:
静态资源
动态资源:
动态资源
动静分离也结束啦,赶紧去试试吧!
负载均衡
负载均主要衡解决网络拥塞问题,提高服务器响应速度,服务就近提供,达到更好的访问质量,减少后台服务器大并发压力。主要根据算法策略将请求分摊到多台后台服务器处理。我们以weight(权重)策略为例:
负载均衡
nginx实现负载均衡主要通过upstream,以两个tomcat服务器为例:192.168.58.149:8080 和 192.168.58.150:8080
nginx.conf配置如下:
在 http 下配置:
upstream balance {
#weight 值越大,负载权重越大,请求次数越多
#max_fails 允许请求失败的次数,超过失败次数后,转发到下一个服务器,当有max_fails个请求失败,就表示后端的服务器不可用,默认为1,将其设置为0可以关闭检查
#fail_timeout 指定时间内无响应则失败, 在以后的fail_timeout时间内nginx不会再把请求发往已检查出标记为不可用的服务器
#down 表示当前server不参与负载
#backup 其他非backup server都忙的时候,backup server作为备用服务器,将请求转发到backup服务器
server 192.168.58.149:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.58.150:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.58.151:8080 down;
#server 192.168.58.152:8080 backup;
}
location / {
#设置真实ip
proxy_set_header real_ip $remote_addr; #real_ip 设置变量名,可以通过web端获取
proxy_pass http://balance;//配置上面添加的负载服务器
}
注意upstream和server为同级
启动149的tomcat、150的tomcat、nginx,访问浏览器试试吧:
连续访问两次效果图如下:
第一次:
149tomcat
第二次:
150tomcat
除了上面提到的weight权重策略,还有ip_hash、url_hash哈希策略,后续有时间再补上吧。
今天的关于Traefik HTTP反向代理、负载均衡软件和反向代理与负载均衡的分享已经结束,谢谢您的关注,如果想了解更多关于CDN、反向代理、负载均衡、Linux 下面安装 nginx 以及进行TCP反向代理、负载均衡的过程、Nginx 反向代理、负载均衡配置、nginx反向代理、动静分离、负载均衡的相关知识,请在本站进行查询。
本文标签: