当前位置: 首页 > news >正文

买了云服务器怎么做网站asp网站发邮件

买了云服务器怎么做网站,asp网站发邮件,吴中区企业网络推广,三元里网站建设一#xff1a;负载均衡 1、概念 负载均衡#xff1a; Load Balance #xff0c;简称 LB #xff0c;是一种服务或基于硬件设备等实现的高可用反向代理技术#xff0c; 负载均 衡将特定的业务(web 服务、网络流量等 ) 分担给指定的一个或多个后端特定的服务器或设 备…一负载均衡 1、概念 负载均衡 Load Balance 简称 LB 是一种服务或基于硬件设备等实现的高可用反向代理技术 负载均 衡将特定的业务(web 服务、网络流量等 ) 分担给指定的一个或多个后端特定的服务器或设 备从而提高了 公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态 扩展 2、作用 Web 服务器的动态水平扩展 -- 对用户无感知 增加业务并发访问及处理能力 -- 解决单服务器瓶颈问题 节约公网 IP 地址 -- 降低 IT 支出成本 隐藏内部服务器 IP-- 提高内部服务器安全性 配置简单 -- 固定格式的配置文件 功能丰富 -- 支持四层和七层支持动态下线主机 性能较强 -- 并发数万甚至数十万 3、四层负载均衡 1.通过 ipport 决定负载均衡的去向。 2. 对流量请求进行 NAT 处理转发至后台服务器。 3. 记录 tcp 、 udp 流量分别是由哪台服务器处理后续该请求连接的流量都通过该服务器处理。 4. 支持四层的软件 lvs重量级四层负载均衡器。 Nginx轻量级四层负载均衡器可缓存。nginx四层是通过upstream模块 Haproxy模拟四层转发 4、七层负载均衡 1.通过虚拟 ur| 或主机 ip 进行流量识别根据应用层信息进行解析决定是否需要进行负载均衡。 2. 代理后台服务器与客户端建立连接如 nginx 可代理前后端与前端客户端 tcp 连接与后端服务 器建立tcp连接 , 3. 支持 7 层代理的软件 Nginx:基于http协议(nginx七层是通过proxy_pass) Haproxy:七层代理会话保持、标记、路径转移等。 5、 四层和七层的区别 所谓的四到七层负载均衡就是在对后台的服务器进行负载均衡时 依据四层的信息或七层的 信息 来决 定怎么样转发流量 四层的负载均衡就是通过发布三层的 IP 地址 VIP 然后加四层的端口号来决定哪些流量需要做负载均衡对需要处理的流量进行NAT 处理转发至后台服务器并记录下这个 TCP 或者 UDP 的流量是由哪台服务器处理的后续这个连接的所有流量都同样转发到同一台服务器处理 七层的负载均衡就是在四层的基础上没有四层是绝对不可能有七层的再考虑应用层的特征比如同一个Web 服务器的负载均衡除了根据 VIP 加 80 端口辨别是否需要处理的流量还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。 1. 分层位置 : 四层负载均衡在传输层及以下七层负载均衡在应用层及以下 2. 性能 : 四层负载均衡架构无需解析报文消息内容在网络吞吐量与处理能力上较高 : 七层可支持解 析应用层报文消息内容识别URL 、 Cookie 、 HTTP header 等信息。、 3. 原理 : 四层负载均衡是基于 ipport; 七层是基于虚拟的 URL 或主机 IP 等。 4. 功能类比 : 四层负载均衡类似于路由器 ; 七层类似于代理服务器。 5.安全性 : 四层负载均衡无法识别 DDoS 攻击 ; 七层可防御 SYN Cookie/Flood 攻击 二、haproxy基本部署和全局匹配 global 全局配置段 进程及安全配置相关的参数 性能调整相关参数 Debug参数 proxies 代理配置段 defaults为frontend, backend, listen提供默认配置 frontend前端相当于nginx中的server {} backend后端相当于nginx中的upstream {} listen同时拥有前端和后端配置,配置简单,生产推荐使用 1server配置 [rootwebserver ~]# vmset.sh eth0 172.25.254.10 webserver.hyl.oeg [rootwebserver ~]# systemctlstop firewalld.service [rootwebserver ~]# yum install nginx -y   [rootwebserver ~]# echo webserver - 172.25.254.10 /usr/share/nginx/html/index.html [rootwebserver ~]# systemctl restart nginx.service [rootwebserver2 ~]# vmset.sh eth0 172.25.254.20 webserver2.hyl.oeg [rootwebserver2 ~]# systemctlstop firewalld.service [rootwebserver2 ~]# yum install nginx -y   [rootwebserver2 ~]# echo webserver2 - 172.25.254.20 /usr/share/nginx/html/index.html [rootwebserver2 ~]# systemctl restart nginx.service 2haproxy配置 ip基本配置 [roothaproxy ~]# vmset.sh eth0 172.25.254.100 haproxy.hyl.org [roothaproxy ~]# systemctl stop firewalld.service 测试 [roothaproxy ~]# curl 172.25.254.10 webserver - 172.25.254.10 [roothaproxy ~]# curl 172.25.254.20 webserver2 - 172.25.254.20 安装haproxy [roothaproxy ~]# dnf install haproxy -y    安装haproxy [roothaproxy ~]# rpm -qc haproxy       查看文件 /etc/haproxy/haproxy.cfg /etc/logrotate.d/haproxy /etc/sysconfig/haproxy [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg   修改配置文件frontend webcluster    bind *:80    mode http    use_backend webcluster-host backend webcluster-host    balance roundrobin    server web1 172.25.254.10:80    server web2 172.25.254.20:80 [roothaproxy ~]# systemctl restart haproxy.service    重启haproxy服务 测试 [roothaproxy ~]# curl 172.25.254.100 webserver - 172.25.254.10 [roothaproxy ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 listen块 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg listen webcluster   bind *:80   mode http   balance roundrobin   server webl 172.25.254.10:80   server web2 172.25.254.20:80 [roothaproxy ~]# systemctl restart haproxy.service 测试 [roothaproxy ~]# curl 172.25.254.100 webserver - 172.25.254.10 [roothaproxy ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 3多进程和线程 1):查看多线程信息 [roothaproxy ~]#  pstree -p | grep haproxy            |-haproxy(33040)---haproxy(33043)--{haproxy}(33044)            |                                 |-{haproxy}(33045)            |                                 -{haproxy}(33046) [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg 2):启动多线程 [roothaproxy conf.d]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service   重启 3查看多线程信息 [roothaproxy ~]#  pstree -p | grep haproxy            |-haproxy(33058)--haproxy(33060)            |                -haproxy(33061) 4启动多线程 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service   重启 [roothaproxy ~]#  pstree -p | grep haproxy            |-haproxy(33073)---haproxy(33075)---{haproxy}(33076) [roothaproxy ~]# pstree -p | grep haproxy            |-haproxy(33084)---haproxy(33086)--{haproxy}(33087)            |                                 |-{haproxy}(33088)            |                                 -{haproxy}(33089) [roothaproxy ~]# cat /proc/33084/status | grep -i thread Threads:        1 Speculation_Store_Bypass:       thread vulnerable  4日志 1查看日志文件名 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg    2编写文件 [roothaproxy ~]# vim /etc/rsyslog.conf [roothaproxy ~]# systemctl restart rsyslog.service 3查看日志 [roothaproxy ~]# cat /var/log/haproxy.log Aug  7 16:10:08 localhost haproxy[33086]: 172.25.254.100:59108 [07/Aug/2024:16:10:08.997] webcluster webcluster/webl 0/0/0/1/1 200 225 - - ---- 1/1/0/0/0 0/0 GET / HTTP/1.1 三、proxies 1、proxies参数说明 参数类型作用default[]proxies默认配置项,针对以下的frontend、backend和listen生效,可以多个namet也可以没有namefrontendproxies前端servername,类似于Nginx的一个虚拟主机server和LVS服务集群backendproxies后端服务器组,等Fnginx的upstream和LVS中的RS服务器listenproxies将frontend和backend合并在一起配置相对于frontend和backend配置更简洁生产常用 注意name 字段只能使用大小写字母数字 ‘-’(dash) _‘(underscore) . (dot) 和 :(colon) 并且严格 区分大小写 2、Proxies配置-defaults mode                          http                                          # HAProxy 实例使用的连接协议 log                               global                                       # 指定日志地址和记录日志条目的 syslog/rsyslog 日志设备                   #此处的 global 表示使用 global 配置段中设定的log 值。 option                          httplog      # 日志记录选项 httplog 表示记录与 HTTP会话相关的各种属性值 # 包括 HTTP 请求、会话状态、连接数、源地 址以及连接时间等 option                      dontlognull                                  #dontlognull 表示不记录空会话连接日志 option                 http-server-close # 等待客户端完整 HTTP 请求的时间此处为等待10s 。 option forwardfor       except 127 .0.0.0/8 # 透传客户端真实 IP 至后端 web 服务器 # 在 apache 配置文件中加入 :br%{XForwarded-For}i # 后在 webserer 中看日志即可看到地址透传信息 option redispatch # 当 server Id 对应的服务器挂掉后强制定向到其他健康的服务器重新派发 option http-keep-alive # 开启与客户端的会话保持 retries 3 # 连接后端服务器失败次数 timeout http-request 1000s # 等待客户端请求完全被接收和处理的最长时间 timeout queue 60s # 设置删除连接和客户端收到 503 或服务不可用等提示信息前的等待时间 timeout connect 120s # 设置等待服务器连接成功的时间 timeout client 600s # 设置允许客户端处于非活动状态即既不发送数据也不接收数据的时间 timeout server 600s # 设置服务器超时时间即允许服务器处于既不接收也不发送数据的非活动时间 timeout http-keep-alive 60s #session 会话保持超时时间此时间段内会转发到相同的后端服务器 timeout check 10s # 指定后端服务器健康检查的超时时间 maxconn 3000 default-server inter 1000 weight 3 指定后端服务器默认设置 3、Proxies配置-frontend frontend 配置参数 bind 指定 HAProxy 的监听地址可以是 IPV4 或 IPV6 可以同时监听多个 IP 或端口可同时用于 listen 字段中 # 格式 bind [address]:port_range [, ...] [param*] # 注意如果需要绑定在非本机的 IP 需要开启内核参数 net.ipv4.ip_nonlocal_bind1 backlog backlog # 针对所有 server 配置 , 当前端服务器的连接数达到上限后的后援队列长度注意不支持 frontend 配置示例 haproxy ~]# vim /etc/haproxy/haproxy.cfg ... 上面内容省略 ... frontend lee-webserver-80 bind 172.25.254.100:80 mode http use_backend lee-webserver-80-RS # 调用 backend 的名称 4、Proxies配置-backend 定义一组后端服务器backend服务器将被frontend进行调用。 注意: backend 的名称必须唯一,并且必须在listen或frontend中事先定义才可以使用,否则服务无法启动 mode http|tcp # 指定负载协议类型 , 和对应的 frontend 必须一致 option # 配置选项 server # 定义后端 real server, 必须指定 IP 和端口 注意 option 后面加 httpchk smtpchk,mysql-check,pgsql-check ssl-hello-chk 方法可用于实现更 多应用层检测功能。 server 配置 # 针对一个 server 配置 check    # 对指定 real 进行健康状态检查如果不加此设置默认不开启检查 , 只有 check 后面 没有其它配置也可以启用检查功能  # 默认对相应的后端服务器 IP 和端口 , 利用 TCP 连接进行周期性健康性检查 , 注意必须指定 端口才能实现健康性检查 addr IP # 可指定的健康状态监测 IP 可以是专门的数据网段减少业务网络的流量 port num # 指定的健康状态监测端口 inter num # 健康状态检查间隔时间默认 2000 ms fall num # 后端服务器从线上转为线下的检查的连续失效次数默认为 3 代码示例 rise num # 后端服务器从下线恢复上线的检查的连续有效次数默认为 2 weight weight # 默认为 1 最大值为 256 0( 状态为蓝色 ) 表示不参与负载均衡但仍接受持 久连接 backup # 将后端服务器标记为备份状态 , 只在所有非备份主机 down 机时提供服务类似 Sorry Server disabled # 将后端服务器标记为不可用状态即维护状态除了持久模式                          # 将不再接受连接 , 状态为深黄色 , 优雅下线 , 不再接受新用户的请求 redirect prefix http://www.baidu.com/ # 将请求临时 (302) 重定向至其它 URL 只适用于 http 模 式 maxconn maxconn # 当前后端 server 的最大并发连接数 5、Proxies配置-listen 简化配置 使用 listen 替换 frontend 和 backend 的配置方式可以简化设置通常只用于 TCP 协议的应用 listen配置示例 haproxy ~] # vim /etc/haproxy/haproxy.cfg ... 上面内容省略 ... listen webserver_80 bind 172 .25.254.100:80 mode http option forwardfor server webserver1 192 .168.0.101:80 check inter 3s fall 3 rise 5 server webserver2 192 .168.0.102:80 check inter 3s fall 3 rise 5 ... 上面内容省略......... 实验部分 1backend配置 修改文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl reload haproxy            打开日志 [roothaproxy ~]# systemctl restart haproxy.service 测试 [roothaproxy ~]# curl 172.25.254.100 webserver - 172.25.254.10 [roothaproxy ~]# curl 172.25.254.100 webserver - 172.25.254.10 [roothaproxy ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 2、backup --- sorryserver 的端囗 haproxy安装httpd [roothaproxy ~]# yum install httpd -y 修改端口 [roothaproxy ~]# vim /etc/httpd/conf/httpd.conf 启动httpd服务 [roothaproxy ~]# echo sorry 下班了 /var/www/html/index.html [roothaproxy ~]# systemctl enable --now httpd 修改haproxy文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy 测试 [rootwebserver ~]# systemctl stop nginx.service [rootwebserver2 ~]# systemctl stop nginx.service [roothaproxy ~]# curl 172.25.254.100 sorry 下班了 [rootwebserver ~]# systemctl enable --now nginx.service [rootwebserver2 ~]# systemctl enable --now nginx.service [roothaproxy ~]# curl 172.25.254.100 webserver - 172.25.254.10 [roothaproxy ~]# curl 172.25.254.100 webserver - 172.25.254.10 [roothaproxy ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 3、下线指定 将10下线 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy 测试 [roothaproxy ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 [roothaproxy ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 4、网页重定向 修改配置文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service 测试 四、haproxy热处理 1、socat 工具 对服务器动态权重和其它状态可以利用 socat 工具进行调整 Socat 是 Linux 下的一个多功能的网络工具名字来由是Socket CAT相当于netCAT 的增强版 .Socat 的主要特点就是在两个数据流之间建立双向通道且支持众多协议和链接方式。如 IP、TCP 、 UDP 、 IPv6 、 Socket 文件等 范例利用工具 socat 对服务器动态权重调整 # 修改配置文件 [roothaproxy ~] # vim /etc/haproxy/haproxy.cfg stats socket /var/lib/haproxy/stats mode 600 level admin # 查看帮助 haproxy ~] # socat -h haproxy ~] # echo help | socat stdio /var/lib/haproxy/stats The following commands are valid at this level: help : this message prompt : toggle interactive mode with prompt quit : disconnect 。。。省略 。。。 enable server : enable a disabled server (use set server instead) # 启用服务器 set maxconn server : change a server s maxconn setting set server : change a server s state, weight or address # 设置服务器 get weight : report a server s current weight # 查看权重 set weight : change a server s weight (deprecated) # 设置权重 # 查看 haproxy 状态 [roothaproxy ~]# echo show info | socat stdio /var/lib/haproxy/stats # 查看集群状态 [roothaproxy ~]# echo show servers state | socat stdio /var/lib/haproxy/stats # 查看集群权重 [roothaproxy ~]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats 2 (initial 2) [roothaproxy ~]# echo get weight webcluster/web2 | socat stdio /var/lib/haproxy/stats 1 (initial 1) # 设置权重 [roothaproxy ~]# echo set weight webcluster/web1 1 | socat stdio /var/lib/haproxy/stats [roothaproxy ~]# echo set weight webcluster/web1 2 | socat stdio /var/lib/haproxy/stats # 下线后端服务器 [roothaproxy ~]# echo disable server webcluster/web1 | socat stdio /var/lib/haproxy/stats # 上线后端服务器 [roothaproxy ~]# echo enable server webcluster/web1 | socat stdio /var/lib/haproxy/stats 对多进程处理方法 如果开启多进程那么我们在对进程的 sock 文件进行操作时其对进程的操作时随机的 如果需要指定操作进程那么需要用多 soct 文件方式来完成 示例 haproxy ~]# vim /etc/haproxy/haproxy.cfg ... 上面内容省略 ... stats socket /var/lib/haproxy/stats1 mode 600 level admin process 1 stats socket /var/lib/haproxy/stats2 mode 600 level admin process 2 nbproc 2 cpu-map 1 0 cpu-map 2 1 ... 上面内容省略 这样每个进程就会有单独的sock 文件来进行单独管理 [roothaproxy ~]# ll /var/lib/haproxy/ 总用量 0 srw------- 1 root root 0 8 月 8 13:43 stats srw------- 1 root root 0 8 月 8 13:46 stats1 srw------- 1 root root 0 8 月 8 13:46 stats2 实验部分 单线程 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service [roothaproxy ~]# ll /var/lib/haproxy/stats srw------- 1 root root 0 8月 9 11:14 /var/lib/haproxy/stats [roothaproxy ~]# dnf install socat -y [roothaproxy ~]# echo help | socat stdio /var/lib/haproxy/stats [roothaproxy ~]# echo show info | socat stdio /var/lib/haproxy/stats ######查看集群状态######## ####修改权重#####  ####修改权重##### [roothaproxy ~]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats 2 (initial 2) [roothaproxy ~]# echo set weight webcluster/web1 1 | socat stdio /var/lib/haproxy/stats [roothaproxy ~]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats 1 (initial 2) 测试 [roothaproxy ~]# curl 172.25.254.100 webserver - 172.25.254.10 [roothaproxy ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 [roothaproxy ~]# curl 172.25.254.100 webserver - 172.25.254.10 [roothaproxy ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 #####修改权重为2##### [roothaproxy ~]# echo set weight webcluster/web1 2 | socat stdio /var/lib/haproxy/stats [roothaproxy ~]# echo get weight webcluster/web1 | socat stdio /var/lib/haproxy/stats 2 (initial 2) 测试 [roothaproxy ~]#for i in {1..10}; do curl 172.25.254.100; done webserver - 172.25.254.10 webserver2 - 172.25.254.20 webserver - 172.25.254.10 webserver - 172.25.254.10 webserver2 - 172.25.254.20 webserver - 172.25.254.10 webserver - 172.25.254.10 webserver2 - 172.25.254.20 webserver - 172.25.254.10 webserver - 172.25.254.10 ####下线服务器###### [roothaproxy ~]# echo disable server webcluster/web1 | socat stdio /var/lib/haproxy/stats [roothaproxy ~]# for i in {1..10}; do curl 172.25.254.100; done webserver2 - 172.25.254.20 webserver2 - 172.25.254.20 webserver2 - 172.25.254.20 webserver2 - 172.25.254.20 webserver2 - 172.25.254.20 webserver2 - 172.25.254.20 webserver2 - 172.25.254.20 webserver2 - 172.25.254.20 webserver2 - 172.25.254.20 webserver2 - 172.25.254.20 ######上线服务器##### [roothaproxy ~]# echo enable server webcluster/web1 | socat stdio /var/lib/haproxy/stats [roothaproxy ~]# for i in {1..10}; do curl 172.25.254.100; done webserver2 - 172.25.254.20 webserver - 172.25.254.10 webserver - 172.25.254.10 webserver2 - 172.25.254.20 webserver - 172.25.254.10 webserver - 172.25.254.10 webserver - 172.25.254.10 webserver - 172.25.254.10 webserver2 - 172.25.254.20 webserver - 172.25.254.10 多线程 五、haproxy算法 1、静态算法 静态算法按照事先定义好的规则轮询公平调度不关心后端服务器的当前负载、连接数和响应速 度等且无法实时修改权重( 只能为 0 和 1, 不支持其它值 ) 只能靠重启 HAProxy 生效。 1.1 static-rr基于权重的轮询调度 不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值) 不支持端服务器慢启动 其后端主机数量没有限制相当于LVS中的 wrr Note 慢启动是指在服务器刚刚启动上不会把他所应该承担的访问压力全部给它而是先给一部分当没 问题后在给一部分 1.2 first 根据服务器在列表中的位置自上而下进行调度 其只会当第一台服务器的连接数达到上限新请求才会分配给下一台服务 其会忽略服务器的权重设置 不支持用socat进行动态修改权重,可以设置0和1,可以设置其它值但无效 2、动态算法 动态算法 基于后端服务器状态进行调度适当调整 新请求将优先调度至当前负载较低的服务器 权重可以在haproxy运行时动态调整无需重启 2.1 roundrobin 1. 基于权重的轮询动态调度算法 2. 支持权重的运行时调整不同于 lvs 中的 rr 轮训模式 3. HAProxy 中的 roundrobin 支持慢启动 ( 新加的服务器会逐渐增加转发数 ) 4. 其每个后端 backend 中最多支持 4095 个 real server 5. 支持对 real server 权重动态调整 6. roundrobin 为默认调度算法 , 此算法使用广泛 2.2 leastconn leastconn加权的最少连接的动态 支持权重的运行时调整和慢启动即:根据当前连接最少的后端服务器而非权重进行优先调度(新客户端连接) 比较适合长连接的场景使用比如MySQL等场景。 3、其他算法 其它算法即可作为静态算法又可以通过选项成为动态算法 3.1 source 源地址 hash 基于用户源地址 hash 并将请求转发到后端服务器后续同一个源地址请求将被转发至同一个后端web 服务器。此方式当后端服务器数据量发生变化时会导致很多用户的请求转发至新的后端服务器默认为静态方式但是可以通过hash-type 支持的选项更改这个算法一般是在不插入 Cookie 的 TCP模式下使用也可给拒绝会话cookie 的客户提供最好的会话粘性适用于 session 会话保持但不支持cookie和缓存的场景源地址有两种转发客户端请求到后端服务器的服务器选取计算方式分别是取模法和一致性hash 3.1.1map-base 取模法 map-based 取模法对 source 地址进行 hash 计算再基于服务器总权重的取模最终结果决定 将此请求转发至对应的后端服务器。 此方法是静态的即不支持在线调整权重不支持慢启动可实现对后端服务器均衡调度 缺点是当服务器的总权重发生变化时即有服务器上线或下线都会因总权重发生变化而导致调度 结果整体改变 hash-type 指定的默值为此算法 Note 所谓取模运算就是计算两个数相除之后的余数 10%73, 7%43 map-based 算法基于权重取模 hash(source_ip)% 所有后端服务器相加的总权重 比如当源 hash 值时 1111 1112 1113 三台服务器 a b c 的权重均为 1 即 abc 的调度标签分别会被设定为 0 1 2 1111%31 1112%32 1113%30 1111 ----- nodeb 1112 ------ nodec 1113 ------ nodea 如果 a 下线后权重数量发生变化 1111%21 1112%20 1113%21 1112 和 1113 被调度到的主机都发生变化这样会导致会话丢失 取模法配置示例 haproxy ~]# vim /etc/haproxy/haproxy.cfg ... 上面内容省略 ... listen webserver_80 bind 172.25.254.100:80 mode http balance source server webserver1 192.168.0.101:80 weight 1 check inter 3s fall 3 rise 5 server webserver2 192.168.0.102:80 weight 1 check inter 3s fall 3 rise 5 ... 上面内容省略 ... # 不支持动态调整权重值 [roothaproxy ~]# echo set weight webserver_80/webserver1 2 | socat stdio /var/lib/haproxy/haproxy.sock Backend is using a static LB algorithm and only accepts weights 0% and 100%. # 只能动态上线和下线 [roothaproxy ~]# echo set weight webserver_80/webserver1 0 | socat stdio /var/lib/haproxy/haproxy.sock [roothaproxy ~]# echo get weight webserver_80/webserver1 | socat stdio /var/lib/haproxy/haproxy.sock 0 (initial 1) 3.1.2 一致性hash 一致性哈希当服务器的总权重发生变化时对调度结果影响是局部的不会引起大的变动 hash o mod n 该 hash 算法是动态的支持使用 socat 等工具进行在线权重调整支持慢启动 算法 1 、后端服务器哈希环点 keyAhash( 后端服务器虚拟 ip)%(2^32) 2 、客户机哈希环点 key1hash(client_ip)%(2^32) 得到的值在 [0---4294967295] 之间 3 、将 keyA 和 key1 都放在 hash 环上将用户请求调度到离 key1 最近的 keyA 对应的后端服务器 hash 环偏斜问题 增加虚拟服务器 IP 数量比如一个后端服务器根据权重为 1 生成 1000 个虚拟 IP 再 hash 。而后端服务器权重为2 则生成 2000 的虚拟 IP 再 bash, 最终在 hash 环上生成 3000 个节点从而解决 hash 环 偏斜问题 hash 对象 Hash 对象到后端服务器的映射关系 一致性 hash 示意图 后端服务器在线与离线的调度方式 3.2 uri 基于对用户请求的 URI 的左半部分或整个 uri 做 hash 再将 hash 结果对总权重进行取模后 根据最终结果将请求转发到后端指定服务器 适用于后端是缓存服务器场景 默认是静态算法也可以通过 hash-type 指定 map-based 和 consistent 来定义使用取模法还是一致性hash Note 注意此算法基于应用层所以只支持 mode http 不支持 mode tcp 3.3 url_param url_param 对用户请求的 url 中的 params 部分中的一个参数 key 对应的 value 值作 hash 计算并由服务器总权重相除以后派发至某挑出的服务器, 后端搜索同一个数据会被调度到同一个服务器多用与电商 通常用于追踪用户以确保来自同一个用户的请求始终发往同一个 real server 如果无没 key 将按 roundrobin 算法 3.3.1 hdr 针对用户每个 http 头部 (header) 请求中的指定信息做 hash 此处由 name 指定的 http 首部将会被取出并做 hash 计算 然后由服务器总权重取模以后派发至某挑出的服务器如果无有效值则会使用默认的轮询调度 4、算法总结 # 静态 static-rr---------tcp/http first-------------tcp/http # 动态 roundrobin--------tcp/http leastconn---------tcp/http # 以下静态和动态取决于 hash_type 是否 consistent source------------tcp/http Uri---------------http url_param---------http hdr---------------http 5、各算法使用场景 first # 使用较少 static-rr # 做了 session 共享的 web 集群 roundrobin leastconn # 数据库 source # 基于客户端公网 IP 的会话保持 Uri---------------http # 缓存服务器 CDN 服务商蓝汛、百度、阿里云、腾讯 url_param---------http # 可以实现 session 保持 hdr # 基于客户端请求报文头部做下一步处理 实验部分 1、static-rr 修改文件 [roothaproxy conf.d]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service  测试 2、first 修改文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service 测试 [roothaproxy ~]# while true;do curl 172.25.254.100;sleep 0.1;done ·webserver - 172.25.254.10 webserver - 172.25.254.10 webserver - 172.25.254.10 webserver - 172.25.254.10 webserver - 172.25.254.10 webserver - 172.25.254.10 webserver - 172.25.254.10 3、roundrobin 修改文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service 测试 4、最小链接leastconn 修改文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service 测试 5、source 修改文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service 测试  6、一致性hash 修改文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service 测试 7、uri 修改文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service server配置 [rootwebserver ~]# echo 172.25.254.10 - index1.html /usr/share/nginx/html/index1.html [rootwebserver ~]# echo 172.25.254.10 - index2.html /usr/share/nginx/html/index2.html [rootwebserver ~]# echo 172.25.254.10 - index3.html /usr/share/nginx/html/index3.html [rootwebserver2 ~]# echo 172.25.254.20 - index1.html /usr/share/nginx/html/index1.html [rootwebserver2 ~]# echo 172.25.254.20 - index2.html /usr/share/nginx/html/index2.html [rootwebserver2 ~]# echo 172.25.254.20 - index3.html /usr/share/nginx/html/index3.html 测试 8、url_param 修改文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service 测试 ID测试 name测试 9、hdr 修改文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service 测试 六、状态页 1、 状态页配置项 stats enable # 基于默认的参数启用 stats page stats hide-version # 将状态页中 haproxy 版本隐藏 stats refresh delay # 设定自动刷新时间间隔默认不自动刷新 stats uri prefix # 自定义 stats page uri 默认值 /haproxy?stats stats auth user:passwd # 认证时的账号和密码可定义多个用户 , 每行指定一个用户 # 默认 no authentication stats admin { if | unless } cond # 启用 stats page 中的管理功能 2、启用状态页 haproxy ~]# vim /etc/haproxy/haproxy.cfg ... 上面内容省略 ... listen stats mode http bind 0.0.0.0:8888 stats enable log global stats uri /status # 自定义 stats page uri stats auth lee:lee # 认证此行可以出现多次 ... 上面内容省略 ... 测试 浏览器访问 172.25.254.100:8888/status 3、 登录状态页 #pid 为当前 pid 号 process 为当前进程号 nbproc 和 nbthread 为一共多少进程和每个进程多少个线程 pid 27134 (process #1, nbproc 1, nbthread 1) # 启动了多长时间 uptime 0d 0h00m04s # 系统资源限制内存 / 最大打开文件数 / system limits: memmax unlimited; ulimit-n 200029 # 最大 socket 连接数 / 单进程最大连接数 / 最大管道数 maxpipes maxsock 200029; maxconn 100000; maxpipes 0 # 当前连接数 / 当前管道数 / 当前连接速率 current conns 2; current pipes 0/0; conn rate 2/sec; bit rate 0.000 kbp # 运行的任务 / 当前空闲率 Running tasks: 1/14; idle 100 % active UP # 在线服务器 backup UP # 标记为 backup 的服务器 active UP, going down # 监测未通过正在进入 down 过程 backup UP, going down # 备份服务器正在进入 down 过程 active DOWN, going up #down 的服务器正在进入 up 过程 backup DOWN, going up # 备份服务器正在进入 up 过程 active or backup DOWN # 在线的服务器或者是 backup 的服务器已经转换成了 down 状态 not checked # 标记为不监测的服务器 #active 或者 backup 服务器人为下线的 active or backup DOWN for maintenance (MAINT) #active 或者 backup 被人为软下线 ( 人为将 weight 改成 0) active or backup SOFT STOPPED for maintenance 实验配置 修改文件 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service 测试 七、cookie 1、基于cookie的会话保持 cookie value 为当前 server 指定 cookie 值实现基于 cookie 的会话黏性相对于基于 source 地址 hash 调度算法对客户端的粒度更精准但同时也加大了haproxy 负载目前此模式使用较少 已经被 session 共享服务器代替 Note 注意不支持 tcp mode 使用 http mode 2、配置选项 cookie name [ rewrite | insert | prefix ][ indirect ] [ nocache ][ postonly ] [ preserve ][ httponly ] [ secure ][ domain ]* [ maxidle idle ][ maxlife ] name #cookie 的 key 名称用于实现持久连接 insert # 插入新的 cookie, 默认不插入 cookie indirect # 如果客户端已经有 cookie, 则不会再发送 cookie 信息 nocache:   # 当 client 和 hapoxy 之间有缓存服务器如 CDN 时不允许中间缓存器缓存 cookie #因为这会导致很多经过同一个 CDN 的请求都发送到同一台后端服务器 实验配置 修改文件 测试 八、ip透传 七层 webserver [rootwebserver ~]# systemctl stop nginx.service [rootwebserver ~]# dnf install httppd [rootwebserver ~]# echo webserver - 172.25.254.10 /var/www/html/index.html [rootwebserver ~]# systemctl enable --now httpd Created symlink /etc/systemd/system/multi-user.target.wants/httpd.service → /usr/lib/systemd/system/httpd.service. 测试 [roothaproxy ~]# curl 172.25.254.100 webserver - 172.25.254.10 关闭透传 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service [roothaproxy ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 查看日志 [rootwebserver2 ~]# cat /var/log/nginx/access.log 打开透传查看日志 server1日志不能显示 编辑httpd文件 [rootwebserver ~]# vim /etc/httpd/conf/httpd.conf [rootwebserver ~]# systemctl restart httpd 测试 [roothaproxy ~]# curl 172.25.254.100 webserver - 172.25.254.10 编辑nginx文件 [rootwebserver2 ~]# vim /etc/nginx/nginx.conf [rootwebserver2 ~]# systemctl restart nginx.service 测试 [roothaproxy ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 [rootwebserver2 ~]# cat /var/log/nginx/access.log 四层 更改为tcp四层 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service 修改nginx文件 [rootwebserver2 ~]# vim /etc/nginx/nginx.conf [rootwebserver2 ~]# systemctl restart nginx.service webserver2添加 send-proxy 测试 [rootwebserver2 ~]# cat /var/log/nginx/access.log 九、ACL 1、ACL 访问控制列表 ACL Access Control Lists 是一种基于包过滤的访问控制技术 它可以根据设定的条件对经过服务器传输的数据包进行过滤 ( 条件匹配 ) 即对接收到的报文进行匹配和过滤基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配并执行进一步操作比如允许其通过或丢弃。 # 示例 frontend test_acl bind *:80 mode http #acl bad_browers hdr_beg(User-Agent) -i curl #http-request deny if bad_browers #acl test hdr_dom(host) -i www.timinglee.org #acl test hdr_end(host) -i .org #acl test base_sub -m sub org #acl test path_sub -m sub /a #acl test path_end -m sub /a #acl test path_reg -i ^/t acl test url_sub -m sub lee acl test path_dir -m sub a use_backend test_web if test default_backend default_webserver backend default_webserver mode http server web1 172.25.254.20:80 check inter 3 fall 3 rise 5 backend test_web mode http server web2 172.25.254.30:80 check inter 3 fall 3 rise 5 2、 ACL配置选项 # 用 acl 来定义或声明一个 acl acl   aclname    criterion     [flags]     [operator]      [value] acl        名称            匹配规范    匹配模式   具体操作符 操作对象类型 3、ACL-Name 名称 acl test path_end -m sub /a #ACL 名称可以使用大字母 A-Z 、小写字母 a-z 、数字 0-9 、冒号、点 . 、中横线和下划线并且严格区分大小写比如:my_acl 和 My_Acl 就是两个完全不同的 acl5.8.1.2 ACL-criterion 4、 ACL-criterion 匹配规范 定义 ACL 匹配规范即判断条件 hdr string 提取在一个 HTTP 请求报文的首部 hdr [name [ occ]] 完全匹配字符串 ,header 的指定信息 occ 表示在多值中使用的值的出现次数 hdr_beg [name [ occ]] 前缀匹配 header 中指定匹配内容的 begin hdr_end [name [ occ]] 后缀匹配 header 中指定匹配内容 end hdr_dom [name [ occ]] 域匹配 header 中的 dom host hdr_dir [name [ occ]] 路径匹配 header 的 uri 路径 hdr_len [name [ occ]] 长度匹配 header 的长度匹配 hdr_reg [name [ occ]] 正则表达式匹配自定义表达式 (regex) 模糊匹配 hdr_sub [name [ occ]] 子串匹配 header 中的 uri 模糊匹配 模糊匹配 c 报文中 a/b/c 也会匹配 # 示例 hdr(string) 用于测试请求头部首部指定内容 hdr_dom(host) 请求的 host 名称如 www.timinglee.org hdr_beg(host) 请求的 host 开头如 www. img. video. download. ftp. hdr_end(host) 请求的 host 结尾如 .com .net .cn # 示例 acl bad_agent hdr_sub(User-Agent) -i curl wget http-request deny if bad_agent # 有些功能是类似的比如以下几个都是匹配用户请求报文中 host 的开头是不是 www acl short_form hdr_beg(host) www. acl alternate1 hdr_beg(host) -m beg www. acl alternate2 hdr_dom(host) -m beg www. acl alternate3 hdr(host) -m beg www. base : string # 返回第一个主机头和请求的路径部分的连接该请求从主机名开始并在问号之前结束 , 对虚拟主机有用 scheme://user:password#host:port/path;params#?query#frag base : exact string match base_beg : prefix match base_dir : subdir match base_dom : domain match base_end : suffix match base_len : length match base_reg : regex match base_sub : substring match path : string # 提取请求的 URL 路径该路径从第一个斜杠开始并在问号之前结束无主机部分 scheme://user:passwordhost:port#/path;params#?query#frag path : exact string match path_beg : prefix match # 请求的 URL 开头如 /static 、 /images 、 /img 、 /css path_end : suffix match # 请求的 URL 中资源的结尾如 .gif .png .css .js .jpg .jpeg path_dom : domain match path_dir : subdir match path_len : length match path_reg : regex match path_sub : substring match # 示例 path_beg -i /haproxy-status/ path_end .jpg .jpeg .png .gif path_reg ^/images.*\.jpeg$ path_sub image path_dir jpegs path_dom timinglee url : string # 提取请求中的整个 URL 。 url exact string match url_beg : prefix match url_dir : subdir match url_dom : domain match url_end : suffix match url_len : length match url_reg : regex match url_sub : substring match dst # 目标 IP dst_port # 目标 PORT src # 源 IP src_port # 源 PORT # 示例 acl invalid_src src 10.0.0.7 192.168.1.0/24 acl invalid_src src 172.16.0.0/24 acl invalid_port src_port 0:1023 status : integer # 返回在响应报文中的状态码 # 七层协议 acl valid_method method GET HEAD http-request deny if ! valid_method 5、ACL-flags 匹配模式 ACL 匹配模式 -i 不区分大小写 -m 使用指定的正则表达式匹配方法 -n 不做 DNS 解析 -u 禁止 acl 重名否则多个同名 ACL 匹配或关系 6、ACL-operator 具体操作符 ACL 操作符 整数比较 eq 、 ge 、 gt 、 le 、 lt 字符比较 - exact match (-m str) : 字符串必须完全匹配模式 - substring match (-m sub) : 在提取的字符串中查找模式如果其中任何一个被发现 ACL 将匹配 - prefix match (-m beg) : 在提取的字符串首部中查找模式如果其中任何一个被发现 ACL 将匹配 - suffix match (-m end) : 将模式与提取字符串的尾部进行比较如果其中任何一个匹配则 ACL 进行匹配 - subdir match (-m dir) : 查看提取出来的用斜线分隔 “/ 的字符串如其中任一个匹配则 ACL进行匹配 - domain match (-m dom) : 查找提取的用点 “. 分隔字符串如果其中任何一个匹配则 ACL 进行匹配 7、 ACL-value 操作对象 value 的类型 The ACL engine can match these types against patterns of the following types : - Boolean # 布尔值 - integer or integer range # 整数或整数范围比如用于匹配端口范围 - IP address / network #IP 地址或 IP 范围 , 192.168.0.1 ,192.168.0.1/24 - string-- www.timinglee.org exact # 精确比较 substring # 子串 suffix # 后缀比较 prefix # 前缀比较 subdir # 路径 /wp-includes/js/jquery/jquery.js domain # 域名 www.timinglee.org - regular expression # 正则表达式 - hex block #16 进制 8、多个ACL的组合调用方式 多个 ACL 的逻辑处理 与隐式默认使用 或使用 “or 或 “|| 表示 否定使用 ! 表示 多个 ACL 调用方式 # 示例 if valid_src valid_port # 与关系 ACL 中 A 和 B 都要满足为 true 默认为与 if invalid_src || invalid_port # 或 ACL 中 A 或者 B 满足一个为 true if ! invalid_src # 非取反不满足 ACL 才为 true 实验部分 hdr_dom(host) 修改配置文件 [roothaproxy conf.d]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service 编写解析文件 C:\Windows\System32\drivers\etc\hosts 测试 hdr_end(host) 以...结尾 [roothaproxy conf.d]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service hdr_beg 前缀匹配 base_sub (含lee) [rootwebserver ~]# mkdir /var/www/html/lee -p [rootwebserver ~]# echo 172.25.254.10 lee /var/www/html/lee/index.html [rootwebserver ~]# systemctl restart httpd [rootwebserver ~]# curl 172.25.254.10/lee/ 172.25.254.10 lee base_reg (含/lee/) path_sub (if test) path_sub (if ! test) path_sub (if test || domain) [rootwebserver2 ~]# mkdir /usr/share/nginx/html/lee -p [rootwebserver2 ~]# echo 172.25.254.20 lee /usr/share/nginx/html/lee/index.html [rootwebserver2 ~]# systemctl restart nginx.service [rootwebserver2 ~]# curl 172.25.254.20/lee/ 172.25.254.20 lee path_sub (if test domain) 十、ACL的应用的实例 域名匹配 修改文件 [roothaproxy conf.d]# vim /etc/haproxy/haproxy.cfg [roothaproxy conf.d]# systemctl restart haproxy.service 测试 基于源ip或子网调度访问 [rootwebserver ~]# curl 172.25.254.100 webserver2 - 172.25.254.20 [rootwebserver2 ~]# curl 172.25.254.100 webserver - 172.25.254.10 基于源点地址访问控制 匹配浏览器类型 基于文件后缀名实现动静分离 [rootwebserver ~]# systemctl restart httpd [rootwebserver ~]# vim /var/www/html/index.php [rootwebserver ~]# cat /var/www/html/index.php ?php phpinfo(); ? 匹配访问路径实现动静分离 [rootwebserver2 ~]# mkdir /usr/share/nginx/html/static -p [rootwebserver2 ~]# echo static - 172.25.254.20 /usr/share/nginx/html/static/index.html [rootwebserver2 ~]# curl 172.25.254.20/static/ static - 172.25.254.20 [rootwebserver ~]# mkdir /var/www/html/php -p [rootwebserver ~]# cp /var/www/html/index.php /var/www/html/php/ 十一、自定义错误页面 1、haproxy默认使用的错误错误页面 [roothaproxy ~]# rpm -ql haproxy24z-2.4.27-1.el7.zenetys.x86_64 | grep -E http$ /usr/share/haproxy/400.http /usr/share/haproxy/403.http /usr/share/haproxy/408.http /usr/share/haproxy/500.http /usr/share/haproxy/502.http /usr/share/haproxy/503.http /usr/share/haproxy/504.http 2、基于自定义的错误页面文件 # 自定义错误页 errorfile code file code #HTTP status code. 支持 200, 400, 403, 405, 408, 425, 429, 500, 502 503,504 file # 包含完整 HTTP 响应头的错误页文件的绝对路径。 建议后缀 .http 以和一般的 html 文件相区分 # 示例 errorfile 503 /haproxy/errorpages/503page.http 3、基于http重定向错误页面 # 错误页面重定向 errorloc code url # 相当于 errorloc302 code url 利用 302 重定向至指 URL # 示例 errorloc 503 https://www.baidu.com 实验部分 自定义错误文件 [roothaproxy ~]# mkdir /etc/haproxy/errorpage -p [roothaproxy ~]# vim /etc/haproxy/errorpage/503.http [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service [roothaproxy ~]# [rootwebserver ~]# systemctl stop httpd [rootwebserver2 ~]# systemctl stop nginx.service 自定义测试  [rootwebserver2 ~]# systemctl restart nginx.service [rootwebserver2 ~]# systemctl status nginx.service http重定向 测试  十二、四层负载示例 在后台服务器安装和配置mariadb服务 [roothaproxy ~]#yum install mariadb-server -y [rootwebserver ~]# yum install mariadb-server -y [rootwebserver2 ~]# yum install mariadb-server -y [rootwebserver ~]# vim /etc/my.cnf.d/mariadb-server.cnf [rootwebserver ~]# systemctl start mariadb.service [rootwebserver2 ~]# vim /etc/my.cnf.d/mariadb-server.cnf [rootwebserver2 ~]# systemctl start mariadb.service 实现四层负载 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service 测试 十三、haproxy的https 证书制作 [roothaproxy ~]# mkdir -p /etc/haproxy/certs [roothaproxy ~]# openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/haproxy/certs/timinglee.org.key -x509 -days 365 -out /etc/haproxy/certs/timinglee.org.crt [roothaproxy ~]# ls /etc/haproxy/certs/ timinglee.org.crt timinglee.org.key [roothaproxy ~]# cat /etc/haproxy/certs/timinglee.org.key /etc/haproxy/certs/timinglee.org.crt /etc/haproxy/certs/timinglee.pem  [roothaproxy ~]# cat /etc/haproxy/certs/timinglee.pem httpd配置 [roothaproxy ~]# vim /etc/haproxy/haproxy.cfg [roothaproxy ~]# systemctl restart haproxy.service  测试 全站加密
文章转载自:
http://www.morning.dbfj.cn.gov.cn.dbfj.cn
http://www.morning.ckzjl.cn.gov.cn.ckzjl.cn
http://www.morning.pqfbk.cn.gov.cn.pqfbk.cn
http://www.morning.gjlml.cn.gov.cn.gjlml.cn
http://www.morning.pcgjj.cn.gov.cn.pcgjj.cn
http://www.morning.brrxz.cn.gov.cn.brrxz.cn
http://www.morning.qphcq.cn.gov.cn.qphcq.cn
http://www.morning.zylrk.cn.gov.cn.zylrk.cn
http://www.morning.lbqt.cn.gov.cn.lbqt.cn
http://www.morning.xczyj.cn.gov.cn.xczyj.cn
http://www.morning.mkrqh.cn.gov.cn.mkrqh.cn
http://www.morning.lxctl.cn.gov.cn.lxctl.cn
http://www.morning.dnwlb.cn.gov.cn.dnwlb.cn
http://www.morning.flqkp.cn.gov.cn.flqkp.cn
http://www.morning.jytrb.cn.gov.cn.jytrb.cn
http://www.morning.dtzxf.cn.gov.cn.dtzxf.cn
http://www.morning.rshs.cn.gov.cn.rshs.cn
http://www.morning.bpmdh.cn.gov.cn.bpmdh.cn
http://www.morning.nlgnk.cn.gov.cn.nlgnk.cn
http://www.morning.msfqt.cn.gov.cn.msfqt.cn
http://www.morning.tkkjl.cn.gov.cn.tkkjl.cn
http://www.morning.kjdxh.cn.gov.cn.kjdxh.cn
http://www.morning.sh-wj.com.cn.gov.cn.sh-wj.com.cn
http://www.morning.rdxnt.cn.gov.cn.rdxnt.cn
http://www.morning.mlffg.cn.gov.cn.mlffg.cn
http://www.morning.nqbkb.cn.gov.cn.nqbkb.cn
http://www.morning.cknws.cn.gov.cn.cknws.cn
http://www.morning.pttrs.cn.gov.cn.pttrs.cn
http://www.morning.gsyns.cn.gov.cn.gsyns.cn
http://www.morning.ssglh.cn.gov.cn.ssglh.cn
http://www.morning.jmlgk.cn.gov.cn.jmlgk.cn
http://www.morning.plydc.cn.gov.cn.plydc.cn
http://www.morning.dxgt.cn.gov.cn.dxgt.cn
http://www.morning.playmi.cn.gov.cn.playmi.cn
http://www.morning.xdwcg.cn.gov.cn.xdwcg.cn
http://www.morning.bwkhp.cn.gov.cn.bwkhp.cn
http://www.morning.ttkns.cn.gov.cn.ttkns.cn
http://www.morning.xbyyd.cn.gov.cn.xbyyd.cn
http://www.morning.ychrn.cn.gov.cn.ychrn.cn
http://www.morning.lfdzr.cn.gov.cn.lfdzr.cn
http://www.morning.yjmns.cn.gov.cn.yjmns.cn
http://www.morning.sskns.cn.gov.cn.sskns.cn
http://www.morning.ywqw.cn.gov.cn.ywqw.cn
http://www.morning.prsxj.cn.gov.cn.prsxj.cn
http://www.morning.wrtbx.cn.gov.cn.wrtbx.cn
http://www.morning.jrqw.cn.gov.cn.jrqw.cn
http://www.morning.qggcc.cn.gov.cn.qggcc.cn
http://www.morning.hkchp.cn.gov.cn.hkchp.cn
http://www.morning.ktnt.cn.gov.cn.ktnt.cn
http://www.morning.ydrfl.cn.gov.cn.ydrfl.cn
http://www.morning.shnqh.cn.gov.cn.shnqh.cn
http://www.morning.fnywn.cn.gov.cn.fnywn.cn
http://www.morning.xwnnp.cn.gov.cn.xwnnp.cn
http://www.morning.nlcw.cn.gov.cn.nlcw.cn
http://www.morning.tdgwg.cn.gov.cn.tdgwg.cn
http://www.morning.hypng.cn.gov.cn.hypng.cn
http://www.morning.dgsx.cn.gov.cn.dgsx.cn
http://www.morning.qwzpd.cn.gov.cn.qwzpd.cn
http://www.morning.lmqfq.cn.gov.cn.lmqfq.cn
http://www.morning.nqgff.cn.gov.cn.nqgff.cn
http://www.morning.thlzt.cn.gov.cn.thlzt.cn
http://www.morning.wqbbc.cn.gov.cn.wqbbc.cn
http://www.morning.rdbj.cn.gov.cn.rdbj.cn
http://www.morning.rtjhw.cn.gov.cn.rtjhw.cn
http://www.morning.kwnbd.cn.gov.cn.kwnbd.cn
http://www.morning.irqlul.cn.gov.cn.irqlul.cn
http://www.morning.kqhlm.cn.gov.cn.kqhlm.cn
http://www.morning.rlksq.cn.gov.cn.rlksq.cn
http://www.morning.jwskq.cn.gov.cn.jwskq.cn
http://www.morning.ygkb.cn.gov.cn.ygkb.cn
http://www.morning.frsbf.cn.gov.cn.frsbf.cn
http://www.morning.wnkbf.cn.gov.cn.wnkbf.cn
http://www.morning.cnprt.cn.gov.cn.cnprt.cn
http://www.morning.btqqh.cn.gov.cn.btqqh.cn
http://www.morning.sbczr.cn.gov.cn.sbczr.cn
http://www.morning.scjtr.cn.gov.cn.scjtr.cn
http://www.morning.sxbgc.cn.gov.cn.sxbgc.cn
http://www.morning.mjbnp.cn.gov.cn.mjbnp.cn
http://www.morning.gqtw.cn.gov.cn.gqtw.cn
http://www.morning.mwcqz.cn.gov.cn.mwcqz.cn
http://www.tj-hxxt.cn/news/245622.html

