[
  
    {
      "title": "Nginx 反向代理",
      "url": "https://chengzequn.github.io/%E5%B7%A5%E5%85%B7/2025/09/28/Nginx%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86.html",
      "date": "2025-09-28",
      "excerpt": "反向代理（Reverse Proxy）是一种服务器架构模式，它作为代理服务器接收来自客户端的连接请求，然后将这些请求转发到内部网络上的一个或多个后端服务器，并将从后端服务器得到的结果返回给客户端。在此过程中，代理服务器对外表现为一个独立的服务器，有效隐藏了后端服务器的真实细节。",
      "content": "反向代理（Reverse Proxy）是一种服务器架构模式，它作为代理服务器接收来自客户端的连接请求，然后将这些请求转发到内部网络上的一个或多个后端服务器，并将从后端服务器得到的结果返回给客户端。在此过程中，代理服务器对外表现为一个独立的服务器，有效隐藏了后端服务器的真实细节。与正向代理代表客户端与服务器通信不同，​反向代理代表服务器与客户端通信。正向代理隐藏真实客户端，而反向代理隐藏真实服务器，客户端只与反向代理服务器交互，不知道后端服务器的存在。Nginx作为一个高性能的HTTP和反向代理服务器，以其高性能、稳定性、丰富的功能集、简单的配置和低资源消耗而闻名。1. Nginx反向代理工作原理Nginx反向代理的工作流程可以分为以下几个关键步骤： ​客户端请求​：客户端通过HTTP或HTTPS协议向Nginx服务器发送请求。 ​请求接收与转发​：Nginx接收到请求后，根据预先配置的反向代理规则，将请求转发到一个或多个指定的后端服务器。 ​资源处理与响应​：后端服务器接收到来自Nginx的请求，处理该请求并生成相应的资源响应。 ​响应返回客户端​：Nginx从后端服务器接收到资源响应后，将其转发回原始请求的客户端，完成整个请求-响应周期。 在这一过程中，Nginx支持对多种协议进行代理，包括HTTP、HTTPS、TCP、WebSocket、gRPC等。2. 配置Nginx反向代理2.1 基本配置配置Nginx反向代理的核心是使用proxy_pass指令。以下是一个基本的反向代理配置示例:server { listen 80; server_name example.com; location / { proxy_pass http://localhost:8080; 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; }}配置说明： listen 80：指定Nginx监听的端口（此处为80） server_name example.com：指定该配置响应的域名 location /：定义匹配的URL路径（此处匹配所有路径） proxy_pass http://localhost:8080：核心指令，指定请求转发的目标地址 proxy_set_header：设置转发到后端服务器的请求头信息 2.2 关键配置参数详解除了基本配置外，Nginx反向代理还提供了一系列重要参数用于优化和控制代理行为： 参数 说明 示例值 proxy_connect_timeout 与后端服务器建立连接的超时时间 60s proxy_send_timeout 向后端服务器发送请求的超时时间 60s proxy_read_timeout 从后端服务器读取响应的超时时间 60s proxy_buffers 代理缓冲区的数量和大小 84k client_body_buffer_size 客户端请求主体的缓冲区大小 8k 完整配置示例：location / { proxy_pass http://backend-server; proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; proxy_buffers 8 4k; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}2.3 路径处理规则在配置反向代理时，location块和proxy_pass指令的路径配置对最终转发路径有重要影响。以下是不同配置情况的路径处理规则: location路径 proxy_pass路径 实际转发路径 说明 /test/ http://backend.com/ http://backend.com/index.html location有尾随斜杠，proxy_pass也有斜杠时，location匹配的路径会被替换 /test/ http://backend.com http://backend.com/test/index.html proxy_pass无尾随斜杠时，location匹配的路径会保留 /test http://backend.com/ http://backend.com//index.html 可能产生双斜杠，需要特别注意 /test http://backend.com http://backend.com/test/index.html 路径原样传递 3 反向代理高级功能3.1 负载均衡Nginx可以通过upstream模块实现负载均衡，将请求分发到多个后端服务器：http { upstream backend { server backend1.example.com:8080 weight=3; server backend2.example.com:8080; server backend3.example.com:8080; } server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } }}Nginx支持多种负载均衡算法： ​轮询（默认）​​：按顺序将请求分发到各后端服务器 ​加权轮询​：根据服务器权重分配请求 ​IP哈希​：根据客户端IP地址分配，保证同一客户端访问同一服务器 ​最少连接​：优先将请求分发给当前连接数最少的服务器 3.2 缓存功能Nginx可以缓存后端服务器的响应，显著提升性能http { proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=10g inactive=60m use_temp_path=off; server { listen 80; server_name example.com; location / { proxy_pass http://backend; proxy_cache my_cache; proxy_cache_valid 200 304 12h; proxy_cache_valid 301 302 1m; proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504; } }}3.3 SSL终止Nginx可以处理SSL/TLS加密，减轻后端服务器负担：server { listen 443 ssl; server_name example.com; ssl_certificate /path/to/certificate.crt; ssl_certificate_key /path/to/private.key; location / { proxy_pass http://backend-server; 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 https; }}4 实际应用场景4.1 提高访问速度代理服务器可以缓存静态资源，减少对后端服务器的直接请求，尤其对于热门站点可以显著提升请求速度。4.2 安全性和访问控制反向代理充当安全屏障，隐藏后端服务器的真实IP地址和架构细节。它可以实施访问控制、身份验证和授权策略，保护后端服务器免受恶意请求和攻击。4.3 负载分发与高可用通过将请求分发到多个服务器，提高系统吞吐量和可靠性。结合健康检查机制，可以自动剔除故障节点，保证服务连续性。4.4 流量控制与DDoS防护通过配置限流指令（如limit_req和limit_conn），Nginx可以实现流量控制功能，限制来自客户端的请求速率和并发连接数，有效防御DDoS攻击。5 配置实践与最佳实践5.1 完整配置示例以下是一个结合了多种最佳实践的反向代理配置示例：# 定义上游服务器组upstream backend { server 192.168.1.100:8080 weight=3; server 192.168.1.101:8080; server 192.168.1.102:8080 backup;}# HTTP服务器配置server { listen 80; server_name example.com; # 访问日志配置 access_log /var/log/nginx/access.log; error_log /var/log/nginx/error.log; # 安全头设置 add_header X-Frame-Options DENY; add_header X-Content-Type-Options nosniff; # 反向代理配置 location / { proxy_pass http://backend; proxy_connect_timeout 60s; proxy_send_timeout 60s; proxy_read_timeout 60s; # 请求头设置 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; # 缓冲优化 proxy_buffers 8 16k; proxy_buffer_size 32k; } # 健康检查端点（限制访问） location /nginx_status { stub_status; allow 127.0.0.1; deny all; }}5.2 配置检查与故障排查 ​语法检查​：修改配置后，务必执行语法检查sudo nginx -t 重载配置​：检查无误后重载Nginxsudo systemctl reload nginx 日志监控​：遇到问题时查看错误日志tail -f /var/log/nginx/error.log5.3 安全最佳实践 ​限制直接IP访问​：配置默认server块拒绝非域名访问 ​设置适当的超时时间​：防止资源被长期占用 ​使用最小权限原则​：Nginx进程应以非root用户运行 ​定期更新​：保持Nginx版本最新，修复安全漏洞 6 完整示例一个完整的示例：user nginx;worker_processes 1; # 根据需要调整error_log /var/log/nginx/error.log warn;pid /var/run/nginx.pid;events { worker_connections 1024; # 允许每个 worker 进程的最大连接数}http { include /etc/nginx/mime.types; default_type application/octet-stream; # 启用 gzip 压缩 gzip on; #禁用版本信息 server_tokens off; # 访问日志配置 access_log /var/log/nginx/access.log; # 设置 SSL server { listen 443 ssl; server_name xxx.cn www.xxx.cn; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; location / { proxy_pass http://172.17.0.1:8001; # halo 服务的地址和端口 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; } } # 设置 SSL server { listen 443 ssl; server_name store.xxx.cn; ssl_certificate /etc/nginx/certs/store.xxx.cn_chain.crt; ssl_certificate_key /etc/nginx/certs/store.xxx.cn_key.key; location / { proxy_pass http://172.17.0.1:8002; # halo 服务的地址和端口 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; } } # HTTP 到 HTTPS 重定向 server { listen 80; server_name xxx.cn www.xxx.cn store.xxx.cn; return 301 https://$host$request_uri; } server { listen 80 default_server; listen 443 ssl default_server; server_name _; ssl_certificate /etc/nginx/certs/fullchain.pem; ssl_certificate_key /etc/nginx/certs/privkey.pem; return 403; } }7 总结Nginx反向代理是一个功能强大且灵活的工具，通过合理的配置可以实现负载均衡、缓存加速、安全防护等多种功能。掌握其基本原理和配置技巧，对于构建高性能、高可用的Web服务架构至关重要。在实际应用中，应根据具体需求选择合适的配置策略，并遵循安全最佳实践，以确保系统的稳定性和安全性。通过本文的介绍，您应该对Nginx反向代理有了全面的了解，能够根据实际需求配置和优化自己的反向代理服务器。 相关阅读：如果你的后端服务部署在内网，需要先从外网访问，可以搭配 FRP 内网穿透工具 将内网服务暴露到公网，再通过 Nginx 反向代理进行流量管理和 SSL 加密。",
      "categories": ["工具"],
      "tags": ["反向代理","工具","nginx"]
    },
  
    {
      "title": "FRP 内网穿透工具",
      "url": "https://chengzequn.github.io/%E5%B7%A5%E5%85%B7/2025/09/27/FRP-%E5%86%85%E7%BD%91%E7%A9%BF%E9%80%8F%E5%B7%A5%E5%85%B7.html",
      "date": "2025-09-27",
      "excerpt": "FRP（Fast Reverse Proxy）​​ 是一款专注于内网穿透的高性能反向代理应用，采用 Go 语言开发。它能够帮助用户轻松地将位于 NAT 或防火墙后的内网服务暴露到公网，通过拥有公网 IP 的节点进行中转。FRP 支持 TCP、UDP、HTTP、HTTPS 等多种协议，并且具备 P2P 通信功能，使得外部用户能够安全、便捷地访问内网资源。",
      "content": "FRP（Fast Reverse Proxy）​​ 是一款专注于内网穿透的高性能反向代理应用，采用 Go 语言开发。它能够帮助用户轻松地将位于 NAT 或防火墙后的内网服务暴露到公网，通过拥有公网 IP 的节点进行中转。FRP 支持 TCP、UDP、HTTP、HTTPS 等多种协议，并且具备 P2P 通信功能，使得外部用户能够安全、便捷地访问内网资源。FRP 的核心价值在于解决了内网环境无法直接被外网访问的难题。无论是远程办公、开发测试还是企业服务暴露，FRP 都能提供稳定高效的解决方案。与传统的端口映射相比，FRP 不仅支持全端口流量代理，还提供了更高的安全性和灵活性。1.工作原理与架构1.1. 基本组成组件FRP 系统由两个核心组件构成：​服务端（frps）​​ 和 ​客户端（frpc）​。服务端通常部署在具有公网 IP 的服务器上，负责接收外部的连接请求；客户端则部署在内网需要暴露服务的机器上，用于向服务端注册并建立隧道。当客户端启动后，它会与服务端建立控制连接，将内网服务的信息注册到服务端。当外部用户访问服务端的特定端口时，服务端会根据配置将请求通过已建立的隧道转发到对应的内网客户端，客户端再将请求转发给实际的内网服务，从而完成通信闭环。1.2. 工作流程详解 ​服务端监听​：frps 启动并监听指定端口，等待客户端连接 ​客户端注册​：frpc 启动后向 frps 注册自身服务信息 ​请求转发​：外部请求到达 frps，frps 根据配置将其路由到对应 frpc ​隧道建立​：frpc 将请求转发给内网服务，并将响应返回给 frps ​数据中转​：frps 将响应最终返回给外部用户 这一过程实现了内网服务对外网的透明暴露，使得外部用户无需直接连接内网即可访问服务。2. 核心功能特性2.1. 协议支持与性能优化FRP 支持多种协议类型，包括 ​TCP、UDP、HTTP、HTTPS​ 等，满足不同场景的需求。此外，FRP 还具备以下高级特性： ​TCP 流式复用​：在单个连接间承载更多请求，节省连接建立时间，降低延迟 ​加密与压缩​：支持 TLS 加密传输，保障数据安全；支持数据压缩，提高传输效率 ​连接池​：预建立连接池，适合大量短连接场景，提高响应速度 ​KCP 协议支持​：可选的 KCP 协议可降低延迟，提升实时性 2.2. 安全特性安全性是 FRP 设计的重要考量，它提供了多重安全机制： ​Token 认证​：客户端和服务端通过 Token 进行身份验证，防止未授权访问 ​端口白名单​：可限制允许转发的端口范围，减少滥用风险 ​STCP/XTCP​：安全 TCP 和点对点 TCP 模式，避免服务被公开访问 ​HTTPS 支持​：对 Web 服务提供完整的 HTTPS 能力支持 2.3. 管理监控功能FRP 提供了完善的管理界面，方便用户监控和维护： ​Dashboard​：Web 控制台可实时查看连接状态和流量统计 ​Admin UI​：客户端管理界面，支持配置热重载 ​Prometheus 监控​：支持与主流监控系统集成 3. 安装与配置3.1. 服务端部署​安装步骤​： 下载对应系统版本的 FRP 安装包 解压到指定目录：tar -zxvf frp_x.x.x_linux_amd64.tar.gz 编辑配置文件 frps.toml（或 frps.ini） 启动服务：nohup ./frps -c frps.toml ​基本服务端配置示例​：bindPort = 7001 # 绑定端口需要确保服务器防火墙开放相关端口（如 7000、7500）。3.2. 客户端配置​基本客户端配置示例：serverAddr = \"服务端ip\"serverPort = 7001[[proxies]]name = \"tcp\"type = \"tcp\"localIP = \"127.0.0.1\"localPort = 8090remotePort = 8001[[proxies]]name = \"tcp2\"type = \"tcp\"localIP = \"127.0.0.1\"localPort = 8002remotePort = 8002[[proxies]]name = \"tcp4\"type = \"tcp\"localIP = \"127.0.0.1\"localPort = 8004remotePort = 80043.3. 系统服务部署对于生产环境，建议使用 systemd 管理 FRP 服务：创建 /etc/systemd/system/frps.service文件：[Unit]Description=FRP SERVER (frps)After=network.target[Service]Type=simpleExecStart=/opt/apps/frp/frps -c /opt/apps/frp/frps.tomlRestart=alwaysUser=rootWorkingDirectory=/opt/apps/frp/StandardOutput=syslogStandardError=syslogSyslogIdentifier=frpc[Install]WantedBy=multi-user.target使用 systemctl enable frps设置开机自启，systemctl start frps启动服务。4. 总结FRP 作为一款功能强大、配置灵活的内网穿透工具，极大地简化了内网服务暴露到公网的复杂度。无论是个人开发者还是企业用户，都能通过 FRP 轻松实现远程访问、服务共享等需求。其丰富的功能特性、良好的性能表现和可靠的安全机制，使 FRP 成为内网穿透领域的首选工具之一。随着版本的迭代更新，FRP 还在不断添加新功能和优化体验，值得持续关注和使用。 相关阅读：如果你需要将 FRP 穿透的服务通过域名对外提供，建议搭配 Nginx 反向代理 使用，实现更灵活的流量管理和 SSL 加密。",
      "categories": ["工具"],
      "tags": ["内网穿透","工具","frp"]
    },
  
    {
      "title": "自动出餐脚本",
      "url": "https://chengzequn.github.io/js/2025/08/10/%E8%87%AA%E5%8A%A8%E5%87%BA%E9%A4%90%E8%84%9A%E6%9C%AC.html",
      "date": "2025-08-10",
      "excerpt": "自动出餐插件是一个强大的用户脚本，专为外卖商家设计，能够自动处理美团、饿了么和京东秒送平台上的外卖订单出餐操作。该脚本通过自动化操作，帮助商家在高峰期快速完成订单确认，提升运营效率。",
      "content": "自动出餐插件是一个强大的用户脚本，专为外卖商家设计，能够自动处理美团、饿了么和京东秒送平台上的外卖订单出餐操作。该脚本通过自动化操作，帮助商家在高峰期快速完成订单确认，提升运营效率。软件截图核心功能以下流程图展示了自动出餐脚本的整体工作流程： 多平台支持 美团外卖：自动识别备餐时间超过设定阈值的订单 饿了么：智能判断出餐倒计时小于设定值的订单 京东秒送：自动处理超时备餐订单 智能时间判断 仅在工作时间段内执行（默认10:00-22:10） 根据各平台特性采用不同时间判断逻辑： 美团/京东：当备餐时间超过设定值时自动出餐 饿了么：当出餐倒计时小于设定值时自动出餐 可视化配置界面 直观的配置弹窗 独立配置各平台的出餐时间阈值 一键重置功能 智能状态监控 状态指示灯显示脚本运行状态（启用/禁用） 根据时间自动启用/禁用脚本功能 安装与使用安装步骤 安装Tampermonkey或Violentmonkey浏览器扩展 访问脚本发布页面，点击”安装”按钮 确认安装后访问美团、饿了么或京东秒送商家后台使用方法 点击右上角蓝色齿轮图标打开配置面板 设置各平台的出餐时间阈值（默认6分钟） 脚本会自动在指定时间段内工作 状态指示灯显示运行状态（绿色-启用，红色-禁用）配置选项详解 出餐时间阈值 平台：美团 默认值：6分钟 说明：备餐时间超过设定值即出餐 平台：饿了么 默认值：6分钟 说明：倒计时小于设定值即出餐 平台：京东秒送 默认值：6分钟 说明：备餐时间超过设定值即出餐 工作时段控制 默认工作时间：10:00:00 - 22:10:00 非工作时段脚本自动禁用 技术实现原理1. 平台识别机制graph TD A[访问商家后台] --&gt; B{识别平台} B --&gt;|美团| C[执行美团处理逻辑] B --&gt;|饿了么| D[执行饿了么处理逻辑] B --&gt;|京东| E[执行京东处理逻辑]2. 自动化处理流程 检查当前时间是否在允许执行区间 识别当前所在平台 点击”待出餐”标签页 扫描订单列表 根据时间规则判断是否自动出餐 每60秒刷新页面重新检查新订单3. 时间处理算法// 美团/京东时间处理function isTimeGreaterThan(current, target) { // 格式: HH:MM:SS const toSeconds = timeStr =&gt; { const [h, m, s] = timeStr.split(':').map(Number); return h * 3600 + m * 60 + s; }; return toSeconds(current) &gt; toSeconds(target);}// 饿了么时间处理function isTimeLessThan(current, target) { // 格式: X分Y秒 const toSeconds = timeStr =&gt; { const match = timeStr.match(/(\\d+)分(\\d+)秒/); return match ? parseInt(match[1]) * 60 + parseInt(match[2]) : 0; }; return toSeconds(current) &lt; toSeconds(target);}使用注意事项 ​浏览器支持​​：推荐使用Chrome或新版Edge浏览器 ​页面刷新​​：脚本每60秒自动刷新页面获取新订单 ​权限要求​​：脚本需要访问商家后台页面数据的权限 ​时间校准​​：确保电脑时间准确，否则影响判断 ​订单安全​​：建议先在小范围测试后再全面启用安全与隐私 本脚本仅在商家后台页面运行 不会收集或传输任何用户敏感信息 所有配置数据仅存储在浏览器本地",
      "categories": ["JS"],
      "tags": ["浏览器插件","JS","外卖"]
    }
  
]