代理

  • 正向代理

概念

正向代理是一种位于客户端和服务器之间的代理服务器。客户端将请求发送给正向代理,然后由代理服务器将请求转发给目标服务器。服务器将响应返回给代理服务器,再由代理服务器将响应转发给客户端。正向代理对客户端是透明的,客户端无需知道实际服务器的地址。

特点

  1. 隐藏客户端身份: 正向代理可以隐藏客户端的真实IP地址,保护客户端的隐私。
  2. 访问控制: 正向代理可以根据一定的规则限制或允许客户端的访问请求,实现访问控制功能。
  3. 缓存加速: 正向代理可以缓存经常访问的页面或资源,提高访问速度,减轻服务器负担。

使用场景

  1. 突破网络限制: 在某些地区或网络环境下,用户可能无法直接访问某些网站或服务。此时,可以通过设置正向代理来突破这些限制,实现访问。
  2. 网络安全: 通过正向代理,企业可以监控和管理员工的网络访问行为,隐藏客户端真实IP,防止敏感数据泄露。
  3. 内容过滤: 学校、图书馆等公共场所可以通过正向代理过滤不良内容,保护用户免受不良信息的侵害。
  4. 提高访问速度: 代理服务器设置硬盘缓冲区,可以将部分高频请求的响应数据保存到缓冲区中,以提高访问速度。
  • 反向代理

概念

反向代理是一种位于服务器和客户端之间的代理服务器。客户端将请求发送给反向代理,然后由代理服务器根据一定的规则将请求转发给后端服务器。后端服务器将响应返回给代理服务器,再由代理服务器将响应转发给客户端。反向代理对客户端是透明的,客户端无需知道实际服务器的地址,只需将反向代理当作目标服务器一样发送请求就可以了。

特点

  1. 负载均衡: 反向代理可以根据后端服务器的负载情况,将请求分发到不同的服务器上,实现负载均衡,提高系统的整体性能。
  2. 安全性增强: 反向代理可以隐藏后端服务器的真实地址和端口,防止直接攻击(如DoS/DDoS)。同时,还可以实现SSL加密、访问控制等安全功能。
  3. 缓存优化: 反向代理可以缓存静态资源,减少后端服务器的负载,提高响应速度。

使用场景

  1. Web应用: 在Web应用中,反向代理常用于实现负载均衡、安全访问控制以及缓存优化等功能。
  2. API网关: API网关通常采用反向代理的方式,对外部请求进行统一管理和调度,实现API的安全、高效访问。
  3. CDN加速: 内容分发网络(CDN)通过在全球范围内部署反向代理服务器,实现内容的就近访问和加速传输。
  • 正反向代理的比较

相同点

  1. 位置和功能: 正向代理和反向代理都位于客户端和真实服务器之间,它们的主要功能都是将客户端的请求转发给服务器,然后再将服务器的响应转发给客户端。
  2. 提高访问速度: 两者都能通过缓存机制提高访问速度。当客户端请求某个资源时,如果代理服务器已经缓存了该资源,就可以直接从缓存中提供,而无需再次从原始服务器获取,从而节省了时间和带宽。

不同点

  1. 代理对象: 正向代理是为客户端提供代理服务,即服务器不知道真正的客户端是谁。而反向代理则是为服务器提供代理服务,即客户端不知道真正的服务器是谁。
  2. 架设位置: 正向代理通常是由客户端架设的,而反向代理则是由服务器架设的。
  3. 用途和目的: 正向代理的主要用途是为在防火墙内的局域网客户端提供访问Internet的途径,侧重于解决访问限制问题。而反向代理的主要用途是将防火墙后面的服务器提供给Internet用户访问,其目的在于实现负载均衡、安全防护等。
  4. 服务对象: 在正向代理中,服务器不知道真正的用户是谁;而在反向代理中,用户不知道真正的服务器是谁。
  • 四层和七层中反代的区别

    四层中根据用户的IP+PORT来做hash
    七层中根据Http协议中的属性来做hash(如Header、Cookies)

参考

nginx反向代理搭建

关于sudo命令执行,在Linux系统中只有管理员权限才可以执行,所以在初次进行系统安装的时候就会让提交名称和设置密码,用于提升权限的过滤

如果你想获得管理员权限(root 权限):

  • 你需要使用 sudo 命令来临时提升权限,例如:

    1
    sudo apt update

    执行后会要求你输入 LwhaleE 用户的密码(就是你刚刚设置的那个)。

  • 或者,你可以通过 su 命令切换到 root 用户:

    1
    su -

    然后输入 root 用户的密码(初始状态下,Debian 安装后可能未设置 root 密码,你需要先用 sudo passwd root 来设置)。

这里用于安装反向代理的子系统是Ubuntu

前面有很大一部分就是我操作的时候应该是还没有拿管理员权限的操作,也就导致了后来防火墙的配置部分出现了一些问题

只要回显出欢迎访问就说明配置nginx成功了

image-20260115215423765

image-20260115214309411

检查防火墙状态:

1
sudo ufw enable

image-20260115214500589

安装 ssl-cert 包(生成 snakeoil 证书)

1
2
sudo apt update
sudo apt install ssl-cert -y