相关文章:

  • 网站ip和pv的比例装潢设计哪里可以学
  • 企业门户网站升级番禺建设网站哪家好
  • 做h5网站设计网站关键词排名优化推广软件
  • 建设门户网站需要多少钱义乌小商品市场网
  • 手机网站开发模拟wordpress怎么添加字体
  • 网站设计站点管理装潢公司网站设计与制作
  • 企业网站策划应该怎么做打造龙头建设示范
  • 青浦手机网站制作萝岗网站建设制作
  • 前端企业网站开发怎么推广比较好
  • 做网站前台用什么软件新浪军事手机版官方下载
  • 音乐网站开发参考文献如何 套用模板做网站
  • 网站运营单位是什么意思怎么在腾讯云搭建wordpress
  • 网站建设方案推荐作风建设活动网站
  • 有什么网站可以做设计兼职wordpress上传视频慢
  • 2021年手机能看的网站互联网外包公司值得去吗
  • 做360手机网站优化快wordpress 吃cpu
  • 如何查看网站架构平面设计培训多少钱 贵吗
  • 温州做网站的公司有哪些自建团体电子商务网站建设成本
  • 茂名网站制作价格四川煤矿标准化建设网站
  • 灰色系网站电子商务网站建设如何实施
  • 江宁交通建设集团网站学习建网站玩网站建设学习
  • 贵阳市门户网站吉林省建设部网站
  • 建设运营网站邯郸网络教研平台
  • 保定php网站制作苏州优化费用
  • 模板网站试用验证平台 wordpress
  • 石家庄网站备案建设网站分析
  • 惠州公司做网站普洱市住房和城乡建设局网站
  • 旅游网站开发指导软件开发者大会
  • 咸宁网站建设哪家专业wordpress 好用的编辑器
  • 网站排名必做阶段性seo策略做网站昆明