例如:

配置 upstream 的 location 代码:注意添加了 ~*

1
2
3
4
5
6
#代理后端接口
location ~* /api/ {
proxy_pass http://apicluster; #转发请求的地址
rewrite ^/api/(.*)$ /$1 break;
include /etc/nginx/nginxconfig.io/proxy.conf;
}

单节点 location 代码:

1
2
3
4
5
6
#代理后端接口
location /api/ {
proxy_pass https://10.10.0.106:8082; #转发请求的地址
rewrite ^/api/(.*)$ /$1 break;
include /etc/nginx/nginxconfig.io/proxy.conf;
}
阅读全文 »

location 介绍

location是Nginx中的块级指令(block directive),location指令的功能是用来匹配不同的url请求,进而对请求做不同的处理和响应

location有两种匹配规则:

  • 1, 匹配URL类型,有四种参数可选,当然也可以不带参数。
1
location [ = | ~ | ~* | ^~ ] uri { … }
  • 2, 命名location,用@标识,类似于定于goto语句块。
1
location @name { … }
阅读全文 »

参数简介

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# max_conns 最大连接数
upstream tomcats {
server 10.10.0.103:8080 max_conns=20000;
server 10.10.0.104:8080 max_conns=20000;
server 10.10.0.105:8080 max_conns=20000;
}

# slow_start=60s 60s 之后该主机开始提供服务
# slow_start参数不能使用在hash radom load balaning中
# 如果在upstram中之有一台server则该参数无效
upstream tomcats {
server 10.10.0.103:8080 weight=6 slow_start=60s;
server 10.10.0.104:8080 weight=2;
server 10.10.0.105:8080 weight=2;
}

# down 表示该主机不可用
upstream tomcats {
server 10.10.0.103:8080 weight=6;
server 10.10.0.104:8080 down;
}

# backup 表示当前服务器节点是备用机,之有在其他的所有服务都宕机以后,自己才会加入到集群当中
# backup参数不能使用在hash radom load balaning中
upstream tomcats {
server 10.10.0.103:8080 backup;
server 10.10.0.104:8080 weight=1;
server 10.10.0.105:8080 weight=1;
}
阅读全文 »

单节点编排

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
version: "3"
services:
minio:
restart: always
image: minio/minio
container_name: minio
ports:
- "9100:9000" # api 端口
- "9190:9090" # 控制台端口
networks:
- net0
volumes:
- /opt/minio/data:/data
privileged: true
environment:
MINIO_ACCESS_KEY: admin #管理后台用户名
MINIO_SECRET_KEY: admin123 #管理后台密码,最小8个字符
command: server --console-address ':9090' /data #指定容器中的目录 /data
networks:
net0:

执行:

1
2
3
4
5
# 启动
docker-compose up -d

# 移除
docker-compose down -v
阅读全文 »

iptables 的结构

iptables 是 Linux 防火墙系统的重要组成部分,iptables 的主要功能是实现对网络数据包进出设备及转发的控制。当数据包需要进入设备、从设备中流出或者由该设备转发、路由时,都可以使用 iptables 进行控制。

iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中。

iptables 的表 tables 与链 chains

“四表”是指 iptables 的功能,默认的 iptables 规则表有 filter 表(过滤规则表)、nat 表(地址转换规则表)、mangle(修改数据标记位规则表)、raw(跟踪数据表规则表):

  • filter 表:控制数据包是否允许进出及转发,可以控制的链路有 INPUT、FORWARD 和 OUTPUT。
  • nat 表:控制数据包中地址转换,可以控制的链路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。
  • mangle:修改数据包中的原数据,可以控制的链路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。
  • raw:控制 nat 表中连接追踪机制的启用状况,可以控制的链路有 PREROUTING、OUTPUT。

“五链”是指内核中控制网络的 NetFilter 定义的 5 个规则链。每个规则表中包含多个数据链:INPUT(入站数据过滤)、OUTPUT(出站数据过滤)、FORWARD(转发数据过滤)、PREROUTING(路由前过滤)和 POSTROUTING(路由后过滤),防火墙规则需要写入到这些具体的数据链中。

  • 如果是外部主机发送数据包给防火墙本机,数据将会经过 PREROUTING 链与 INPUT 链;
  • 如果是防火墙本机发送数据包到外部主机,数据将会经过 OUTPUT 链与 POSTROUTING 链;
  • 如果防火墙作为路由负责转发数据,则数据将经过 PREROUTING 链、FORWARD 链以及 POSTROUTING 链。
阅读全文 »

简介

iptables 命令是 Linux 上常用的防火墙软件,是 netfilter 项目的一部分。可以直接配置,也可以通过许多前端和图形界面配置。

查看 iptables:

1
2
which iptables
whereis iptables