安装后,证书和密钥文件会生成在:

  • /etc/ssl/certs/ssl-cert-snakeoil.pem
  • /etc/ssl/private/ssl-cert-snakeoil.key

再次测试 Nginx 配置

1
sudo nginx -t

如果显示 syntax is oktest is successful,则重新加载 Nginx:

1
sudo systemctl reload nginx

image-20260305150757168

挂载地址的该规定的内容

先搭一个简单的flask框架

先用pip3安装一个flask

我觉得flask的程序我应该在另外的子系统里安装过,这边重新安装

1
2
3
sudo apt update
sudo apt install python3-pip -y
pip3 install flask

编写flask应用

1
nano ~/app.py

~ 表示当前用户的主目录

image-20260306090544366

但是这里就是相当与给了一个可以用的flask地址

创建一个新文件

1
nano ~/app.py

这里就是flask的内容

1
2
3
4
5
6
7
8
9
10
11
12
from flask import Flask

app = Flask(__name__)

@app.route('/')
def hello():
return '<h1>Hello from Flask!</h1><p>This is my backend service.</p>'

if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)
保存配置后,执行 `sudo nginx -t` 测试语法,然后 `sudo systemctl reload nginx` 重载。
在 Windows 浏览器中访问 `http://localhost`,应该看到 Flask 返回的 "Hello from Flask!"

image-20260306092019411

  • 这里清理了一下之前的其他放错的文件

要删除 Linux 子系统(WSL)中的文件,使用 rm 命令。基本语法是:

1
rm 文件路径

例如,如果你想删除当前目录下的一个名为 test.txt 的文件,可以运行:

1
rm test.txt

如果文件不在当前目录,需要提供完整路径,比如:

1
rm /home/你的用户名/文件名
  • 如果文件需要管理员权限才能删除,可以在命令前加上 sudo

    1
    sudo rm 文件路径
  • 删除操作是不可逆的(不会进入回收站),请务必确认文件路径正确。

  • 如果想删除一个空目录,可以用 rmdir 目录名;如果目录非空,可以用 rm -r 目录名(递归删除)。

如果不确定文件是否真的为空,可以先列出文件详情确认:

1
ls -l 文件路径

这里遇到的问题是,测试返回默认站点了,分析可能的原因是,默认站点自动启用的或者自定义站点没有被正常启用,往回检查一下,再重载nginx就可以了

确认 Flask 应用是否在运行,并且监听的端口是 5000。

检查 Flask:

1
2
# 查看5000端口是否被监听
sudo ss -tulpn | grep :5000

(注意保持终端运行,或者使用 nohup 在后台运行。)

Nginx 配置语法错误

虽然你之前测试过 nginx -t 可能通过,但再次确认一下:

1
sudo nginx -t

如果显示 syntax is oktest is successful,再重载。

重复排了很久的问题,结果发现问题并不在此,后面重启之后又正常连接了,不知道为什么

为你的后端服务创建一个配置文件:

1
sudo nano /etc/nginx/sites-available/lwhat

配置示例:

1
2
3
4
5
6
7
8
server {
listen 80;
server_name jelly.yourdomain.com;#这里直接放localhost或者直接放ip地址
location / {
proxy_pass http://10.10.0.112:8096;
include /etc/nginx/snippets/proxy.conf;
}
}

通过创建符号链接启用该站点:

1
sudo ln -s /etc/nginx/sites-available/jellyfin /etc/nginx/sites-enabled/

测试并重新加载 Nginx:

1
2
sudo nginx -t
sudo systemctl reload nginx

使用 Let’s Encrypt TLS 保护域名
为了保护你的域名,请使用 Let’s Encrypt 颁发免费证书:

1
sudo certbot --nginx -d jelly.yourdomain.com

Certbot 会自动在你的 Nginx 站点文件中配置 SSL。要确保证书自动续订,请验证 systemd 定时器是否处于活动状态:

1
sudo systemctl list-timers | grep certbot

最后,集成 Cloudflare 以增强安全性并绕过 ISP 端口限制

先安装 CloudflaredCloudflared 创建一个安全隧道,通过 Cloudflare 路由流量,从而绕过 ISP 对 80 和 443 端口的限制

CloudflareGitHub 页面下载 .deb 包。
安装该包:

1
sudo dpkg -i cloudflared-版本号.deb

进行身份验证后创建一个新隧道

1
cloudflared tunnel create my-tunnel

编辑 Cloudflare 配置文件:

1
sudo nano /etc/cloudflared/config.yml

配置示例:

1
2
3
4
5
6
7
8
tunnel: my-tunnel
credentials-file: /home/user/.cloudflared/my-tunnel.json
ingress:

- hostname: jelly.yourdomain.com
service: http://localhost:8080

service: http_status:404

启动并启用隧道服务:

1
2
sudo systemctl enable cloudflared
sudo systemctl start cloudflared

参考

Icon
致谢名单
本作品由 LwhalE 于 2026-03-14 19:49:31 发布
作品地址:代理
除特别声明外,本站作品均采用 CC BY-NC-SA 4.0 许可协议,转载请注明来自 LwhalE's blog
Logo