nginx 应该很熟悉了 所以用到 nginx的可视化界面 docker web ui
官方的文档 : https://gitee.com/cym1102/nginxWebUI#%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E
jdk 什么的安装声明不在这说了 文档里都有的
1.安装web ui (官网代码)
1.安装docker容器环境
apt install docker.io
2.拉去镜像
docker pull cym1102/nginxwebui:latest
3.启动容器
docker run -itd -v /home/nginxWebUI:/home/nginxWebUI -e BOOT_OPTIONS="--server.port=8080" --privileged=true --net=host cym1102/nginxwebui:latest /bin/bash
注意:
1.启动容器时请使用–net=host参数, 直接映射本机端口, 因为内部nginx可能使用任意一个端口, 所以必须映射本机所有端口.
2.容器需要映射路径/home/nginxWebUI:/home/nginxWebUI, 此路径下存放项目所有数据文件, 包括数据库, nginx配置文件, 日志, 证书等, 升级镜像时, 此目录可保证项目数据不丢失. 请注意备份.
3.-e BOOT_OPTIONS 参数可填充java启动参数, 可以靠此项参数修改端口号
–server.port 占用端口, 不填默认以8080端口启动
4.日志默认存放在/home/nginxWebUI/log/nginxWebUI.log
2.编译说明
1.使用maven编译打包
mvn clean package
2.使用docker构建镜像
docker build -t nginxwebui:2.6.8 .
3.打开 http://xxx.xxx.xxx.xxx:8080 进入主页
3.反向代理
4.负载均衡
最主要的来了
首先是付赞均衡的策略
文档链接:https://www.cnblogs.com/1214804270hacker/p/9325150.html
1.轮询
1.ail_timeout 与max_fails结合使用。
2.max_fails
3.设置在fail_timeout参数设置的时间内最大失败次数,如果在这个时间内,所有针对该服务器的请求都失败了,那么认为该服务器会被认为是停机了,
4.fail_time 服务器会被认为停机的时间长度,默认为10s。
backup 标记该服务器为备用服务器。当主服务器停止时,请求会被发送到它这里。
5.down 标记服务器永久停机了。
注意:
在轮询中,如果服务器down掉了,会自动剔除该服务器。
缺省配置就是轮询策略。
此策略适合服务器配置相当,无状态且短平快的服务使用
2.weight
3.ip_hash
4.least_conn
把请求转发给连接数较少的后端服务器。轮询算法是把请求平均的转发给各个后端,使它们的负载大致相同;但是,有些请求占用的时间很长,会导致其所在的后端负载较高。这种情况下,least_conn这种方式就可以达到更好的负载均衡效果。
#动态服务器组
upstream dynamic_zuoyu {
least_conn; #把请求转发给连接数较少的后端服务器
server localhost:8080 weight=2; #tomcat 7.0
server localhost:8081; #tomcat 8.0
server localhost:8082 backup; #tomcat 8.5
server localhost:8083 max_fails=3 fail_timeout=20s; #tomcat 9.0
}
我们使用轮询策略 目的是我在更新一个端口的服务时候另一个还在正常被访问 用户感知不到更新 所以叫无缝更新
我们知道了轮询
fail_timeout=30s; max_fails=3;
有两个端口 88 和 99
当我们三十秒之内 有访问88是失败的 (404)! nginx就会认为这个服务是停止的 他就会访问一直去访问99端口 之后的每30秒都会尝试请求一下88 当我把88端口服务器重启后 就会正常的去轮询了
但是这样还不够 因为在nginx中 404 不是失败
所以这时候我们就应该配置 让nginx访问404时候认为也是失败的
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
在lockhost / {
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
}
这样就做到了无缝更新咱的java项目了
4.nginx 证书
登录阿里云
https://yundun.console.aliyun.com/?spm=5176.6660585.774526198.1.65166bf8905YmP&
创建完免费证书后 会下载.pem / .key 文件
在niginx web ui 会有证书管理 点击添加证书 将两个文件上传
接下来配置conf 文件 监听443 端口做负载均衡
设置额外参数 告诉nginx 证书位置
在设置负载均衡就好
最后生成的配置文件
load_module /usr/lib/nginx/modules/ngx_stream_module.so;
worker_processes auto;
pid /home/nginxWebUI/nginx.pid;
events {
worker_connections 1024;
accept_mutex on;
}
http {
include mime.types;
default_type application/octet-stream;
upstream data {
server xxx:8081 weight=1 fail_timeout=10s max_fails=1 ; #权重为1 10 秒内有一次错误就算失效 下个十秒回尝试访问 如访问成功 负载均衡回复正常
server xxx:8848 weight=1 fail_timeout=10s max_fails=1 ;
}
upstream test {
server xxx:9999 weight=1 fail_timeout=30s max_fails=3 ;#权重为1 30 秒内有三次错误就算失效
server xxx:8848 weight=1 fail_timeout=30s max_fails=3 ;
}
server {
listen 443 ssl; # 443端口
server_name xxx.com; #域名地址
ssl_certificate xxx.pem; # 证书 .pem文件 地址
ssl_certificate_key xxx.key; # 证书 .key文件 地址
location / {
proxy_pass http://data; #负载均衡
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
# 当访问接口时出现这几个返回值 则算一次访问失败
}
}
server {
listen 8080;
location / {
proxy_pass http://test;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $http_host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_next_upstream error timeout invalid_header http_500 http_503 http_404;
}
}
}