Nginx
Nginx 相关教程,包括其衍生应用。
📘 Nginx 最简单的站点配置
创建站点目录
假设你的站点已经编译好了,并且文件都会放在以下目录
terminal
# 创建目录
mkdir -p /var/www/digvps/dist
# 配置权限
chown -R www-data:www-data /var/www/digvps
创建配置文件:无 server_name,IP 或任何 Host 都能访问。
terminal
vi /etc/nginx/sites-available/digvps.conf
conf
server {
listen 80 default_server;
listen [::]:80 default_server;
root /var/www/digvps/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
创建配置文件(可选)
如果服务器打算部署多个站点,则需要指定域名访问。 把 server_name
中的域名替换成你自己的即可。
conf
server {
listen 80;
listen [::]:80;
server_name digvps.com www.digvps.com;
root /var/www/digvps/dist;
index index.html;
location / {
try_files $uri $uri/ /index.html;
}
}
启用配置
terminal
sudo ln -s /etc/nginx/sites-available/digvps.conf /etc/nginx/sites-enabled/
检查并重启 Nginx
terminal
sudo nginx -t
sudo systemctl reload nginx
Cloudflare CDN 配置
传送门:开启 CDN
📘 Nginx Proxy Manager 站点反代
Nginx Proxy Manager 是一个基于 Nginx 的开源工具,提供用户友好的 Web 界面,用于轻松管理反向代理、SSL/TLS 证书、域名解析和访问控制等网络配置。
视频教程
请务必结合视频教程食用,因为细节内容都在视频中讲解,本文主要供小伙伴们拷贝代码用途。
安装 Docker
屏蔽IPV6(可选)
terminal
# 编辑 sysctl.conf
vim /etc/sysctl.conf
# 以下行以禁用 IPv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
# 加载新配置
sysctl -p
设置软件源
terminal
# Uninstall all conflicting packages
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
安装 Docker 服务
terminal
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
安装 Nginx Proxy Manager
Docker Compose 配置文件
yml
services:
app:
image: 'jc21/nginx-proxy-manager:latest'
restart: unless-stopped
ports:
- '80:80'
- '81:81'
- '443:443'
volumes:
- ./data:/data
- ./letsencrypt:/etc/letsencrypt
运行 Nginx Proxy Manager
terminal
# 启动
docker compose up -d
# 停止
docker compose down
# 查看日志
docker composoe logs -f
📘 Fail2ban 配置 Nginx Proxy Manager 访问频率限制
安装 Fail2ban
terminal
# 更新软件包列表
sudo apt update
# 安装 fail2ban
sudo apt install fail2ban -y
# 检查安装状态
sudo systemctl status fail2ban
# 设置开机自启动
sudo systemctl enable fail2ban
禁用默认 Jail 配置(可选)
首先需要禁用默认的 jail 以避免错误:
terminal
# 创建 jail.local 文件来覆盖默认配置
vi /etc/fail2ban/jail.local
terminal
[DEFAULT]
# 默认配置
ignoreip = 127.0.0.1/8 ::1
bantime = 3600
findtime = 600
maxretry = 5
# 禁用所有默认 jail
[sshd]
enabled = false
[sshd-ddos]
enabled = false
[dropbear]
enabled = false
[selinux-ssh]
enabled = false
[apache-auth]
enabled = false
[apache-badbots]
enabled = false
[apache-noscript]
enabled = false
[apache-overflows]
enabled = false
创建自定义过滤器
创建用于解析 Nginx Proxy Manager 日志格式的过滤器:
terminal
vi /etc/fail2ban/filter.d/nginx-proxy-manager.conf
添加以下内容:
terminal
[Definition]
# Nginx Proxy Manager 日志过滤器
# 日志格式: [时间] - 状态码 状态码 - 方法 协议 域名 "路径" [Client IP] [其他信息]...
# 定义失败正则表达式(匹配所有请求)
failregex = \[Client <HOST>\]
# 忽略正则表达式(可选)
ignoreregex =
# 日期格式定义
datepattern = ^\[%%d/%%b/%%Y:%%H:%%M:%%S %%z\]
创建 Jail 配置
创建专门的 jail 配置文件:
terminal
vi /etc/fail2ban/jail.d/nginx-proxy-manager.conf
添加以下内容:
terminal
[nginx-proxy-manager]
# 启用此 jail
enabled = true
# 使用自定义过滤器
filter = nginx-proxy-manager
# 监控的日志文件路径
logpath = proxy-host-15_access.log
# 后端类型
backend = pyinotify
# 最大重试次数(1分钟内1000次)
maxretry = 1000
# 时间窗口(1分钟 = 60秒)
findtime = 60
# 封禁时长(72小时 = 259200秒)
bantime = 259200
# 自定义封禁动作
action = npm-iptables
# 忽略的 IP 地址(可选,添加信任的 IP)
ignoreip = 127.0.0.1/8 ::1
# 192.168.0.0/16
# 10.0.0.0/8
创建自定义动作
创建专门的 jail 配置文件:
terminal
vi /etc/fail2ban/action.d/npm-iptables.conf
添加以下内容:
terminal
[Definition]
# 动作定义
actionstart =
actionstop =
actioncheck =
# 封禁动作
actionban = iptables -I INPUT 1 -s <ip> -j DROP
iptables -I FORWARD 1 -s <ip> -j DROP
# 解封动作
actionunban = iptables -D INPUT -s <ip> -j DROP
iptables -D FORWARD -s <ip> -j DROP
[Init]
# 初始化参数
测试配置
验证过滤器
terminal
# 测试过滤器是否能正确匹配日志
sudo fail2ban-regex proxy-host-15_access.log /etc/fail2ban/filter.d/nginx-proxy-manager.conf
检查 Jail 配置
terminal
# 检查配置语法
sudo fail2ban-client -d
# 查看所有 jail
sudo fail2ban-client status
启动和管理
terminal
# 重启服务以应用新配置
sudo systemctl restart fail2ban
# 检查服务状态
sudo systemctl status fail2ban
常用管理命令
terminal
# 手动封禁 IP
sudo fail2ban-client set nginx-proxy-manager banip 1.2.3.4
# 手动解封 IP
sudo fail2ban-client set nginx-proxy-manager unbanip 1.2.3.4
# 查看被封禁的 IP 列表
sudo fail2ban-client status nginx-proxy-manager | grep "Banned IP"
# 查看 jail 的详细信息
sudo fail2ban-client get nginx-proxy-manager actions
# 重新加载配置
sudo fail2ban-client reload
# 查看日志
sudo tail -f /var/log/fail2ban.log
监控和调试
查看 Fail2ban 日志
terminal
# 实时监控日志
sudo tail -f /var/log/fail2ban.log
# 查看最近的封禁记录
sudo grep "Ban" /var/log/fail2ban.log | tail -20
# 查看最近的解封记录
sudo grep "Unban" /var/log/fail2ban.log | tail -20
查看 iptables 规则
terminal
# 查看 INPUT 链规则
sudo iptables -L INPUT -n -v --line-numbers
# 查看 FORWARD 链规则
sudo iptables -L FORWARD -n -v --line-numbers
📘 日志查看
总访问量频繁的 IP
terminal
cat access.log | awk '{print $12}' |sort |uniq -c |sort -n -k 1 -r|more
查看某个 IP 访问量频繁的 URL
terminal
cat access.log | grep '75.221.79.53' |awk '{print $10}'|sort|uniq -c |sort -n -k 1 -r|more
敏感 SQL 语句
terminal
cat access.log | awk '/select/{print $1}'|sort -n |uniq -c |sort -nr
cat access.log | awk '/\/and\//||/\+and\+/||/%20and%20and/{print $1}'|sort -n|uniq -c|sort -nr
cat access.log | awk '/sleep/{print $1}'|sort -n|uniq -c|sort -nr