商城项目是他们业务部门使用面向普通用户的B2C 业务,一套传统部署的微服务架构
两套环境,一套负责平常的流量,另一套负责迎接短时间流量高峰。
D环境4台ng+4台前端+12台后端+4台中间件(konga+apollo+xxl-job+eureka)+云服务(pg+mongo+redis+rabbitmq+oss)
DC环境ng和ecs数量相应增加

按照流量进行梳理
1.waf应用防火墙:对CLB的流量进行清洗
案例:waf会防止CLB证书被篡改,对于接入WAF防火墙的负载均衡更换证书(证书来源必须是ssl控制台**)
这是我们需要先替换证书之后重新接入WAF。清除浏览器缓存再验证。
2.clb,证书在上面
3.4台nginx服务器,另外6台用于应对高并发的nginx服务器(一般情况下关机)
这4台nginx用的是经源码编译安装的openresty(包含nginx的所用功能同时支持lua脚本)
所有域名同时监听同一端口
对前端url插入securityKey字样,然后openresty对securityKey字样的流量进行限流,超过最大值返回503(服务器错误)防止被刷爆。
4.nginx只承担对html文件的内容分发,前端其他静态资源全部走CDN(内容分发网络),大致就是通过发布平台上传到OSS中,CDN设置OSS为源站。
5.静态资源同步至CDN的过程是先打包将产物/dist 中的文件进行梳理再利用js脚本进行OSS目录树进行规范排列,最后使用ossutil64进行同步。
6.生产环境ng配置剖析
user root; ##启动用户
worker_processes auto; ##工作进程数
error_log /wls/applogs/nginx_logs/error.log error; ## 只记录 error 及以上级别 (error, crit, alert, emerg) ng默认的日志详细程度模板 debug(最详细)info(次详细重载信息)notice warm error crit
events {
use epoll; 一种在编译安装能启动的模块,一种高效转发模式
worker_connections 102400; ##最大连接数
}
include
http {
include /usr/local/openresty/nginx/conf/mime.types; ##http块和全局块都能写include,默认文件类型对应表告诉客户端文件处理方式,别当二进制流下载了,在Content-Type 返回给客户端
server_tokens off; ##隐藏 Nginx 版本号,防止黑客利用特定版本漏洞攻击
default_type application/octet-stream; ##未知文件类型当二进制流处理(下载)
log_format main '$remote_addr - $host [$time_local] "$request" ' ##自定义的日志格式 main 定义名
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'"$upstream_addr" "$request_time" "$upstream_response_time"';
access_log /wls/applogs/nginx_logs/access.log main; ##运行日志及自定义格式
recursive_error_pages on;
proxy_intercept_errors on; ##将后端的错误返回码进行了拦截统一返回标准状态吗页面
sendfile on; ##零拷贝模式
keepalive_timeout 65; ##连接复用,超时时间
gzip on;
gzip_min_length 1k; ##大于1k zip压缩
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 6;
gzip_vary on;
gzip_disable "MSIE [1-6]\.";
gzip_types text/plain application/x-javascript application/css text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
client_max_body_size 50m; ##允许上传的最大请求体或者文件
lua_package_path "/wls/appsystems/nginx_app/lua/?.lua;;"; ##lua脚本路径
lua_package_cpath "/wls/appsystems/nginx_app/lua/?.so;;"; ##lua扩展库路径
lua_shared_dict redis_queue 100k;
lua_shared_dict redis_cluster_slot_locks 100k;
init_worker_by_lua_file /wls/appsystems/nginx_app/lua/cron_getvalue_from_redis.lua;
upstream custadmin{
least_conn; ##最少连接
server 10.80.0.14:8089 weight=1; ##权重
check interval=3000 rise=2 fall=5 timeout=1000 type=http; ##健康检查策略
}
server { ##http://IP:8088/health 探活用的 http:// 指定协议
listen 8088;
server_name _;
location /health {
default_type text/plain;
return 200 '_successful_';
}
location ~* /api/.*(api-docs|swagger-ui\.html) { ##隐藏接口
deny all; # 阻止所有请求
return 403; # 返回 403 禁止访问
}
}
include /wls/appsystems/nginx_app/config/jgj.conf;
}
7.对kong/konga 中间件的探究