内核会按照顺序依次检查 iptables 防火墙规则:

  • 如果发现有匹配的规则目录,则立刻执行相关动作,停止继续向下查找规则目录;
  • 如果所有的防火墙规则都未能匹配成功,则按照默认策略处理。

使用 -A 选项添加防火墙规则会将该规则追加到整个链的最后,
使用 -I 选项添加的防火墙规则则会默认插入到链中作为第一条规则。

阅读全文 »

查看系统是否安装防火墙

1
which iptables

如果没有安装,那么使用 sudo apt-get install iptables 安装。

查看防火墙的配置信息

1
sudo iptables -L
阅读全文 »

Docker 自动开放端口解决方案

简单暴力法不让 docker 使用 iptables

修改 docker 的配置文件/etc/docker/daemon.json(若没有就新建一个), 添加如下内容:

1
2
3
{
"iptables": false
}

重启 docker:

1
systemctl restart docker

再启动 docker 容器, 就不会修改防火墙了.

直接 iptables 移除并修改

使用 DOCKER-USER 方案

https://holywhite.com/archives/489

使用 DFW 方案

https://github.com/pitkley/dfw

修改绑定为 127.0.0.1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3"
services:
lims-gateway:
image: lims-gateway:0.0.1
restart: always
container_name: lims-gateway
ports:
- "127.0.0.1::80"
networks:
- net0
volumes:
- /etc/localtime:/etc/localtime
env_file:
- ./var.env
networks:
net0:

参考:

关于 docker 自动开放端口解决方案

iptables-save 查看防火墙状态(节选):

1
2
3
4
5
-A DOCKER ! -i br-fe67cfba7476 -p tcp -m tcp --dport 15000 -j DNAT --to-destination 192.168.224.2:5000
-A DOCKER ! -i br-fe67cfba7476 -p tcp -m tcp --dport 15002 -j DNAT --to-destination 192.168.224.3:5000
-A DOCKER ! -i br-fe67cfba7476 -p tcp -m tcp --dport 15001 -j DNAT --to-destination 192.168.224.4:5000
COMMIT
# Completed on Thu Sep 8 06:38:44 2022

在 docker 中只要有容器映射了端口 docker 就会自动加 iptables,所以根本就没走到 ufw 端口就被放行了。

参考:

ufw 禁用端口未生效

UFW,或称 Uncomplicated Firewall,是 iptables 的一个接口,为不熟悉防火墙概念的初学者提供了易于使用的界面,同时支持 IPv4 和 IPv6,广受欢迎。

更新 Ubuntu

1
sudo apt update && sudo apt upgrade -y

注意:docker 自动在防火墙列表中添加了开放端口的规则. 所以根本就没走到 ufw 端口就被放行了。

启用、安装或删除 UFW

默认情况下,应安装 UFW,但如果已将其删除,请重新安装 UFW。

1
sudo apt install ufw -y

检查防火墙状态

1
2
3
4
5
# 服务状态
systemctl status ufw

# UFW 防火墙的状态
ufw status

设置 SSH 防火墙规则

启用防火墙,它将阻止所有传入连接并允许所有传出连接。 这将立即帮助保护您的系统。

对于服务器用户或任何其他使用 SSH 远程连接会话的用户,您可以将自己锁定。 幸运的是,您可以在服务未激活时添加 UFW 规则,从而允许 SSH 服务。

1
sudo ufw allow ssh
阅读全文 »

自定义 Docker Hub 服务器 Http 支持

1
vim /etc/docker/daemon.json

添加 hub 地址:

1
2
3
{
"insecure-registries": ["10.10.0.105:8080"]
}

示例:

1
2
3
4
{
"registry-mirrors": ["https://lhao27k5.mirror.aliyuncs.com"],
"insecure-registries" : ["10.10.0.105:8080"]
}

重启docker 服务

1
systemctl restart docker

登录 Docker Hub

1
docker login 10.10.0.105:8080

镜像生成,上传

1
2
3
4
5
# 生成镜像
docker build -t 10.10.0.105:8080/myhub/lims:0.0.1 /lims/git/Admin.NET

# 推送 -a 推送所有镜像
docker push 10.10.0.105:8080/myhub/lims:0.0.1

检查使用量

检查使用量,可以看到所属卷组。

1
2
3
4
5
6
7
8
df /var
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 102626232 13556520 83810448 14% /

df -h /var

# 计算文件夹大小
du -sh /tmp
阅读全文 »

创建镜像

进入应用目录(存在 Dockerfile 文件):

1
docker build -t lims:0.0.2 .

测试

1
2
3
4
5
6
7
8
9
# rm :退出时,删除容器
docker run --name lims-server -e TZ=Asia/Shanghai -p 80:80 -d lims:0.0.2

# 多行命令
docker run \
--name lims-server \
-e TZ=Asia/Shanghai \
-p 80:80 \
-d lims:0.0.2
阅读全文 »