家用服务器(Devuan + Apache)+WireGuard+VPS(FreeBSD + NGINX)反向代理备忘录

只用鼠标画画。
——
我想用我自己的家用服务器托管我的网站,但直接暴露IP地址有点令人担忧。
而且,我无法从家里、从局域网内通过域名直接访问,最终发现这是因为我的家用路由器不具备NAT功能,所以无法实现。
从家里访问使用IP地址,从外面访问使用域名。这很不方便,所以我想,如果设置一个通过IP的VPN,是不是就能解决问题了?考虑到这两个优点,我尝试了一下。
结果,作为一个完全的门外汉,虽然过程很艰难,但使用反向代理似乎也能分散服务器负载,处理速度也变快了,结果非常令人满意。
然后,诹访子更新了一篇文章!
【数字自主】使用WireGuard从家用服务器进行托管的方法
我以前做过SSH连接,关于WireGuard,Arch Wiki上也有信息,所以进展顺利,但我将记录我遇到的问题以及为了将来迁移到另一个VPS而做的更改。
详情请参阅诹访子的页面。
由于内容与诹访子的基本相同,我将遵从其本人的删除请求。
这是我当前环境的备忘录。特别是Nginx,我可能会忘记,所以私下将其保留在网上。
VPS端设置
防火墙设置
/etc/pf.conf
set skip on lo
exsrv1 = 分配给VPS机器的全局IP地址
insrv1 = 192.168.10.101 #WireGuard上VPS的私有IP?
#insrv2 = 192.168.10.102 #WireGuard上VPS的私有IP?如果有其他要连接的设备则添加
block return
pass
#因为WireGuard使用端口51820/UDP,所以开放它
pass in on wg0
pass in inet proto udp from any to any port 51820
# 用于SSHWireGuard SSH连接
pass in on wg0 proto tcp from 192.168.10.0/24 to any port 22
block in on egress proto tcp from any to any port 22
/etc/wireguard/wg0.conf
[Interface]
Address = 192.168.10.1/24
PrivateKey = 输入在VPS上通过wg genkey生成的内容
ListenPort = 51820
[Peer]
PublicKey = 输入在家用服务器上通过wg genkey生成的内容
PreSharedKey = 同上
AllowedIPs = 192.168.10.101/32
PersistentKeepalive = 25
*/nginx.conf
可能很乱,但能运行就好!
worker_processes 1;
events {
worker_connections 4096;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nopush on;
keepalive_timeout 300;
proxy_buffering on;
proxy_buffer_size 8k;
proxy_buffers 100 8k;
proxy_cache_path /var/cache/nginx/cache/zone1 levels=1:2 keys_zone=zone1:64m inactive=7d max_size=2048m;
proxy_cache_path /var/cache/nginx/cache/zone2 levels=1:2 keys_zone=zone2:64m inactive=7d max_size=2048m;
proxy_cache_path /var/cache/nginx/cache/zone3 levels=1:2 keys_zone=zone3:64m inactive=7d max_size=2048m;
proxy_cache_path /var/cache/nginx/cache/zone4 levels=1:2 keys_zone=zone4:64m inactive=7d max_size=2048m;
proxy_temp_path /var/cache/nginx/temp;
server {
listen 80;
server_name #域名;
client_max_body_size 10240M;
location / {
proxy_pass http://192.168.10.101/;
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;
# 静的コンテンツのみキャッシュする
if ($uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)$") {
set $do_not_cache 0;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache zone1;
proxy_cache_key $scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 201 6h;
proxy_cache_valid 302 3h;
proxy_cache_valid 301 1d;
proxy_cache_valid 404 5m;
proxy_cache_lock on;
proxy_buffering on;
}
}
server {
listen 443 ssl;
server_name 域名;
client_max_body_size 10240M;
ssl_certificate # SSL证书;
ssl_certificate_key #同上
location / {
proxy_pass http://192.168.10.101;
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;
# 静的コンテンツのみキャッシュする
if ($uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)$") {
set $do_not_cache 0;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache zone2;
proxy_cache_key $mobile$scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 201 6h;
proxy_cache_valid 302 3h;
proxy_cache_valid 301 1d;
proxy_cache_valid 404 5m;
proxy_cache_lock on;
proxy_buffering on;
}
}
server {
listen 80;
server_name soulminingrig.com;
client_max_body_size 500M;
location / {
proxy_pass http://192.168.10.101;
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;
# 静的コンテンツのみキャッシュする
if ($uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)$") {
set $do_not_cache 0;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache zone3;
proxy_cache_key $mobile$scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 201 6h;
proxy_cache_valid 302 3h;
proxy_cache_valid 301 1d;
proxy_cache_valid 404 5m;
proxy_cache_lock on;
proxy_buffering on;
}
}
server {
listen 443 ssl;
server_name soulminingrig.com www.soulminingrig.com;
client_max_body_size 500M;
ssl_certificate # SSL证书;
ssl_certificate_key #同上
location / {
proxy_pass http://192.168.10.101; # 请替换为反向代理目标的IP地址
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;
# 静的コンテンツのみキャッシュする
if ($uri ~* "\.(jpg|jpeg|png|webp|gif|mp4|css|js|ico|woff2)$") {
set $do_not_cache 0;
}
proxy_no_cache $do_not_cache;
proxy_cache_bypass $do_not_cache;
proxy_cache zone1;
proxy_cache_key $mobile$scheme$proxy_host$uri$is_args$args;
proxy_cache_valid 200 201 6h;
proxy_cache_valid 302 3h;
proxy_cache_valid 301 1d;
proxy_cache_valid 404 5m;
proxy_cache_lock on;
proxy_buffering on;
}
}
}
通过在此VPS上放置缓存来提高速度。如果出现问题,计划停止使用。
特别让我卡住的地方是这里:
client_max_body_size 500M;
Nginx默认上传文件大小为1MB,即使在家用服务器端设置了更大的上传文件大小,如果Nginx没有相应配置,也无法正常工作,我花了一段时间才意识到这一点。
然后,我发现如果zone设置在一起会报错,所以用mkdir创建了文件夹,并为每个zone分开了缓存文件夹。
然后,我还在Nginx和家用服务器之间进行了SSH连接。
家用服务器端设置(Apache2)
/etc/wireguard/wg0.conf
[Interface]
PrivateKey = # 输入在家用服务器上通过wg genkey生成的内容
ListenPort = 51820
Address = 192.168.10.101/24 # WireGuard上这台机器的私有IP
DNS = 8.8.8.8
[Peer]
PublicKey = # 输入在VPS上通过wg genkey生成的内容
PreSharedKey = # 输入家用服务器的PreSharedKey,通过wg genkey生成的内容
Endpoint = # VPS的全局IP地址 :51820
AllowedIPs = 192.168.10.0/24
PersistentKeepalive = 25
我曾在这个WireGuard设置上陷入困境,因为不设置DNS就无法连接。
我暂时使用了Google的DNS,但等我恢复正常后可能会更改。
以及一些杂项记录
如果保持上述设置,多域名将无法工作,即使注册了第二个域名,也只会显示第一个域名。即使更改端口也不行,我当时很困惑,后来才发现我没有在apache2.conf中选择新域名的目标目录。
<Directory */新域名文件所在位置/>
# Options Indexes FollowSymLinks
# AllowOverride None
# Require all granted
Require all granted
AllowOverride All
Options FollowSymLinks MultiViews
</Directory>
我这样理解,这算是分离成功了吗?
此外,在WordPress中默认使用反向代理时,SSL认证会混淆,导致HTTP连接显示正常,但HTTPS连接时CSS失效。我当时很困惑,后来发现通过在wp-config中添加以下内容可以解决这个问题。
$_SERVER['HTTPS']='on';
虽然还有其他方法,但只有这个方法最有效,因为其他方法会导致登录界面突然变成HTTP通信。
可能这样仍然存在冲突。
最好更改端口,但我累了,所以稍后再做。
虽然完全没有整理,但我还是把它作为备忘录留下来,以免忘记。