New for update all beofore files

This commit is contained in:
2026-04-28 15:36:00 +08:00
commit dbf37d2dd2
13 changed files with 2131 additions and 0 deletions
@@ -0,0 +1,90 @@
# Debian12 下 Xray + v2rayA 手动安装全记录
## 一、准备工作(补齐基础工具)
apt update
apt install curl wget unzip net-tools vim nano -y
这里可以先自行下载好软件,因为有可能在线下载不成功。下载地址:
v2RayA下载地址:https://github.com/v2rayA/v2rayA/releases
xRay-Core下载地址:https://github.com/XTLS/Xray-core/releases
下载完成后把这两个文件放在/tmp目录下。
## 二、安装 Xray 核心
cd /tmp
wget https://github.com/XTLS/Xray-core/releases/latest/download/Xray-linux-64.zip
已下载则跳过上面wget。
unzip Xray-linux-64.zip -d xray-core
mkdir -p /usr/local/share/xray
cp xray-core/*.dat /usr/local/share/xray/
install -Dm755 xray-core/xray /usr/local/bin/xray
xray -version
## 三、安装 v2rayA(二进制版)
cd /tmp
wget https://github.com/v2rayA/v2rayA/releases/download/v2.3.3/v2raya_linux_x64_2.3.3
已下载则跳过上面wget。
install -Dm755 v2raya_linux_x64_2.3.3 /usr/local/bin/v2raya
v2raya version
## 四、创建系统服务(开机自启 + 透明代理)
tee /etc/systemd/system/v2raya.service > /dev/null << 'EOF'
[Unit]
Description=v2rayA Service
After=network.target nss-lookup.target
Wants=network.target
[Service]
Type=simple
User=root
LimitNPROC=500
LimitNOFILE=1000000
ExecStart=/usr/local/bin/v2raya
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable v2raya --now
systemctl status v2raya
关键点:如果是服务器版本的Debian,ExecStart 后面不要加 --lite,否则无法开启透明代理。如果是带 GNOME/KDE 的桌面版 Debian则需要加--lite。
## 五、放行防火墙(可选)
如果用 nftables/iptables
iptables -A INPUT -p tcp --dport 2017 -j ACCEPT
如果用 ufw
ufw allow 2017
## 六、Web 配置
1)浏览器访问 http://你的DebianIP:2017
(2)创建管理员账号,直接输入就可以了。
3)导入你的 vless://xxxxx 节点
(4)选择节点(在节点列表) → 点击 “启动”(界面的左上角)
(5)进入 “设置” → “透明代理/系统代理” → 选 “大陆白名单模式” → 保存
## 七、验证
curl ip.sb # 应返回节点 IP
curl -I https://www.google.com # 应返回 200
apt update # 应正常更新
## ⚠️ 注意事项(避坑指南)
坑点 说明
--lite 参数 千万不能加,否则透明代理不可用
端口 2017 Web 管理端口,防火墙需放行
Xray 版本 建议用最新版,老版本可能不支持 VLESS
服务状态 用 systemctl status v2raya 查看,确保 active
Debian 版本 本流程适用于 Debian 11/12(含最小化安装)
## 🔁 如果以后要升级
### 升级 Xray
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
### 升级 v2rayA(手动下载新二进制替换)
systemctl stop v2raya
install -Dm755 ./新下载的v2raya文件 /usr/local/bin/v2raya
systemctl start v2raya
@@ -0,0 +1,201 @@
# Debian 命令行 WireGuard VPN 服务器搭建教程(静态IP+域名+自启)
## 一、环境说明
• 系统:Debian(纯命令行模式,无桌面环境,节约资源)
• 网卡名称:ens192
• 静态IP192.168.2.203/24(子网掩码:255.255.255.0
• 网关:192.168.2.1
• WireGuard EndPointhayashiei.top:58888(域名需解析到服务器公网IP,仅局域网使用可忽略)
• 管理工具:wireguard-ui(可视化配置,简化操作)
• 自启方式:systemd 服务(解决重启丢规则、服务失效问题)
## 二、前置准备
1. 以 root 用户登录 Debian 纯命令行(远程登录可使用 Xshell、Putty 等工具);
2. 确保服务器临时能联网(用于下载依赖和软件,后续配置静态IP后永久联网);
3. 提前确认域名 hayashiei.top 已解析(若使用公网访问,无公网则跳过)。
## 三、分步搭建步骤
### 步骤 1:更新系统并安装基础依赖
执行以下命令,更新系统软件包,并安装后续操作所需的基础工具:
#更新系统包
apt update && apt upgrade -y
#安装WireGuard、curl、sudo、iptables等依赖
apt install -y wireguard wireguard-tools curl iptables sudo unzip
### 步骤 2:配置静态 IP(适配 ens192 网卡)
先备份原有网络配置,再写入静态IP配置(避免配置错误无法恢复):
1. 备份网络配置文件:
cp /etc/network/interfaces /etc/network/interfaces.bak
2. 写入静态IP配置(直接覆盖原有内容,适配192.168.2.203):
cat > /etc/network/interfaces << EOF
auto lo
iface lo inet loopback
#配置 ens192 静态 IP
auto ens192
iface ens192 inet static
address 192.168.2.203/24 # 静态 IP/24 等价于子网掩码 255.255.255.0
gateway 192.168.2.1 # 网关(路由器IP)
dns-nameservers 223.5.5.5 223.6.6.6 # 阿里云 DNS,确保解析正常
EOF
3. 重启网络服务,使静态IP生效:
systemctl restart networking
4. 验证静态IP是否生效:
ip a show ens192
验证标准:命令输出中能看到 “inet 192.168.2.203/24”,表示静态IP配置成功。
### 步骤 3:开启IP转发
#临时开启(当前会话有效)
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding
#永久开启(重启后生效)
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
echo "net.ipv6.conf.all.forwarding=1" >> /etc/sysctl.conf
#生效配置
sysctl -p
### 步骤 4:配置系统防火墙
#放行58888 UDP端口(WireGuard
iptables -A INPUT -p udp --dport 58888 -j ACCEPT
iptables -A FORWARD -i wg0 -j ACCEPT
iptables -A FORWARD -o wg0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
#保存iptables规则(防止重启失效)
apt install -y iptables-persistent
netfilter-persistent save
### 步骤 5:安装 wireguard-ui(可视化管理工具)
wireguard-ui 可简化服务器和客户端配置,无需手动编写复杂的 conf 文件:
1. 安装WireGuard-UI工具
#创建存放目录
mkdir -p /opt/wireguard-ui
cd /opt/wireguard-ui
#下载最新版wireguard-ui(适配amd64架构)
curl -L https://github.com/ngoduykhanh/wireguard-ui/releases/latest/download/wireguard-ui-linux-amd64.tar.gz -o wireguard-ui.tar.gz
tar xzf wireguard-ui.tar.gz
chmod +x wireguard-ui
2. 创建 wireguard-ui 系统服务(实现开机自启):
#创建systemd服务(开机自启)
cat > /etc/systemd/system/wireguard-ui.service << EOF
[Unit]
Description=WireGuard UI
After=network.target
[Service]
User=root
WorkingDirectory=/opt/wireguard-ui
ExecStart=/opt/wireguard-ui/wireguard-ui --bind-address 0.0.0.0:5000
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
3. 设置WireGuard-UI开机自启动
#启动并设置开机自启
systemctl daemon-reload
systemctl start wireguard-ui
systemctl enable wireguard-ui
验证 wireguard-ui 是否正常运行:
systemctl status wireguard-ui.service
验证标准:输出中显示 “active (running)”,表示 UI 服务启动成功。
### 步骤 6:通过 wireguard-ui 配置 WireGuard 服务器
UI 启动后,通过浏览器访问,可视化配置服务器参数:
1. 浏览器访问 UI 页面(仅局域网访问,公网访问需端口转发):
http://192.168.2.203:5000
2. 首次登录(默认账号密码,建议登录后立即修改):
账号:admin 密码:admin
如果出现登陆跳转登陆界面则:
#假设数据目录在 /opt/wireguard-ui 或 /var/lib/wireguard-ui
#先找到你的数据目录(看启动日志或配置)
#示例:
chown -R root:root /opt/wireguard-ui
chmod -R 700 /opt/wireguard-ui
然后重启服务。
systemctl daemon-reload
systemctl restart wireguard-ui
3. 配置服务器核心参数(进入「Server」页面):
• Interface Namewg0(默认即可,无需修改)
• Listen Port:51820(默认端口,若被占用可修改,需同步修改后续配置)
• Private Key/Public Key:系统自动生成,无需手动修改
• Address:填写 VPN 内网段(如 10.0.0.1/24,自定义即可,避免与局域网网段冲突)
• DNS Servers223.5.5.5, 223.6.6.6(与静态IP配置的DNS一致,确保客户端解析正常)
• EndPointhayashiei.top:58888(填写自己的域名+端口,无公网可留空)
PostUP和PostDown如果是外网VPN则什么都不用填。如果是异地组网则按照如下填写:
• PostUPiptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens192 -j MASQUERADE; iptables -A FORWARD -i %i -o %i -j ACCEPT
• PostDowniptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens192 -j MASQUERADE; iptables -D FORWARD -i %i -o %i -j ACCEPT
4. 点击「Save Config」保存配置,系统会自动生成 /etc/wireguard/wg0.conf 文件(核心配置文件)。
下面是验证是否正常。
#查看WireGuard接口状态
wg show
#查看wireguard-ui服务状态
systemctl status wireguard-ui
#查看端口监听(确认58888 UDP端口已监听)
ss -ulnp | grep 58888
5. 配置 WireGuard 开机自启
通过 systemd 服务,让 wg0 接口开机自动加载:
1. 启用自启:
systemctl enable wg-quick@wg0.service
2. 启动 wg0 接口:
wg-quick up wg0
3. 验证 WireGuard 状态:
wg show wg0
验证标准:能看到 wg0 接口的 IP、监听端口,即表示启动成功。
### 步骤 7:添加客户端(通过 wireguard-ui
客户端需导入配置文件才能连接 VPN,通过 UI 快速生成:
1. 回到 wireguard-ui 页面,点击左侧「Clients」→「Add Client」;
2. 填写客户端名称(如 “iPhone”、“Windows”,自定义,便于区分);
3. 其他参数默认(系统自动生成密钥和 IP),点击「Save」;
4. 生成后,点击客户端右侧「Download」,下载 .conf 配置文件;
5. 将配置文件导入客户端 WireGuard 软件(手机/电脑均可,下载对应系统的 WireGuard 客户端)。
### 步骤 8:功能验证(确保所有配置正常)
客户端导入配置并连接 VPN 后,进行以下测试:
1. 访问外网:打开浏览器访问百度、谷歌等,能正常加载即表示外网连通;
2. 访问局域网:访问 192.168.2.x 网段的设备(如路由器、其他电脑),能正常访问即表示局域网连通;
3. 重启验证:执行 reboot 重启服务器,重启后无需手动操作,再次测试客户端连接和访问功能,均正常即表示所有配置永久生效。
## 四、常用运维命令(收藏备用)
#查看 wireguard-ui 服务状态(是否运行)
systemctl status wireguard-ui.service
#重启 wireguard-uiUI 无法访问时使用)
systemctl restart wireguard-ui.service
#查看 WireGuard 接口状态(客户端连接情况、流量等)
wg show wg0
#重启 WireGuard 接口(客户端无法连接时使用)
wg-quick down wg0 && wg-quick up wg0
#查看 NAT 转发服务状态
systemctl status wg-nat.service
#验证静态 IP 是否正常
ip a show ens192
#验证 IP 转发是否开启
cat /proc/sys/net/ipv4/ip_forward
#重启服务器
Reboot
#添加了客户端但是没有生效
#先停止旧接口,再启动新配置 wg-quick down wg0 && wg-quick up wg0 # 验证修改是否生效 wg show wg0
## 五、注意事项
1. 域名使用说明:若需通过公网域名 hayashiei.top 连接 VPN,需确保:
域名已正确解析到服务器公网 IP
路由器需转发 58888端口(UDP 协议)到服务器 192.168.2.203
2. 端口冲突:若 58888 端口被占用,需修改 wireguard-ui 中的「Listen Port」,并同步修改路由器端口转发和客户端配置;
3. 命令行模式:无需安装桌面环境,保持纯命令行即可,节约服务器资源;
4. 密码修改:首次登录 wireguard-ui 后,建议立即修改 admin 密码(进入「Settings」页面修改),提升安全性;
5. 配置备份:建议备份 /etc/wireguard/ 目录下的所有 .conf 文件,以及 /etc/network/interfaces 文件,便于后续恢复。
## 六、总结
本教程完全适配本人服务器环境,核心解决了 Debian 命令行模式下:静态 IP 配置、WireGuard 重启失效、NAT 转发规则丢失、wireguard-ui 无法访问等问题;
所有服务均配置为开机自启,重启服务器后无需任何手动操作,客户端可直接连接,正常访问外网和局域网;
后续重装或迁移服务器时,可直接参考本教程,一步到位完成搭建,无需重复试错。
+339
View File
@@ -0,0 +1,339 @@
# Debian12+Flarum1.8.1搭建小型论坛
## 一、环境说明
• 系统版本:Debian(纯命令行模式,无桌面环境,节约资源)
• 网站版本:Flarum 1.8.1
• Nginx版本:1.22.1
• 数据库版本:MySQL 5.7+ 或 MariaDB 10.2+
• PHP版本:8.0+
## 二、前置准备
1. 以 root 用户登录 Debian 纯命令行(远程登录可使用 Xshell、Putty 等工具);
2. 确保服务器临时能联网(用于下载依赖和软件,后续配置静态IP后永久联网);
3. 提前确认您域名已解析。本文后续域名使用yousuke.icu,您可以替换成您自己的域名。
## 三、分步搭建步骤
### 步骤1:安装Composer
#下载Composer安装脚本
php - r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
#验证脚本完整性(可选但推荐)
php - r "if (hash_file('sha384', 'composer-setup.php') === '55ce33d7678c5a611085589f1f3ddf8b3c52d662cd01d4ba75c0ee0459970c2200a51f492d557530c71c15d8dba01eae') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
#安装Composer到全局
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
#验证安装
composer -V
### 步骤2:创建数据库
mysql -u root -p
执行以下 SQL 创建 Flarum 专用数据库和用户(替换<你的数据库用户名>为实际用户名,比如 flarum_user):
-- 创建数据库(字符集必须utf8mb4,支持emoji
CREATE DATABASE flarum_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 创建数据库用户并授权
CREATE USER 'flarum_user'@'localhost' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON flarum_db.* TO 'flarum_user'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出MySQL
EXIT;
### 步骤3:安装Flarum 1.8.1
#进入网站上层目录
cd /var/www/
#创建目录
#创建站点根目录(根据你的服务器实际web根目录调整,比如Nginx常用/var/wwwApache常用/var/www/html
mkdir -p /var/www/xxx
#赋予目录权限(www-data是web服务默认用户,不同系统可能是apache/nginx
chown -R www-data:www-data /var/www/xxx
chmod -R 755 /var/www/xxx
xxx表示网站目录名称
#安装Flarum 1.8.1
composer create-project flarum/flarum mir3 1.8.* --stability=stable --no-dev --ignore-platform-reqs
注意这里可能出现以下提示:
Package doctrine/cache is abandoned, you should avoid using it. No replacement was suggested.
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
Generating autoload files
74 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
Found 2 security vulnerability advisories affecting 2 packages.
Run "composer audit" for a full list of advisories.
这个提示信息实际就是告诉你有一个cache的文件夹没有,不用管,这个文件夹在网站在网页完成最后安装的时候会自己出来,这会没有是对的。
### 步骤4:配置Nginx
#编辑或新建vim /etc/nginx/conf.d/xxx.conf
vim /etc/nginx/conf.d/xxx.conf
#粘贴以下配置(xxx为网站目录)
```nginx
server {
listen 80;
listen [::]:80;
server_name 你的域名;
root /var/www/xxx/public; #Flarum的入口在public目录
index index.php index.html;
#静态文件缓存(优化性能)
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
expires 1y;
add_header Cache-Control "public, max-age=31536000";
add_header X-Content-Type-Options nosniff;
try_files $uri $uri/ /index.php?$query_string;
}
#URL重写(Flarum必需)
location / {
try_files $uri $uri/ /index.php?$query_string;
}
#PHP解析配置
location ~ \.php$ {
fastcgi_pass unix:/run/php/php8.2-fpm.sock; #确认PHP-FPM sock路径(不同系统可能是/var/run/php/php8.2-fpm.sock
fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
fastcgi_param DOCUMENT_ROOT $realpath_root;
include fastcgi_params;
fastcgi_index index.php;
}
#禁止访问敏感文件
location ~ /\.env {
deny all;
}
}
```
#保存后检查 Nginx 配置并重启:
nginx -t #检查配置语法
systemctl restart nginx #重启Nginx
### 步骤5Web界面安装Flarum
1. 浏览器访问http://你的域名,进入 Flarum 安装界面;
2. 填写安装信息:
数据库:
数据库类型:MySQL/MariaDB
主机:localhost
数据库名:flarum_db(步骤 2 创建的)
用户名:flarum_user(步骤 2 创建的)
密码:xxxxxxxxxxx(步骤2你设置的)
管理员账户:填写你的管理员邮箱、用户名、密码;
论坛信息:填写论坛名称,URL 填写http://你的域名(后续配置 HTTPS 时也不用管,申请证书的时候会自动搞定https);
3. 点击 “Install Flarum” 完成安装。
注意:这一步安装完之后,之前安装Flarum 1.8.1缺少的cache就会有了。
## 四、中文语言包安装
### 步骤1SSH安装语言包
中文语言包一定要在这个时候再安装,否则会因为缺少那个cache失败。
#1. 进入mir3目录
cd /var/www/mir3
#2. 允许root运行Composer(消除权限警告)
export COMPOSER_ALLOW_SUPERUSER=1
#3. 安装中文语言包(忽略安全审计,适配1.8.*)
composer require flarum-lang/chinese-simplified:* --prefer-dist --no-audit
#4. 此时flarum命令已可用,清除缓存
php flarum cache:clear
### 步骤2:后台启用中文语言包
浏览器访问http://你的域名 /admin,用你刚创建的管理员账号登录;
1. 左侧菜单栏点击Features(特征其实就是扩展);
在最下面找到Language下面有English和简体中文,点击简体中文进去,点击Enable按钮启用;
2. 回到左侧菜单栏最上面,点击Basics;
找到 “Default Language”选项,下拉选择 “中文简体”;
滚动到页面底部,点击Save Changes(保存更改);
刷新论坛首页,界面已全部变为中文。
## 五、其他优化
优化设置部分先后,根据自己的需求来.
### 优化1:邮箱设置
这个地方很坑,邮箱设置分两个步骤。
#### 步骤1:后台编辑
进入后台,左侧菜单选择“邮箱”。
这一堆照着填就行了,和平时配置pop、imap邮箱时没什么区别,填写好后保存。
此时点发送,肯定会失败。
#### 步骤2:代码编辑
#编辑网站根目录下的 config.php 文件,找到 ‘mail’ 配置段,修改为如下格式(如何没有就直接粘贴进去,同时根据在后台填写的内容设置):
nano /var/www/xxx/config.php
xxx是网站目录
// 文件位置:config.php
```
'mail' => [
'driver' => 'smtp',
'host' => 'smtpdm.aliyun.com',
'port' => 465, // 或 587
'encryption' => 'ssl', // 或 tls,必须小写
'username' => '你的完整发信地址@example.com',
'password' => '你的阿里云SMTP密码',
'from' => [
'address' => '你的完整发信地址@example.com', // 必须与上面一致
'name' => '你的论坛名称',
],
],
```
#### 步骤3:测试
此时回到后台点击测试,如果信息没有错,就会提示发送成功。
这里注意,如果你的邮件很多,最好用正规的,别用个人的,容易出问题。
### 优化2:注册免邮箱验证
Flarum默认注册时需要填写邮箱,然后论坛会发一封确认邮件,这个功能个人觉得小型论坛完全没必要。因此,建议关闭。
关闭方法如下:
#连接服务器:使用 SSH 工具(如 Putty 或终端)登录到你的服务器。
#进入论坛根目录:导航到 Flarum 安装的根目录:
cd /var/www/xxx(请将路径替换为你自己的实际路径)
#执行安装命令:在根目录下,运行以下 Composer 命令来安装Email Verification Switch 插件:
composer require isaced/flarum-ext-email-verification-switch:"*"
#启用扩展:命令执行完成后,回到 Flarum 后台的 Extensions(插件) 页面,找到新安装的 Email Verification Switch,点击“启用”即可。
### 优化3:白天黑夜模式设置
这个是现在比较流行的根据白天黑夜进行页面颜色的设置,所以为了搞这个就装了一个FoF Night Mode插件。
由 Flarum 官方团队(Friends of Flarum)开发,是原版的「增强版」,支持自定义深色主题色、定时切换、强制全局模式,适合想精细控制风格的论坛。
#安装命令(SSH 执行)
#进入 Flarum 目录
cd /var/www/mir3
#执行安装
composer require fof/nightmode:*
#刷新缓存
php flarum cache:clear
### 优化4:首页欢迎横幅
这个欢迎横幅旁边有一个叉,可以关闭,关闭之后以后再打开就没有了。对于我来说我是希望有点仪式感,就想保留这个,然后就得吧叉去掉的,同时还要让他一直存在。
由于我这边做了优化3,安装了FoF Night Mode插件,所以修改如下。如果没有装这个插件会有点区别,注意哟。
#登录 Flarum 后台 →「外观」→「编辑自定义 CSS」;
替换所有 CSS 为下面这段(专门适配 FoF Night Mode):
```
/* ========== 删掉关闭叉 ========== */
.Hero-close {
display: none !important;
}
/* ========== 基础:横幅不遮挡+强制显示 ========== */
.Hero {
display: block !important;
visibility: visible !important;
opacity: 1 !important;
z-index: 10 !important; /* 低于顶部导航,不遮挡功能 */
padding: 20px 0 !important;
margin-bottom: 15px !important;
text-align: center !important;
border-bottom: 1px solid #eee !important;
position: relative !important;
width: 100% !important;
height: auto !important;
}
/* ========== 适配FoF Night Mode 核心逻辑 ========== */
/* 1. 日间模式(插件默认light主题) */
body[data-theme="light"] .Hero {
background-color: #f8f9fa !important; /* 浅灰白(匹配插件日间) */
color: #212529 !important; /* 深灰文字(清晰) */
border-bottom-color: #e9ecef !important;
}
/* 2. 夜间模式(插件dark主题) */
body[data-theme="dark"] .Hero {
background-color: #1e293b !important; /* 深蓝灰(匹配插件夜间) */
color: #f8fafc !important; /* 浅白文字(不刺眼) */
border-bottom-color: #334155 !important;
}
/* ========== 兜底:兼容插件旧版本 ========== */
body.night-mode .Hero, html.dark .Hero {
background-color: #1e293b !important;
color: #f8fafc !important;
border-bottom-color: #334155 !important;
}
/* ========== 功能保障 ========== */
.Hero .container {
font-size: 16px !important;
line-height: 1.8 !important;
padding: 0 20px !important;
}
.Hero-close { display: none !important; }
.Header, .Header-controls { z-index: 9999 !important; }
```
保存后,先切换夜间模式,再按 Ctrl+F5 硬刷新
### 优化5:全论坛置顶功能
这个功能我觉得很好,所以我是安装了的。
要实现 “帖子在板块内置顶,同时在首页(全部主题)也置顶”,需要安装 the-turk/flarum-stickiest 扩展,它在原生 flarum/sticky 的基础上增加了「全局置顶(Super Sticky)」功能。
1. 安装扩展(SSH 执行)
#进入你的 Flarum 目录
cd /var/www/mir3
#安装 Stickiest 扩展
composer require the-turk/flarum-stickiest:^3.0.0
#执行数据库迁移(首次安装必须)
php flarum migrate
#清空缓存
php flarum cache:clear
### 优化6:论坛日间夜间主题切换
由 Flarum 官方团队(Friends of Flarum)开发,是原版的「增强版」,支持 自定义深色主题色、定时切换、强制全局模式,适合想精细控制风格的论坛。
1. 安装命令(SSH 执行)
#进入 Flarum 目录
cd /var/www/mir3
#执行安装
composer require fof/nightmode:*
#刷新缓存
php flarum cache:clear
2. 核心优势(比原版强在哪)
自定义深色主题:可单独设置夜间模式下的主色调、链接色,不再是单纯的黑白反转;
定时自动切换:比如「晚 8 点自动切夜间,早 8 点切日间」;
管理员强制模式:可选择「全站仅日间」「全站仅夜间」(适合游戏论坛的深色风格);
更细腻的切换动画:无卡顿,体验更流畅。
### 优化7:添加昵称
官方扩展:flarum/nicknames
这是由 Flarum 官方团队开发和维护的扩展,专门用于添加、管理和显示用户昵称 。它的兼容性最好,功能也纯粹。
主要功能:
允许用户在个人资料中设置一个昵称(区别于登录用的用户名)。
管理员可以在后台设置权限,控制哪些用户组可以编辑昵称 。
可以选择在注册时就让用户填写昵称 。
最重要的是,你可以在后台的“外观”设置中,选择将页面上显示的用户名替换为昵称 。
安装步骤
整个过程只需要几条命令,比之前装附件扩展要顺利得多。请在你的 Flarum 根目录下执行:
#进入 Flarum 目录
cd /var/www/mir3
#使用 Composer 安装扩展:
composer require flarum/nicknames
#运行迁移,更新数据库:
php flarum migrate
#清理缓存,确保生效:
php flarum cache:clear
### 优化8:附件插件
这个插件我放到最后是因为我唯一最不满意的地方,但是也是无可奈何。因为对于Flarum来说,只有FoF Upload这个选择。
#### 1. 安装
fof/upload 依赖 PHP 的文件上传扩展,且要求 Flarum ≥ 1.0.0,我们先补全依赖,避免安装失败:
#安装PHP上传所需扩展(你的服务器大概率已装,但补一下更稳妥)
apt install -y php-fileinfo php-imagick
#重启PHP-FPM生效
systemctl restart php-fpm
Composer 安装(推荐,稳定无错),这是官方推荐的安装方式,自动处理依赖,步骤最简单:
(1) 进入 Flarum 根目录
SSH 登录服务器,切换到 Flarum 安装目录:
cd /var/www/flarum
(2) 执行安装命令
直接运行 Composer 命令下载插件:
composer require fof/upload:*
*表示安装适配你当前 Flarum 版本的最新版;
如果提示需要 GitHub Token,直接按回车跳过(仅影响下载速度,不影响安装);
若出现「内存不足」报错(2G 内存偶尔会遇到),临时扩容交换内存:
运行
fallocate -l 1G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
#安装完成后可删除交换文件:rm -rf /swapfile
#### 2. 配置问题
这个配置折腾了我很久,主要是太麻烦我个人觉得。最开始是按照文件类型逐一配置的,我的天啊,太多了,实在有点受不了。后来找到了一个简单的办法。
先记下这个东西:
(video\/(3gpp|mp4|mpeg|quicktime|webm))|(audio\/(aiff|midi|mpeg|mp4))|(application\/(x-(7z|rar|zip)-compressed|zip|arj|x-(bzip2|gzip|lha|stuffit|tar)|pdf))| (image\/(gif|jpeg|png))
这个是常用附件类型最全的配置方法。因为图片是需要预览的,所以图片部分单独拿出来新建一个完整图片预览。
说说这个插件最坑的地方:
不支持中文和一些字符。当你上传带有中文的附件时,最后传完在帖子中看到的就只有非中文部分了。所以,在上传附件时对于国内来说就比较麻烦了,毕竟你把附件名字搞成纯英文的很麻烦,也还要估计人家是否看的懂。但是这个插件确实也是最好的了。网上一些方案我试了一下都不太靠谱,尝试了几个都不行。最后的解决方案就是发帖子带附件的时候按照
附件名+附件的方案。也就是先写附件的中文名,再插入附件,看起来还不错。多个附件就换行。我试了几个还可以,当然也是无奈之举。
@@ -0,0 +1,130 @@
# Discuz! 论坛附件上传参数设置与服务器内存配置建议
适用场景:Discuz! 论坛(X3.4 / X3.5
适用系统:Linux / Windows Server
适用环境:Nginx / Apache / IIS + PHP + MySQL
## 一、附件上传涉及的参数层级
附件上传的限制并非由单一参数决定,而是由 客户端 → Web服务器 → PHP → Discuz后台 → 用户组权限 五级联动控制。任何一个环节设置过小,都会导致上传失败。
参数层级示意图
客户端浏览器
Web服务器(Nginx/Apache/IIS ← client_max_body_size / LimitRequestBody / maxAllowedContentLength
PHP 配置文件(php.ini ← upload_max_filesize / post_max_size / memory_limit / max_execution_time / max_input_time
Discuz 后台全局设置 ← 【全局】→【上传设置】→“最大附件尺寸”
Discuz 用户组权限 ← 【用户】→【用户组】→【附件相关】→“最大附件尺寸”
## 二、各层级参数详解与推荐值
### 2.1 PHP 配置文件(php.ini
这是最核心的底层限制,所有上传文件必须先过这一关。
参数 作用 推荐值 说明
upload_max_filesize 单个文件大小上限 根据需求,如 500M / 1G 字面意思,一个附件最大不能超过此值
post_max_size 整个 POST 请求大小上限 ≥ upload_max_filesize + 10M 必须大于等于前者,因 POST 请求包含表单字段
memory_limit 单个 PHP 脚本最大可用内存 建议 128M ~ 512M,视服务器物理内存而定 影响图片缩略图生成、插件运行等,不宜过小
max_execution_time PHP 脚本最大执行时间(秒) 根据文件大小调整,如 300 ~ 7200 大文件上传需足够时间,设为 0 表示无限制
max_input_time PHP 接收输入数据最大时间(秒) 与 max_execution_time 保持一致 接收文件超时也会导致失败
配置示例(支持 1G 附件):
upload_max_filesize = 1024M
post_max_size = 1024M
memory_limit = 256M
max_execution_time = 3600
max_input_time = 3600
### 2.2 Web 服务器层限制
PHP 之前的第一道关卡,容易被忽略。
Web 服务器 参数 推荐设置 配置文件位置
Nginx client_max_body_size 与 post_max_size 一致,如 1024M http / server / location 块
Apache LimitRequestBody 与 post_max_size 一致,如 10737418241G 字节) httpd.conf 或 .htaccess
IIS maxAllowedContentLength 与 post_max_size 一致,如 1073741824 请求筛选模块
Nginx 配置示例:
nginx
client_max_body_size 1024M;
### 2.3 Discuz 后台全局设置
位置:【全局】 → 【上传设置】 → 【附件设置】
参数 说明 推荐设置
最大附件尺寸 全站统一的附件大小上限 建议 ≤ upload_max_filesize,留 10~20M 余量
允许附件类型 如 zip, rar, jpg, png 按需设置,避免上传可执行文件等风险类型
缩略图设置 是否生成缩略图 如开启,需确保 memory_limit 足够。
### 2.4 Discuz 用户组权限
位置:【用户】 → 【用户组】 → 【编辑】 → 【附件相关】
参数 说明 推荐设置
最大附件尺寸 该用户组允许上传的附件大小 可分级设置:管理员/版主 > 普通会员
允许附件类型 可单独覆写全局设置 如需限制特定用户组,可在此调整。
### 2.5 用户附件下载限制
以下参数均在/etc/nginx/8.2/conf.d/xxx.conf中,具体路径根据你的配置决定
send_timeout 3600s; #发送响应超时
keepalive_timeout 3600s; #长连接超时
fastcgi_read_timeout 3600s; #PHP-FPM 响应超时
client_max_body_size 2048M;
client_body_timeout 3600s;
client_header_timeout 60s;
client_body_buffer_size 20M;
## 三、服务器内存大小与参数设置推荐
### 3.1 核心原则
memory_limit ≠ 附件上限:它限制的是 PHP 脚本总内存占用,包括程序本身、图片处理、插件等。
留足余量:建议 memory_limit 比实际附件限制大 20%~30%,以应对图片缩略图等突发内存需求。
总内存分配参考:总内存 = 系统预留 + MySQL + PHP-FPM(所有进程) + 其他服务
### 3.2 不同内存配置推荐表
物理内存 MySQL 占用 系统预留 可用 PHP 总内存 推荐 memory_limit 推荐附件上限
1G ~200M ~200M ~600M 128M 80M ~ 100M
2G ~300M ~300M ~1.4G 256M 200M ~ 300M
4G ~500M ~400M ~3.1G 512M 500M ~ 800M
8G ~1G ~500M ~6.5G 1G 1G ~ 2G
说明:以上为通用建议值,若论坛图片处理频繁或插件较多,应适当提高 memory_limit,相应降低附件上限。
### 3.3 并发场景考虑
公式:max_childrenPHP-FPM 进程数) × memory_limit ≤ 可用 PHP 总内存
示例:2G 内存,可用 PHP 总内存约 1.4G,设 memory_limit = 256M,则 max_children ≤ 51.4G / 256M ≈ 5.5,向下取整)
## 四、常见问题排查(FAQ
### Q1:上传大文件时进度条卡住或直接失败?
可能原因:
(1)Web 服务器层限制未调大(client_max_body_size 等)
2PHP max_input_time / max_execution_time 过小
(3)临时目录空间不足(upload_tmp_dir
### Q2:小文件能传,大文件就失败?
排查方向:
(1)检查是否触发了 Web 服务器的 client_max_body_size
2)检查 PHP memory_limit 是否过小(尤其处理图片时)
### Q3:为什么 Discuz 后台显示的最大附件和 php.ini 不一样?
原因:Discuz 会取 upload_max_filesize、post_max_size、memory_limit 中的最小值作为建议上限。若 memory_limit 较小,会直接显示为附件限制。
## 五、安全建议
(1)限制附件类型:避免上传 php、sh、exe 等可执行文件
2)开启病毒扫描(如有条件)
(3)定期清理临时目录:/tmp 或 upload_tmp_dir
(4)监控磁盘空间:附件目录和临时目录需预留足够空间
## 六、附录:常用命令速查
Linux 下查看 PHP 配置
php -i | grep upload_max
php -i | grep post_max
php -i | grep memory_limit
修改 php.ini 后重载服务
#Nginx + PHP-FPM
sudo systemctl restart php-fpm
sudo systemctl reload nginx
#Apache
sudo systemctl restart httpd
查找实际使用的 php.ini 位置
php -i | grep "Loaded Configuration File"
文档结束 — 建议在修改任何配置前,先创建服务器快照或备份配置文件,以便快速回滚。
@@ -0,0 +1,108 @@
# Discuz!头像无法显示(403 Forbidden)排查文档
问题现象:Discuz!论坛会员排行或用户头像位置显示裂图,直接访问头像地址(如 uc_server/avatar.php 或 data/avatar/noavatar.svg)返回 403 Forbidden。
核心原因总结:这是一个由 Nginx 配置规则冲突、PHP-FPM 通信权限、文件系统权限三重问题叠加导致的综合性故障。
## 第一步:诊断访问链路
在浏览器中分别访问以下两个关键地址,观察返回结果:
A. 动态头像脚本:http://你的域名/uc_server/avatar.php?uid=1&size=small
B. 静态默认头像:http://你的域名/uc_server/data/avatar/noavatar.svg
根据返回结果,判断问题阶段:
访问A的结果 访问B的结果 问题阶段
显示PHP源代码 任意 Nginx未解析PHPPHP-FPM通信故障
301重定向到B地址 403 Forbidden PHP已正常工作,但静态文件被Nginx拦截
301重定向到B地址 200 OK 恭喜,问题已解决!
## 第二步:解决 PHP 文件被下载或显示源代码的问题
如果在第一步中访问 avatar.php 显示源代码,说明 Nginx 没有将 PHP 请求交给 PHP-FPM 处理。
### 1. 检查 PHP-FPM 服务状态
systemctl status php8.2-fpm #请将版本号替换为你自己的,如 php7.4-fpm
确保状态为 active (running)。
### 2. 检查并修复 PHP-FPM Socket 权限
查看 PHP-FPM 配置文件 pool.d/www.conf,确保以下设置未被注释且数值正确:
listen.owner = www-data
listen.group = www-data
listen.mode = 0666 #必须为 0666,确保Nginx用户有权限写入
修改配置后,必须重启 PHP-FPM:
sudo systemctl restart php8.2-fpm
验证 Socket 文件权限是否为 srw-rw-rw-
ls -la /run/php/php8.2-fpm.sock
### 3. 检查 Nginx 配置文件中的 PHP 处理块
确保 location ~ \.php$ 块配置正确且未被其他规则覆盖。一个最小化的正确配置如下:
```nginx
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock; #或 127.0.0.1:9000
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
```
## 第三步:解决静态文件(头像图片/SVG)被 Nginx 拦截的问题
如果在第一步中访问 avatar.php 已能正常返回 301,但重定向后的静态文件地址返回 403,说明问题出在 Nginx 的静态文件访问规则上。
### 1. 检查文件及父目录权限
bash
#检查目标文件权限 (应为 644)
ls -l /var/www/你的目录/uc_server/data/avatar/noavatar.svg
#检查各级父目录权限 (应为 755)
ls -ld /var/www/你的目录/uc_server/
ls -ld /var/www/你的目录/uc_server/data/
ls -ld /var/www/你的目录/uc_server/data/avatar/
如果权限不对,使用 chmod 和 chown 进行修正。
### 2. 核心:调整 Nginx 配置规则的顺序与精确度
Nginx 配置中规则的顺序和优先级至关重要。以下是经过验证的正确配置顺序(这是解决问题的关键):
```nginx
server {
listen 80;
server_name 你的域名;
root /var/www/你的目录;
index index.php index.html;
#1. 最高优先级:精确匹配 avatar.php (确保它不被任何其他PHP规则误伤)
location = /uc_server/avatar.php {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
#2. 次高优先级:开放头像静态文件目录 (使用 ^~ 提高优先级)
location ^~ /uc_server/data/avatar/ {
expires 30d;
add_header Cache-Control "public";
try_files $uri =404;
}
#3. 通用PHP处理规则 (处理其他所有.php文件)
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
#4. 安全规则:保护敏感目录 (必须放在开放规则之后)
location ~ /(config|data)/ {
deny all;
}
#5. 保护 uc_server 下其他PHP文件 (排除已精确匹配的 avatar.php)
location ~ ^/uc_server/(?!avatar\.php).*\.php$ {
deny all;
}
#6. 保护 uc_server/data/ 下除 avatar/ 外的其他目录
location ~ ^/uc_server/data/(?!avatar/) {
deny all;
}
#... 其他配置 (静态文件缓存等) ...
}
```
### 3. 应用配置并验证
每次修改 Nginx 配置后,务必进行测试和重载:
bash
sudo nginx -t #测试配置语法
sudo systemctl reload nginx #或 restart,使配置生效
## 第四步:最终验证
再次执行第一步的访问测试,如果两者都返回正常(301 + 200),则问题彻底解决。刷新论坛页面,久违的头像应该出现了。
故障排除口诀:先通PHP,再看静态,权限是基础,规则顺序定乾坤。 希望这份文档能帮你彻底告别这个天坑!
@@ -0,0 +1,321 @@
# Nginx + XrayReliability)多域名共用443端口完美解决方案
为了更好的伪装,且本身有两个网站要使用,所以就弄了这么一个东西,最终就是两个网站和Xray都使用443端口,流量监测的时候代理的流量被伪装成了正常的TSL,没有问题,这个是基础功能。如果主动探测,代理域名,不是客户端访问引导到正常更新使用的博客上。
在这篇文章前,使用的Xray在前,使用Xray的回落机制+分流实现。不过会该方案有严重的串站问题。最后定了下面的方案,Nginx在前通过串流,原封不动的将代理域名的信息转给Xray。
## 一、需求背景与最终架构
### 1.1 原始需求
一台服务器(Debian 12 + Nginx 1.22.1 + PHP 8.2
三个域名都使用443端口:
网站A域名:Discuz论坛(HTTPS
网站B域名:WordPress博客(HTTPS
代理域名:XRay代理(REALITY协议)
探测代理域名时能看到真实的博客内容(回落机制)
绝对不串站
### 1.2 最终架构(Nginx在前 + stream分流)
用户访问
443端口 → Nginxstream模块,读SNI不解密)
├─ SNI = 网站A域名 → 127.0.0.1:4431
├─ SNI = 网站B域名 → 127.0.0.1:4432
└─ SNI = 代理域名 → 127.0.0.1:8443
↓ ↓ ↓
Nginx http(4431) Nginx http(4432) Xray(8443)
处理论坛(HTTPS) 处理博客(HTTPS) 处理代理
回落指向博客端口(4432)
## 二、配置步骤详解
### 2.1 准备工作:SSL证书(Let's Encrypt
#安装Certbot
apt update
apt install certbot python3-certbot-nginx -y
#申请证书(包含三个域名)
certbot --nginx -d 网站A域名 -d 网站B域名 -d 代理域名
#注意:如果已有其中一个域名的证书,选择 Expand 扩展域名
#证书路径:/etc/letsencrypt/live/代理域名/
### 2.2 备份原有配置(可选)
cp /etc/nginx/conf.d/网站A.conf /etc/nginx/conf.d/网站A.conf.bak
cp /etc/nginx/conf.d/网站B.conf /etc/nginx/conf.d/网站B.conf.bak
cp /usr/local/etc/xray/config.json /usr/local/etc/xray/config.json.bak
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
### 2.3 修改Nginx主配置(添加stream模块)
编辑 /etc/nginx/nginx.conf,在文件最顶部(events块之前)添加:
```nginx
stream {
#根据SNI域名转发到不同后端
map $ssl_preread_server_name $backend {
网站A域名 127.0.0.1:4431;
网站B域名 127.0.0.1:4432;
代理域名 127.0.0.1:8443;
default 127.0.0.1:4432; #默认看博客
}
server {
listen 443 reuseport;
listen [::]:443 reuseport;
ssl_preread on;
proxy_pass $backend;
#超时设置
proxy_connect_timeout 30s;
proxy_timeout 30s;
}
}
#下面是原有的 events { ... } 和 http { ... }
events {
worker_connections 768;
#...
}
```
### 2.4 配置论坛(网站A
编辑 /etc/nginx/conf.d/网站A.conf
```nginx
server {
listen 127.0.0.1:4431 ssl;
server_name 网站A域名;
#SSL证书
ssl_certificate /etc/letsencrypt/live/代理域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/代理域名/privkey.pem;
#SSL配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
root /var/www/网站A;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param HTTPS on;
}
location ~ /\.ht {
deny all;
}
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
```
### 2.5 配置博客(网站B
编辑 /etc/nginx/conf.d/网站B.conf
```nginx
server {
listen 127.0.0.1:4432 ssl;
server_name 网站B域名;
#SSL证书(和论坛用同一个)
ssl_certificate /etc/letsencrypt/live/代理域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/代理域名/privkey.pem;
#SSL配置
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;
root /var/www/wordpress;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param HTTPS on;
}
location ~ /\.ht {
deny all;
}
client_max_body_size 128M;
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 30d;
add_header Cache-Control "public, no-transform";
}
}
```
### 2.6 配置XRay
编辑 /usr/local/etc/xray/config.json
```json
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 8443,
"listen": "127.0.0.1",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "你的uuid-1",
"flow": "xtls-rprx-vision"
},
{
"id": "你的uuid-2",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none",
"fallbacks": []
},
"streamSettings": {
"network": "raw",
"security": "reality",
"realitySettings": {
"dest": "127.0.0.1:4432", // 回落指向博客端口
"serverNames": [
"代理域名"
],
"privateKey": "你的私钥",
"shortIds": [
"你的shortId-1",
"你的shortId-2"
]
}
},
"sniffing": {
"enabled": true,
"destOverride": ["http", "tls"]
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
},
{
"protocol": "blackhole",
"tag": "block"
}
]
}
```
### 2.7 重载服务
nginx -t && systemctl reload nginx
xray -test -config /usr/local/etc/xray/config.json
systemctl restart xray
## 三、踩坑记录与解决方案
### 坑1:证书申请时提示找不到代理域名的server_name
现象:
text
Could not automatically find a matching server block for 代理域名
原因:代理域名由XRay处理,Nginx中没有对应的server块
解决方案:
bash
#临时创建一个代理域名的Nginx配置
```
cat > /etc/nginx/conf.d/代理域名.temp.conf << EOF
server {
listen 80;
server_name 代理域名;
root /var/www/html;
}
EOF
```
nginx -t && systemctl reload nginx
certbot install --cert-name 代理域名
rm /etc/nginx/conf.d/代理域名.temp.conf
### 坑2:XRay回落配置错误导致循环
现象:curl测试代理域名时报错 SSL_ERROR_SYSCALL
原因:XRay配置中dest写成了域名网站B域名:443,导致流量循环
解决方案:改为直接指向博客的本地端口
json
"dest": "127.0.0.1:4432"
### 坑3:浏览器测试时串站(先打开论坛,后面全变论坛)
现象:同一个浏览器中,先访问网站A,再开新标签页访问网站B,显示论坛内容
原因:HTTP/2的连接合并(coalescing)特性,三个域名共用同一IP和证书,浏览器复用连接
解决方案:在网站配置中禁用HTTP/2
nginx
#将 listen 127.0.0.1:4431 ssl http2; 改为
listen 127.0.0.1:4431 ssl;
验证:禁用后感觉不到速度差异,问题彻底解决
### 坑4:论坛友情链接跳转也串站
现象:从论坛点击友情链接到博客,显示论坛内容
原因:同坑3,同一标签页内跳转复用了连接
解决方案:同坑3,禁用HTTP/2后解决
### 坑5reuseport参数导致分流异常(偶发)
现象:偶尔出现分流错误,重启Nginx后恢复
原因:某些内核版本中reuseport与ssl_preread共用可能异常
解决方案:去掉reuseport参数(本案例最终保留,但遇到问题时可去掉)
## 四、验证命令汇总
### 4.1 验证Nginx配置
nginx -t
nginx -T | grep -A 20 -B 5 "stream {"
### 4.2 验证stream分流
#测试论坛(每次新建连接)
curl -k --no-keepalive https://网站A域名 --resolve 网站A域名:443:127.0.0.1 | grep -o "<title>.*</title>"
#测试博客
curl -k --no-keepalive https://网站B域名 --resolve 网站B域名:443:127.0.0.1 | grep -o "<title>.*</title>"
#测试代理域名(应返回博客内容)
curl -k --no-keepalive https://代理域名 --resolve 代理域名:443:127.0.0.1 | grep -o "<title>.*</title>"
### 4.3 验证XRay
systemctl status xray
ss -tlnp | grep 8443
xray -test -config /usr/local/etc/xray/config.json
### 4.4 验证证书自动续期
bash
systemctl list-timers | grep certbot
certbot renew --dry-run
## 五、客户端配置(XRay
##5.1 连接信息
参数 值
地址 代理域名
端口 443
协议 VLESS
UUID 你的uuid
Flow xtls-rprx-vision
加密 none
安全 reality
serverName 代理域名
publicKey 你的公钥
shortId 你的shortId
dest 网站B域名:443(客户端不需要配置,这是服务端回落目标)
## 六、最终状态确认
组件 状态 验证方式
论坛 HTTPS ✅ 正常 浏览器访问 https://网站A域名
博客 HTTPS ✅ 正常 浏览器访问 https://网站B域名
代理域名回落 ✅ 正常 浏览器访问 https://代理域名 看到博客
XRay代理 ✅ 正常 客户端连接测试
证书续期 ✅ 自动 systemctl list-timers | grep certbot
串站问题 ✅ 解决 不同浏览器同时访问三个域名均正确
+194
View File
@@ -0,0 +1,194 @@
# Openwrt系统盘扩容方法
## 1 条件和定义
Openwrt版本:24.10.5(据说是目前最新的稳定版)
金士顿NVME M2 512G硬盘:在系统中的名字为nvme0n1(文中都以这个出现,请自行换成你的硬盘名字)
U盘:大于1G
## 2 背景说明
最近有一个需求需要用到软路由,之前用iStoreOS,其实也是基于Openwrt做的,你可以认为就像小米的MIUI一样,基于安卓做的。我写文章前又装了一边,发现开机跑的代码都差不多。小白或不想折腾的建议去看看iStoreOS,真心话好用的多。Openwrt像以前的安卓,想折腾的来。iStoreOS像苹果,没太多折腾的。去iStoreOS的网站你会发现他的版本和Openwrt是一致的。所以Openwrt有的,iStoreOS也有。好了不扯闲篇直入主题。
## 3 吐槽
其实这个过程是自己看了网上的一些教程,我说真的,既然要写就好好写,写个半吊子,让人看的云里雾里的。最后没办法求助Deepseek和豆包,结果这两货每次胸脯拍的叭叭响,结果全是问题。最后好在我自己还是搞定了,下面就说一下关于Openwrt扩容的问题。
## 4 大前提
大前提就是不要试图在系统运行中的硬盘上扩容,什么意思呢?比如你有一块512G的硬盘,但是安装完后实际只有126MB被使用,剩下的都浪费了。那么这会你要扩容就两个方向,第一扩展系统盘,第二扩展为数据盘。扩展数据盘相对简单一点,虽然我没做,但是你可以想象,你在扩容的过程没有操作系统正在使用的部分,这样就像我刚开始说的,并没有在系统运行的硬盘上扩容。这话有点怪,看了下面就知道了。另一种就是扩展系统盘,这下好了,就是要在正在运行的分区上进行操作,一个字难。就这个破事儿我折腾了整整一天。其实道理也很简单,你要在windows的C进行操作也很难,你可以试试,只要你想操作就会提示你进PE去干,为什么呢——因为系统盘空闲了。
## 5 操作步骤
首先将要安装系统的硬盘的分区全部删除后再进来安装,这个步骤怎么弄都可以,PE、外置U盘,反正方法多的很,这里就不赘述了。
### 5.1 准备工作
大于1T的U盘,去Openwrt的官网或者阿里镜像站下载你需要的系统文件,具体下载哪个看你自己。
下载完后,使用Rufus将镜像装在U盘。这里注意一下,我被坑了一下,就是刚开始都是对的,直接烧下载的文件,就是后缀名为.gz的原始下载文件。我搞的时候后面估计是整晕了跑去解压缩成img烧写,然后就无法启动了。
### 5.2 安装系统
#使用制作好的U盘,在bios中设置U盘启动,进入命令行后,这会可以先装系统,也可以先改IP从而使用ssh操作。建议先改IP,用ssh操作,毕竟可以粘贴复制,比自己手敲命令行快多了。
#配置网络
#查看所有网络接口
ip addr show
#或者用OpenWrt专用的查看命令
uci show network
#查看当前LAN口的配置
uci show network.lan
#修改IP地址为局域网的网段(假设是192.168.8.0/24
uci set network.lan.ipaddr='192.168.8.250' #改成你想要的固定IP
#修改子网掩码(一般就是255.255.255.0
uci set network.lan.netmask='255.255.255.0'
#设置网关(你公司主路由的IP,一般是192.168.8.1
uci set network.lan.gateway='192.168.8.1'
#添加DNS服务器(可选,但推荐)
uci set network.lan.dns='114.114.114.114 223.5.5.5'
#提交修改
uci commit network
#重启网络
/etc/init.d/network restart
#现在你就可以使用ssh,连接到系统了。
#通过下面命令看看硬盘分区情况,其实就是看看你的硬盘叫啥
cat /proc/partitions
#安装系统到硬盘
dd if=/dev/sdb of=/dev/nvme0n1 bs=4M
#sdb是现在U盘系统名字,nvme0n1是要安装的硬盘名字,通过前面命令可以看到。这个命令下去是没有进度条的,时间根据你的U盘决定,最多一分钟,你看要是还没回到命令行就ctrl+c就可以返回了。
#同步一下
sync
#这里千万不要重启了,重启了更难搞,其实根据后面的操作,感觉重启了还是在U盘系统还是可以的,但是一旦是进了硬盘的系统太难太难
#看看分区硬盘是否正常(结果肯定不正常)
df -h
#可以看到你的硬盘只有126MB了,接下来就要扩容了。
### 5.3 硬盘扩容
#这里的扩容就是把剩余的硬盘空间扩展到系统盘上
#安装工具
opkg update && opkg install parted resize2fs
#开始扩容,输入以下命令:
parted /dev/nvme0n1 resizepart 2 100%
#这里会出现一个Error: The backup GPT table is corrupt, but the primary appears OK, so that will de used
OK/Cancel?
#输入ok回车
#接着又会出现:Not all of the space available to /dev/nvme0n1 appears to be used, you can fix the GPT to use all of the space (an extra 7897897897)
Fix/Ignore?
#输入fix回车
#接下来又来一个Partition number?
#这里输入2回车(其实就是第二个硬盘分区,也就是系统盘)
#马上又是End[126MB]
#这里输入100%回车(第一次我啥也没输入就回车,然后就悲剧了)
#最后输入quit可以退出,不过我这边是直接退出的。
#在线扩容文件系统(关键一步)
#输入以下命令
resize2fs /dev/nvme0n1p2
#这里会有一个提示“Please run 'e2fsck -f /dev/nvme0n1p2' first.”就是让你先检查以下,没什么好说的,照做:
e2fsck -f /dev/nvme0n1p2
#中间会有三个是否修复的提示,都输入Y回车。
Free blocks count wrong (18634, counted=18641).
Fix<y>? yes
Free inodes count wrong (5075, counted=5080).
Fix<y>? yes
Padding at end of inode bitmap is not set. Fix<y>? yes
#接着再重新扩展(所以可以进行e2fsck)
resize2fs /dev/nvme0n1p2
#第二次复盘的时候是下面的提示(第一次是什么忘记了)
root@OpenWrt:~#resize2fs /dev/nvme0n1p2
resize2fs 1.47.0 (5-Feb-2023)
Resizing the filesystem on /dev/nvme0n1p2 to 122092481 (4k) blocks.
The filesystem on /dev/nvme0n1p2 is now 122092481 (4k) blocks long.
#这个提示实际就是已经扩展到465G的样子,其实就已经成功了。不过由于第一次上面输入100%那个地方我输入回车了,也就是以126MB处结束,说白了就是一点都没动,所以失败了。
#接着用df -h查看,还是104M(不用管?不是,因为你看到的还是U盘的)
#查看是否扩容成功
#输入
parted /dev/nvme0n1
#输入print,看看情况(下面是第一次的结果)
Number Start End Size File system Name Flags
3 17.4kB 262kB 245kB bios_grub
1 262kB 17.0MB 16.8MB fat16 legacy_boot
2 17.0MB 126MB 109MB ext4
#这里17.0MB是个关键数字,意思是从17.0MB之后就是你要扩展的分区的开始位置。
#下面是第二次复盘的结果
Number Start End Size File system Name Flags
3 17.4kB 262kB 245kB bios_grub
1 262kB 17.0MB 16.8MB fat16 legacy_boot
2 17.0MB 500GB 500GB ext4
#这个结果是对的,所以下面的删除旧分区,新建新分区可以不用了,直接到通知内核更新分区表(第二次测试直接到了#验证分区大小已更新lsblk /dev/nvme0n1p2
而第一次搞得就是还得再来一次,结果又引出得别得问题,下面细说。
#下面是针对第一次扩容失败后的操作
#删除旧分区 2(放心,数据不会丢,只是重划边界)
(parted) rm 2
#新建根分区 2(占满剩余所有空间)
mkpart primary ext4 17.0MB 100%
#17.0MB 是你当前 EFI 分区的结束位置(从上面 print 里抄)
#100% 表示用满剩下所有磁盘空间
#接下来会有一个警告,如下:
Warning: The resulting partition is not properly aligned for best performance: 33280s % 2048s != 0s
Ignore/Cancel? Ignore
#选择Ignore
#退出
(parted) quit
#然后出现了下面的提示,意思就是让你刷新以下
Information: You may need to update /etc/fstab.
#通知内核更新分区表
partprobe /dev/nvme0n1
#验证分区大小已更新
lsblk /dev/nvme0n1p2
#这里会提示没有lsblk这个命令,用opkg install lsblk安装一下,安装完后再用上面的命令看看
#这里应该显示 465G 了。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
nvme0n1p2 259:2 0 465.7G 0 part
#上面看着对了之后就可以继续扩容文件系统
resize2fs /dev/nvme0n1p2
#最终验证
df -h
#结果如下:(这个是废话,因为还在U盘系统里面)
Filesystem Size Used Available Use% Mounted on
/dev/root 98.3M 27.5M 68.7M 29% /
tmpfs 3.8G 1.2M 3.8G 0% /tmp
/dev/sda1 16.0M 6.3M 9.7M 39% /boot
/dev/sda1 16.0M 6.3M 9.7M 39% /boot
tmpfs 512.0K 0 512.0K 0% /dev
#下面部分才能真正验证,看到下面结果就是好了
root@OpenWrt:~#mkdir /mnt/nvme
root@OpenWrt:~#mount /dev/nvme0n1p2 /mnt/nvme
root@OpenWrt:~#df -h /mnt/nvme
Filesystem Size Used Available Use% Mounted on
/dev/nvme0n1p2 459.8G 25.5M 459.8G 0% /mnt/nvme
#重启,记得拔掉U盘,我第一次就是忘记拔掉,回来看还是不对
Reboot
#再次进入系统之后使用df -h查看就对了。
#以下内容是因为第一次使用“删除旧分区 2 (parted) rm 2”这一块的操作导致了grub.cfg不对引起的。第二次复盘的时候没有出现,直接进系统了。
#第一次看到扩容的地方正确了,开心啊,就reboot重启了,结果不出意外的又出意外了,重启进不了系统。但是可以看到grub菜单,并且还跑了一会代码,那么就意味着引导程序没有问题,有问题的是引导的内容不对。
这里要感谢自己前端时间搞得Windows时光机,有兴趣可以在我的博客上看到,一台电脑从Win98到Win11,一共装了十几个系统,最后的引导管理就是用Grub4Dos来做,虽然不是Openwrt用的Grub2,但是很接近的。所以就是要改这个Grub2的配置文件。的这里推荐最简单的方案,进PE,在PE里面改。
#用记事本打开 grub.cfg(这个东西路径就在16MB那个盘上,忘记是在boot文件夹还是efi文件夹了,找一下吧,这文件是唯一的,好找)。
看到root=UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx或者root=/dev/sda2这种的时候直接改成以下内容:
root=/dev/nvme0n1p2(这个根据你的硬盘描述来)
#改完之后保存,重启
#我用的微PE,然后用DG将文件拷贝出来修改,结果拷贝回去说我这个版本好像基础版不得行。当时郁闷的很。不过仔细找了一下 有一个叫显示分区的工具,打开,然后Linux的硬盘分区也出来了。嗯,后面大大方方的复制替换就可以了。
@重启之后
df -h
成功了!
+94
View File
@@ -0,0 +1,94 @@
# REALITY 从零到一极简配置手册
适用场景:VLESS + REALITY + 无回落
服务器:Debian12
## 第一步:安装 Xray
方法1
curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh | bash -s install
方法2
#下载脚本
curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh -o install.sh
#添加执行权限
chmod +x install.sh
#执行安装
./install.sh install
## 第二步:生成参数
#生成密钥对(只需一次)
xray x25519
#记录 Private key 和 Public key
#生成 UUID(每人一个)
xray uuid
#生成 shortId(每人一个)
openssl rand -hex 8
## 第三步:配置 Xray
编辑 /usr/local/etc/xray/config.json
```json
{
"log": {
"loglevel": "warning"
},
"inbounds": [
{
"port": 443,
"protocol": "vless",
"settings": {
"clients": [
{ "id": "你的UUID-1", "flow": "xtls-rprx-vision" },
{ "id": "你的UUID-2", "flow": "xtls-rprx-vision" }
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"dest": "www.bilibili.com:443",
"serverNames": [
"www.bilibili.com",
"tyo.hayashiei.top"
],
"privateKey": "你的Private Key",
"shortIds": [
"你的shortId-1",
"你的shortId-2"
]
}
}
}
],
"outbounds": [
{
"protocol": "freedom",
"tag": "direct"
}
]
}
```
关键点:
• dest:伪装目标
• serverNames:必须同时包含伪装目标和你自己的域名
• shortIds 和 clients 数量对应,但无需一一配对
## 第四步:启动 Xray
systemctl enable xray
systemctl restart xray
systemctl status xray
## 第五步:客户端链接
将下面链接中的占位符替换成你的信息:
vless://你的UUID@你的服务器IP:443?encryption=none&flow=xtls-rprx-vision&security=reality&sni=tyo.hayashiei.top&fp=chrome&pbk=你的PublicKey&sid=你的shortId&type=tcp&headerType=none#REALITY_节点名
导入方式:
小火箭/v2rayN/Hiddify:复制链接 → 打开 App → 自动弹窗导入
手动配置:按表格填好类型、地址、端口、UUID、流控、传输、安全、SNI、公钥、shortId
## 第六步:享受成果
手机电脑同时在线 ✅
朋友一键导入 ✅
GFW 看到你在刷 B站 ✅
不用证书、不用续期、不用回落 ✅
+84
View File
@@ -0,0 +1,84 @@
# Trojan完整安装教程
## 基本信息
你的信息
域名:osaka.hayashiei.top
IP64.176.55.223
密码:Hayashi2026
端口:443
## 一、重装系统后第一步:放行端口(必须最先做)
运行
ufw allow 80/tcp
ufw allow 443/tcp
ufw reload
## 二、申请 SSL 证书(必须放行端口后再做)
运行
apt update && apt install certbot -y
运行
certbot certonly --standalone -d osaka.hayashiei.top --email test@example.com --agree-tos --no-eff-email
出现成功提示即可继续。
## 三、安装 Nginx(伪装网站用)
运行
apt install nginx -y
systemctl stop nginx
## 四、安装 Trojan
运行
bash <(curl -sL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)
##五、写入最终配置
运行
```
cat > /usr/local/etc/trojan/config.json << 'EOF'
{
"run_type": "server",
"local_addr": "0.0.0.0",
"local_port": 443,
"remote_addr": "127.0.0.1",
"remote_port": 80,
"password": [
"Hayashi2026"
],
"ssl": {
"cert": "/etc/letsencrypt/live/osaka.hayashiei.top/fullchain.pem",
"key": "/etc/letsencrypt/live/osaka.hayashiei.top/privkey.pem",
"alpn": [
"h2",
"http/1.1"
],
"reuse_session": true,
"session_ticket": false
},
"tcp": {
"no_delay": true,
"keep_alive": true
}
}
EOF
```
## 六、启动 Trojan
运行
systemctl enable trojan
systemctl restart trojan
## 七、客户端连接配置
连接信息
类型:Trojan
服务器:osaka.hayashiei.top
端口:443
密码:Hayashi2026
TLS:开启
跳过证书校验:关闭
支持的客户端
WindowsTrojan-Qt5
AndroidIgniter
iOSShadowrocket、Trojan
## 八、验证是否运行成功
运行
systemctl status trojan
出现 active (running) 就是成功。
+232
View File
@@ -0,0 +1,232 @@
# WordPress网站迁移+Xray代理部署
整个流程分为两大阶段:
第一阶段:网站迁移 (从阿里云到腾讯云)
第二阶段:高级部署 (在同一台服务器上,为博客网站和Xray代理配置双域名分流)
## 第一阶段:网站迁移 (阿里云 → 腾讯云)
目标: 将阿里云上的 WordPress 博客(域名 blog.hayashiei.top)完整迁移至腾讯云新服务器(新域名 jp.hayashiei.top)。
### 步骤 1:在阿里云源服务器上进行完整备份
#### (1)创建备份目录并定位网站文件
mkdir -p ~/blog-backup
cd /var/www
(根据你的实际情况,你的博客文件在 /var/www/wordpress)
#### 2)打包网站文件
bash
tar -czvf ~/blog-backup/wordpress_files.tar.gz wordpress/
#### 3)备份数据库
先找出 WordPress 使用的数据库名:
grep DB_NAME /var/www/wordpress/wp-config.php
导出数据库(假设数据库名为 wp_tyo):
mysqldump -u root -p wp_tyo > ~/blog-backup/wp_tyo.sql
#### 4)备份 Nginx 配置文件
cp /etc/nginx/conf.d/blog.conf ~/blog-backup/
#### 5)打包所有备份文件
cd ~
tar -czvf blog_hayashiei_backup.tar.gz blog-backup/
### 步骤 2:将备份包传输到腾讯云目标服务器
在阿里云服务器上执行(替换 你的腾讯云IP):
scp ~/blog_hayashiei_backup.tar.gz root@你的腾讯云IP:~/
### 步骤 3:在腾讯云目标服务器上恢复网站
#### (1)登录腾讯云服务器并解压备份包
ssh root@你的腾讯云IP
tar -xzvf blog_hayashiei_backup.tar.gz
cd blog-backup
#### (2)安装与源服务器一致的环境 (Nginx 1.22, PHP 8.2, MariaDB)
apt update
apt install -y nginx php8.2 php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip mariadb-server
#### 3)恢复网站文件
mkdir -p /var/www
tar -xzvf wordpress_files.tar.gz -C /var/www/
#### 4)设置正确的文件权限
chown -R www-data:www-data /var/www/wordpress/
find /var/www/wordpress/ -type d -exec chmod 755 {} \;
find /var/www/wordpress/ -type f -exec chmod 644 {} \;
#### 5)恢复数据库
从 wp-config.php 中提取数据库信息:
grep -E "DB_NAME|DB_USER|DB_PASSWORD" /var/www/wordpress/wp-config.php
根据提取的信息,在 MariaDB 中创建相同的数据库和用户(以下为示例):
```
sql
mysql -u root -p
CREATE DATABASE wp_tyo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'wp_tyo'@'localhost' IDENTIFIED BY '你的密码';
GRANT ALL PRIVILEGES ON wp_tyo.* TO 'wp_tyo'@'localhost';
FLUSH PRIVILEGES;
EXIT;
```
导入数据:
mysql -u root -p wp_tyo < wp_tyo.sql
#### 6)配置 Nginx 以使用新域名 jp.hayashiei.top
创建新的 Nginx 配置文件 /etc/nginx/conf.d/blog.conf,内容如下:
```nginx
server {
listen 80;
listen [::]:80;
server_name jp.hayashiei.top;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name jp.hayashiei.top;
root /var/www/wordpress;
index index.php index.html;
ssl_certificate /etc/letsencrypt/live/jp.hayashiei.top/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jp.hayashiei.top/privkey.pem;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
```
#### 7)申请 SSL 证书
apt install -y certbot python3-certbot-nginx
certbot --nginx -d jp.hayashiei.top
#### 8)修改 WordPress 配置中的域名
编辑 /var/www/wordpress/wp-config.php,将 WP_HOME 和 WP_SITEURL 改为新域名(如果存在):
php
define('WP_HOME', 'https://jp.hayashiei.top');
define('WP_SITEURL', 'https://jp.hayashiei.top');
#### 9)重启服务并测试
systemctl restart nginx php8.2-fpm
curl -k https://jp.hayashiei.top
此时,你应该能看到博客网站的内容。至此,网站迁移完成。
## 第二阶段:高级部署 (配置双域名分流:博客 + Xray)
目标: 在同一台腾讯云服务器上,让 jp.hayashiei.top 继续作为博客网站,同时新增一个域名 jpx.hayashiei.top 作为Xray代理入口,Nginx 在前端根据域名进行分流。
### 步骤 1:修改博客 Nginx 配置 (监听本地端口)
为了让 Nginx 的 stream 模块接管公网的 443 端口,我们需要将博客的配置改为只监听本地。
#### 1)编辑博客配置文件 /etc/nginx/conf.d/blog.conf,将 listen 指令修改为:
```nginx
server {
listen 127.0.0.1:8443 ssl http2;
listen [::1]:8443 ssl http2;
server_name jp.hayashiei.top;
#... 其他配置(包括 SSL 证书路径)保持不变 ...
}
```
(关键:删除了 listen 443 ssl;,改为只监听本地的 8443 端口)
### 步骤 2:配置 Nginx Stream 模块进行四层分流
#### 1)编辑主配置文件 /etc/nginx/nginx.conf
在 http 块之前添加 stream 配置。
(如果你的 nginx.conf 中没有 stream 模块的加载指令,请确保它已启用,例如通过 include /etc/nginx/modules-enabled/*.conf;)
在 events 块之后、http 块之前,加入以下 stream 配置:
```nginx
stream {
#根据 TLS 握手时的 SNI 域名决定后端服务器
map $ssl_preread_server_name $backend {
jp.hayashiei.top 127.0.0.1:8443; #博客网站
jpx.hayashiei.top 127.0.0.1:1443; #Xray 代理
default 127.0.0.1:8443; #默认走博客
}
server {
listen 443 reuseport;
listen [::]:443 reuseport;
ssl_preread on; #必须开启,才能读取 SNI 信息
proxy_pass $backend; #根据 map 的结果进行转发
}
}
```
#### 2)测试配置并重启 Nginx
nginx -t
systemctl restart nginx
### 步骤 3:配置 Xray (监听本地端口,使用 Reality 协议)
#### 1)安装 Xray (如果尚未安装)
bash -c "$(curl -L https://github.com/XTLS/Xray-install/raw/main/install-release.sh)" @ install
#### 2)生成必要参数
#生成 UUID (用于客户端连接)
xray uuid
#生成 Reality 密钥对
xray x25519
#生成 Short ID (可选,建议使用)
openssl rand -hex 8
#### 3)配置 Xray 编辑 /usr/local/etc/xray/config.json,填入以下内容(替换所有占位符):
```json
{
"log": { "loglevel": "warning" },
"inbounds": [
{
"port": 1443,
"listen": "127.0.0.1",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "你的-UUID-1",
"flow": "xtls-rprx-vision"
},
{
"id": "你的-UUID-2",
"flow": "xtls-rprx-vision"
}
],
"decryption": "none"
},
"streamSettings": {
"network": "tcp",
"security": "reality",
"realitySettings": {
"dest": "microsoft.com:443",
"serverNames": [
"microsoft.com",
"www.microsoft.com"
],
"privateKey": "你的-Private-Key",
"shortIds": [
"你的-Short-ID-1",
"你的-Short-ID-2"
]
}
}
}
],
"outbounds": [ { "protocol": "freedom" } ]
}
```
(关键:监听 127.0.0.1:1443dest 指向一个真实的外部网站如 microsoft.com)
#### 4)启动 Xray
systemctl start xray
systemctl enable xray
### 步骤 4:域名解析与最终验证
#### (1)DNS 解析:在域名管理后台,确保两个域名都解析到你的腾讯云服务器 IP 43.163.236.29。
jp.hayashiei.top → 43.163.236.29
jpx.hayashiei.top → 43.163.236.29
#### 2)验证博客网站
curl -k https://jp.hayashiei.top | head -20
应返回博客的 HTML 内容。
#### 3)验证代理端口转发
curl -k https://jpx.hayashiei.top
应返回 400 Bad Request (这是 Xray 对非代理请求的标准回应),说明请求已成功从 jpx.hayashiei.top:443 经由 Nginx 转发给了 Xray。
#### (4)客户端配置 (以你最终成功的配置为准)
地址:jpx.hayashiei.top
端口:443
协议:vless
UUID:你的-UUID
Flowxtls-rprx-vision
Encryptionnone
Securityreality
PublicKey:你的-Public-Key
Short ID:你的-Short-ID
SNIjp.hayashiei.top #关键:伪装成你的博客域名
Fingerprintchrome
## 后记与排错要点
1Nginx -t 的局限性:nginx -t 只能检查语法错误,无法检查 map 指令中的域名是否写对、后端服务是否存活。
(2)模块加载:如果 stream 配置报错,请确认 Nginx 已安装并加载了 stream 模块 (nginx -V 2>&1 | grep stream)。
(3)端口监听:务必用 ss -tlnp | grep -E ":443|:8443|:1443" 确认端口监听状态正确:443 由 Nginx 监听,8443 由 Nginx 监听,1443 由 Xray 监听。
(4)客户端配置:客户端对分享链接的解析严格程度不同。如果导入链接失败,请手动检查并补全所有参数,特别是 type=tcp 和 headerType=none 这类有默认值的参数。
+97
View File
@@ -0,0 +1,97 @@
# WordPress网站迁移记录
目标: 将阿里云上的 WordPress 博客(域名 blog.hayashiei.top)完整迁移至腾讯云新服务器(新域名 jp.hayashiei.top)。
## 步骤 1:在阿里云源服务器上进行完整备份
1. 创建备份目录并定位网站文件
mkdir -p ~/blog-backup
cd /var/www
(根据你的实际情况,你的博客文件在 /var/www/wordpress)
2. 打包网站文件
tar -czvf ~/blog-backup/wordpress_files.tar.gz wordpress/
• 备份数据库
先找出 WordPress 使用的数据库名:
grep DB_NAME /var/www/wordpress/wp-config.php
导出数据库(假设数据库名为 wp_tyo):
mysqldump -u root -p wp_tyo > ~/blog-backup/wp_tyo.sql
4. 备份 Nginx 配置文件
cp /etc/nginx/conf.d/blog.conf ~/blog-backup/
5. 打包所有备份文件
cd ~
tar -czvf blog_hayashiei_backup.tar.gz blog-backup/
## 步骤 2:将备份包传输到腾讯云目标服务器
在阿里云服务器上执行(替换 你的腾讯云IP):
scp ~/blog_hayashiei_backup.tar.gz root@你的腾讯云IP:~/
## 步骤 3:在腾讯云目标服务器上恢复网站
### 1. 登录腾讯云服务器并解压备份包
ssh root@你的腾讯云IP
tar -xzvf blog_hayashiei_backup.tar.gz
cd blog-backup
### 2. 安装与源服务器一致的环境 (Nginx 1.22, PHP 8.2, MariaDB)
bash
apt update
apt install -y nginx php8.2 php8.2-fpm php8.2-mysql php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip mariadb-server
### 3. 恢复网站文件
mkdir -p /var/www
tar -xzvf wordpress_files.tar.gz -C /var/www/
### 4. 设置正确的文件权限
chown -R www-data:www-data /var/www/wordpress/
find /var/www/wordpress/ -type d -exec chmod 755 {} \;
find /var/www/wordpress/ -type f -exec chmod 644 {} \;
### 5. 恢复数据库
从 wp-config.php 中提取数据库信息:
grep -E “DB_NAME|DB_USER|DB_PASSWORD” /var/www/wordpress/wp-config.php
根据提取的信息,在 MariaDB 中创建相同的数据库和用户(以下为示例):
```
sql
mysql -u root -p
CREATE DATABASE wp_tyo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER wp_tyo@localhost IDENTIFIED BY ‘你的密码’;
GRANT ALL PRIVILEGES ON wp_tyo.* TO wp_tyo@localhost;
FLUSH PRIVILEGES;
EXIT;
```
导入数据:
mysql -u root -p wp_tyo < wp_tyo.sql
### 6. 配置 Nginx 以使用新域名 jp.hayashiei.top
创建新的 Nginx 配置文件 /etc/nginx/conf.d/blog.conf,内容如下:
```nginx
server {
listen 80;
listen [::]:80;
server_name jp.hayashiei.top;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name jp.hayashiei.top;
root /var/www/wordpress;
index index.php index.html;
ssl_certificate /etc/letsencrypt/live/jp.hayashiei.top/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jp.hayashiei.top/privkey.pem;
location / {
try_files $uri $uri/ /index.php?$args;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.2-fpm.sock;
}
}
```
### 7. 申请 SSL 证书
apt install -y certbot python3-certbot-nginx
certbot nginx -d jp.hayashiei.top
### 8. 修改 WordPress 配置中的域名
编辑 /var/www/wordpress/wp-config.php,将 WP_HOME 和 WP_SITEURL 改为新域名(如果存在):
php
define(WP_HOME, https://jp.hayashiei.top);
define(WP_SITEURL, https://jp.hayashiei.top);
### 9. 重启服务并测试
systemctl restart nginx php8.2-fpm
curl -k https://jp.hayashiei.top
此时,你应该能看到博客网站的内容。至此,网站迁移完成。
@@ -0,0 +1,134 @@
# iStoreOS+WireGuard异地组网配置手册
家庭端(服务端) + 公司端(客户端)+ 手机移动端接入
适用场景:两个 iStoreOS 路由器通过 WireGuard 组建虚拟局域网,实现内网互访,并支持手机客户端接入。
首先要说iStore是基于Openwrt做的,但是说实话要比Openwrt好用多了,当然可能运行起来资源占用会大一点,但是who care?在Opwnwrt上很多比较麻烦的问题,iStoreOS上都没有。所以我还是很愿意安利大家用这个的!
下面正式说整个搭建流程和注意事项!
## 一、网络拓扑与规划
家庭端(服务端),设备iStoreOS(主路由),内网网段192.168.1.0/24VPN接口IP10.0.0.1/32,有公网动态IP,域名wireguard.yousuke.net。
家庭端(客户端),设备iStoreOS(二级路由),内网网段192.168.3.0/24VPN接口IP10.0.0.2/32,无公网动态IP。
公司端上级网络,设备烽火CPE(主路由,内网网段)192.168.3.0/24,无公网动态IP。
手机端(客户端),VPN接口IP10.0.0.3/32,通过家庭段接入。
## 二、家庭端(服务端)配置
### 1. 创建 WireGuard 接口
进入 网络 → 接口 → 添加新接口
名称:wg_home
协议:WireGuard VPN
点击“创建接口”
### 2. 配置接口参数
1)常规设置
生成新的密钥对(记录公钥,后面需要添加到其他端Peer的公钥)
监听端口:51820(建议更换,这个端口很容易连不了,不要选太小的)
IP 地址:10.0.0.1/32
2)防火墙设置
创建/分配防火墙区域:新建一个 wg 区域,入站数据、出站数据、区域内转发均选接受,勾选TCP MSS钳制,该函的网络选择wg_home,允许转发到目标区域选择lan,允许来自源区域的转发选择lan。
(3)添加对端(公司 iStoreOS)
进入 接口 → wg_home → 对端 → 添加对端
公钥:填写公司 iStoreOS 的公钥
允许的 IP10.0.0.2/32192.168.2.0/24192.168.3.0/24
勾选“为允许的 IP 创建路由”
持续 Keep-Alive25
保存
### 3. 添加对端(手机)
1)再次点击“添加对端”
描述:Mobile
公钥:填写手机端生成的公钥
允许的 IP10.0.0.3/32
勾选“为允许的 IP 创建路由”
保存
### 4. 防火墙放行
进入 网络 → 防火墙 → 通信规则 → 添加
名称:Allow-WG
协议:UDP
来源区域:wan
目标端口:51820(之前面的一样哟)
目标区域:设备(或 wg
动作:接受
## 三、公司端(客户端)配置
### 1. 创建 WireGuard 接口
进入 网络 → 接口 → 添加新接口
名称:wg_office
协议:WireGuard VPN
点击“创建接口”
### 2. 配置接口参数
1)常规设置
生成新的密钥对(这里的公钥要填到服务端那边)
IP 地址:10.0.0.2/24
2)防火墙设置
创建/分配防火墙区域:这个地方和服务端完全一样。
### 3. 添加对端(家庭 iStoreOS
进入 接口 → wg_office → 对端 → 添加对端
公钥:填写家庭 iStoreOS 的公钥
预共享密钥:可选,建议生成
允许的 IP10.0.0.1/32192.168.2.0/24
勾选“为允许的 IP 创建路由”
对端地址:填写家庭公网 IP 或 DDNS 域名
对端端口:58888
持续 Keep-Alive25
保存
### 4. 添加手机路由(重要!)
为了让公司端知道手机 10.8.0.3 的存在,需要在家用端对端里补充路由信息:
进入 接口 → wg_office → 对端 → 编辑“家庭 iStoreOS”对端
在“允许的 IP”中添加:10.0.0.3/32(也就是在公司的对端允许的IP就会多一个10.0.0.3/32,最终变成10.0.0.1/3210.0.0.3/32192.168.2.0/24
确保仍勾选“为允许的 IP 创建路由”
保存并应用
后续如果还要添加其他非两个局域网的节点按照这个步骤来就可以了。
### 5. 防火墙放行
进入 网络 → 防火墙 → 通信规则 → 添加
名称:Allow-WG-In
协议:UDP
来源区域:wan
目标端口:51820
动作:接受
## 四、手机客户端配置(手动方式)
### 1. 在手机上生成密钥
安装 WireGuard App
点击“新建空隧道”
系统自动生成一对密钥,复制公钥(用于填到家庭端对端中)
### 2. 手机端配置文件(手动填写)
```
[Interface]
PrivateKey = <手机私钥(App自动生成)>
Address = 10.8.0.3/32
DNS = 192.168.1.1(家里iStoreOS的局域网地址)
[Peer]
PublicKey = <家庭 iStoreOS 的公钥>
PresharedKey = (可选,与家庭端对端中保持一致)
Endpoint = 你的公网IP或DDNS:51820
AllowedIPs = 10.0.0.0/24, 192.168.1.0/24, 192.168.2.0/24, 192.168.3.0/24
PersistentKeepAlive = 25
```
### 3. 导入并连接
保存配置,开启 VPN
查看握手状态,应能成功连接
注意:添加了新节点后,最好重启一下wg接口(家庭端和公司端都需要)
## 五、最终验证
家庭端任意计算机,可以ping通10.0.0.2、10.0.0.3、192.168.2.0/24网段设备、192.168.3.0/24网段设备。
公司端任意计算机,可以ping通10.0.0.1、10.0.0.2、192.168.1.0/24网段设备。
手机端,可以ping通10.0.0.1、10.0.0.2、192.168.1.0/24网段设备、192.168.2.0/24网段设备、192.168.3.0/24网段设备。
注意:ping电脑的时候注意检查电脑是否禁ping,否则通了还以为没通。
## 六、常见问题排查
(1)手机能连但 ping 不通内网:手机端 AllowedIPs 没写全,添加对应网段;
(2)公司端 ping 不通家庭:路由未同步,检查对端 AllowedIPs 是否包含对面网段;
(3)手机能通家庭但通不了公司:公司端不知道手机,在公司端对端添加 10.8.0.3/32
(4)端口不通:主路由未转发或防火墙未放行,检查端口转发 + 防火墙规则。
以上就是简单的公司和家庭异地Site-to-Site组网方案,有问题欢迎留言!
@@ -0,0 +1,107 @@
# 基于Debian12的Uptime Kuma部署与配置
本文讲述Debian12环境下进行Kuma部署和配置,包括Docker 安装、Kuma 部署、HTTPS 域名配置。
## 1. 安装 Docker (Debian 12)
#更新系统并安装依赖
sudo apt update && sudo apt upgrade -y
sudo apt install -y ca-certificates curl gnupg lsb-release
#添加 Docker 官方 GPG 密钥和软件源
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
#安装 Docker Engine
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
#启动 Docker 并设置开机自启
sudo systemctl start docker
sudo systemctl enable docker
#将当前用户加入 docker 组,避免每次输入 sudo
sudo usermod -aG docker $USER
#重要:执行完毕后,需要退出 SSH 重新登录才能使权限生效
## 2. 部署 Uptime Kuma 容器
#创建数据持久化目录
mkdir -p /opt/uptime-kuma-data
#运行 Kuma 容器 (使用 host 网络模式,简化后续代理配置)
docker run -d --restart=always \
--network host \
-v /opt/uptime-kuma-data:/app/data \
--name uptime-kuma \
louislam/uptime-kuma:2
• 访问地址:http://你的IP:3001
• 首次访问:设置管理员邮箱和密码。
• 注意:使用 --network host 模式后,-p 参数失效,容器直接使用宿主机的 3001 端口。
## 3. 配置 HTTPS 访问
你的现有架构为:Nginx Stream (SNI分流) -> 后端 Nginx (HTTPs) -> 服务。Kuma 作为新服务,通过独立端口 8444 接入。
步骤 3.1:修改 Stream 分流配置
编辑 Nginx 主配置文件(例如 /etc/nginx/nginx.conf),在 stream 块的 map 中添加 Kuma 域名的映射:
```nginx
stream {
map $ssl_preread_server_name $backend {
#... 你现有的其他域名映射 ...
kuma.你的域名 127.0.0.1:8444; #新增,将 Kuma 域名指向新端口
}
#... 其他配置 ...
}
```
步骤 3.2:为 Kuma 添加 Nginx 站点配置并申请 SSL 证书
如果你已拥有泛域名证书可直接复用。新建配置文件 /etc/nginx/sites-enabled/kuma
```nginx
server {
listen 127.0.0.1:8444 ssl http2;
server_name kuma.你的域名;
#复用已有的泛域名证书路径
ssl_certificate /etc/letsencrypt/live/你的域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/你的域名/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3001;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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-Proto $scheme;
}
}
```
步骤 3.3:测试并重载 Nginx
nginx -t && systemctl reload nginx
最终访问地址:https://kuma.你的域名
后续设置:登录 Kuma 后台,进入 设置 → 反向代理,将 信任代理 设为 是。
## 4. 配置Kuma
手机端:安装 Bark App,注册后复制你的专属 URL (例如 https://api.day.app/你的Key/)。
Kuma 管理端:
进入 设置 → 通知。
添加通知,类型选择 Bark (API v2)。
Bark 接入点:填入你的 URL 并在末尾加上 /push (格式:https://api.day.app/你的Key/push)。
Bark 群组:填入英文标识,如 homemonitor。
点击 测试,手机应收到推送。保存。
配置完成后,任一方 Kuma 服务中断,你的手机都会立即收到告警。
## 5. 常用管理命令
#查看 Kuma 容器状态
docker ps -a --filter name=uptime-kuma
#重启 Kuma 容器
docker restart uptime-kuma
#查看 Kuma 实时日志
docker logs -f uptime-kuma
#升级 Kuma
docker stop uptime-kuma
docker rm uptime-kuma
docker pull louislam/uptime-kuma:2
#之后使用相同的 docker run 命令重新创建容器