<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Technology on Shiro</title><link>https://verymoe.vercel.app/categories/tech/</link><description>Recent content in Technology on Shiro</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 08 Dec 2025 18:53:00 +0000</lastBuildDate><atom:link href="https://verymoe.vercel.app/categories/tech/index.xml" rel="self" type="application/rss+xml"/><item><title>修复Nginx反代飞牛相册卡顿、视频无法加载</title><link>https://verymoe.vercel.app/posts/fnos-nginx-reverse-proxy/</link><pubDate>Mon, 08 Dec 2025 18:53:00 +0000</pubDate><guid>https://verymoe.vercel.app/posts/fnos-nginx-reverse-proxy/</guid><description>&lt;h2 id="问题分析"&gt;问题分析
&lt;/h2&gt;&lt;p&gt;最近在使用飞牛的时候遇到了一个很奇怪的问题，通过域名可以正常进入飞牛首页，文件管理也正常，但是一旦访问飞牛相册，只有一开始加载正常，稍微刷一下瀑布流加载就会卡住，F12 打开控制台发现很多请求卡在了&lt;code&gt;Pending&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;&lt;img alt="飞牛相册发起了大量请求" class="gallery-image" data-flex-basis="497px" data-flex-grow="207" height="334" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20251208184125.png!webp" width="692"&gt;&lt;/p&gt;
&lt;p&gt;一开始以为是服务器性能跟不上，预览图没来得及生成，但是想了想也不对，普通的相册列表请求不应该卡成这个样子，于是我绕过 Nginx 通过 Tailscale 直接访问飞牛，这时候相册加载就是正常的，同时我发现飞牛相册的请求量非常大，那么既然直接访问没问题，那问题就出在公网服务器上的反代配置了。&lt;/p&gt;
&lt;p&gt;下面是博主简化后的网络架构。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="402px" data-flex-grow="167" height="633" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20260222135956.png!webp" srcset="https://verymoe.vercel.app/20260222135956_2627104407951989009_hu_a5a23a87c1aa7ee4.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/20260222135956.png!webp 1062w" width="1062"&gt;&lt;/p&gt;
&lt;h2 id="解决问题"&gt;解决问题
&lt;/h2&gt;&lt;h3 id="解决相册加载卡顿"&gt;解决相册加载卡顿
&lt;/h3&gt;&lt;p&gt;Nginx 在进行反向代理时，默认使用&lt;code&gt;HTTP/1.0&lt;/code&gt;协议连接后端服务器，并发送&lt;code&gt;Connection: close&lt;/code&gt;头。这意味着 Nginx 与 NAS 之间无法复用 TCP 连接，导致大量 TIME_WAIT 状态和握手开销。不仅仅是浏览器端的限制，Nginx 到后端也是瓶颈。&lt;/p&gt;
&lt;p&gt;解决办法：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;清空&lt;code&gt;Connection&lt;/code&gt;头，强制长连接&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;map $http_upgrade $connection_upgrade {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; default upgrade; # 如果是 WebSocket 请求，Connection 值为 upgrade
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;&amp;#39; &amp;#39;&amp;#39;; # 如果是普通请求，Connection 值为空（保留 HTTP/1.1 默认的 keep-alive）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;设置长连接池&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;span class="lnt"&gt;3
&lt;/span&gt;&lt;span class="lnt"&gt;4
&lt;/span&gt;&lt;span class="lnt"&gt;5
&lt;/span&gt;&lt;span class="lnt"&gt;6
&lt;/span&gt;&lt;span class="lnt"&gt;7
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;upstream backend {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 替换为你的飞牛 IP:端口
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; server 192.168.x.x:5666;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 核心配置：保持与后端的长连接数量，减少 TCP 握手开销
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; keepalive 64;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;ol start="3"&gt;
&lt;li&gt;在反代中添加配置&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;location / {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_pass http://backend;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 强制使用 HTTP/1.1 并清除 Connection 头，从而激活长连接
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_http_version 1.1;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Upgrade $http_upgrade;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Connection $connection_upgrade;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 优化：上传/下载不启用 Nginx 缓冲，直接转发数据
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_request_buffering off;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_buffering off;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;按照以上设置即可解决Nginx反代飞牛相册后瀑布流加载卡住的问题。&lt;/p&gt;
&lt;h3 id="解决视频无法加载"&gt;解决视频无法加载
&lt;/h3&gt;&lt;p&gt;视频播放卡住无法点播通常是忘记了配置 Nginx 当中的&lt;code&gt;Range&lt;/code&gt;。如果反代不传递&lt;code&gt;Range&lt;/code&gt;，后端会发送整个文件，反代服务器会尝试把整个文件缓存下来再发给客户端，这就会导致看起来无法加载。&lt;/p&gt;
&lt;blockquote class="alert alert-tip"&gt;
 &lt;div class="alert-header"&gt;
 &lt;span class="alert-icon"&gt;💡&lt;/span&gt;
 &lt;span class="alert-title"&gt;Tip&lt;/span&gt;
 &lt;/div&gt;
 &lt;div class="alert-body"&gt;
 &lt;p&gt;Nginx中的Range（范围）请求是HTTP协议允许客户端（如浏览器、下载器）指定只获取文件的一部分内容，主要用于实现断点续传、多线程下载、视频流媒体、实现视频播放进度条等功能；当服务器支持Range请求时，会在响应头中包含Accept-Ranges:bytes，Nginx通过处理客户端的Range头部来发送指定字节范围数据，并返回206 Partial Content状态码。&lt;/p&gt;
 &lt;/div&gt;
 &lt;/blockquote&gt;
&lt;p&gt;所以在反代部分中加入Range即可（非完整配置）&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;location / {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # ...其他配置...
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 支持视频流拖拽与断点续传
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Range $http_range;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header If-Range $http_if_range;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 关闭缓冲，让数据流实时通过
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_request_buffering off;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_buffering off;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h2 id="完整配置参考"&gt;完整配置参考
&lt;/h2&gt;&lt;p&gt;下面是基于修改后的完整 Nginx 配置，博主已经测试，欢迎评论区反馈。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;span class="lnt"&gt;20
&lt;/span&gt;&lt;span class="lnt"&gt;21
&lt;/span&gt;&lt;span class="lnt"&gt;22
&lt;/span&gt;&lt;span class="lnt"&gt;23
&lt;/span&gt;&lt;span class="lnt"&gt;24
&lt;/span&gt;&lt;span class="lnt"&gt;25
&lt;/span&gt;&lt;span class="lnt"&gt;26
&lt;/span&gt;&lt;span class="lnt"&gt;27
&lt;/span&gt;&lt;span class="lnt"&gt;28
&lt;/span&gt;&lt;span class="lnt"&gt;29
&lt;/span&gt;&lt;span class="lnt"&gt;30
&lt;/span&gt;&lt;span class="lnt"&gt;31
&lt;/span&gt;&lt;span class="lnt"&gt;32
&lt;/span&gt;&lt;span class="lnt"&gt;33
&lt;/span&gt;&lt;span class="lnt"&gt;34
&lt;/span&gt;&lt;span class="lnt"&gt;35
&lt;/span&gt;&lt;span class="lnt"&gt;36
&lt;/span&gt;&lt;span class="lnt"&gt;37
&lt;/span&gt;&lt;span class="lnt"&gt;38
&lt;/span&gt;&lt;span class="lnt"&gt;39
&lt;/span&gt;&lt;span class="lnt"&gt;40
&lt;/span&gt;&lt;span class="lnt"&gt;41
&lt;/span&gt;&lt;span class="lnt"&gt;42
&lt;/span&gt;&lt;span class="lnt"&gt;43
&lt;/span&gt;&lt;span class="lnt"&gt;44
&lt;/span&gt;&lt;span class="lnt"&gt;45
&lt;/span&gt;&lt;span class="lnt"&gt;46
&lt;/span&gt;&lt;span class="lnt"&gt;47
&lt;/span&gt;&lt;span class="lnt"&gt;48
&lt;/span&gt;&lt;span class="lnt"&gt;49
&lt;/span&gt;&lt;span class="lnt"&gt;50
&lt;/span&gt;&lt;span class="lnt"&gt;51
&lt;/span&gt;&lt;span class="lnt"&gt;52
&lt;/span&gt;&lt;span class="lnt"&gt;53
&lt;/span&gt;&lt;span class="lnt"&gt;54
&lt;/span&gt;&lt;span class="lnt"&gt;55
&lt;/span&gt;&lt;span class="lnt"&gt;56
&lt;/span&gt;&lt;span class="lnt"&gt;57
&lt;/span&gt;&lt;span class="lnt"&gt;58
&lt;/span&gt;&lt;span class="lnt"&gt;59
&lt;/span&gt;&lt;span class="lnt"&gt;60
&lt;/span&gt;&lt;span class="lnt"&gt;61
&lt;/span&gt;&lt;span class="lnt"&gt;62
&lt;/span&gt;&lt;span class="lnt"&gt;63
&lt;/span&gt;&lt;span class="lnt"&gt;64
&lt;/span&gt;&lt;span class="lnt"&gt;65
&lt;/span&gt;&lt;span class="lnt"&gt;66
&lt;/span&gt;&lt;span class="lnt"&gt;67
&lt;/span&gt;&lt;span class="lnt"&gt;68
&lt;/span&gt;&lt;span class="lnt"&gt;69
&lt;/span&gt;&lt;span class="lnt"&gt;70
&lt;/span&gt;&lt;span class="lnt"&gt;71
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# WebSocket和长连接配置
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;map $http_upgrade $connection_upgrade {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; default upgrade;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &amp;#39;&amp;#39; &amp;#39;&amp;#39;;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;# 后端服务器配置
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;upstream backend {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 替换为你的飞牛IP:端口（因为我流量全程在隧道，所以这里默认http）
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; server 192.168.x.x:5666;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; keepalive 64;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; listen 80;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; listen [::]:80;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; server_name example.com; # 替换为你的域名
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # HTTP 自动跳转 HTTPS
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; return 301 https://$server_name$request_uri;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;server {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; listen 443 ssl http2;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; listen [::]:443 ssl http2;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; server_name example.com; # 替换为你的域名
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # ========== SSL 证书配置 ==========
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_certificate /path/to/fullchain.pem; # 替换证书路径
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_certificate_key /path/to/privkey.pem; # 替换密钥路径
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # SSL 安全配置
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_protocols TLSv1.2 TLSv1.3;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_ciphers HIGH:!aNULL:!MD5;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_prefer_server_ciphers on;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_session_cache shared:SSL:10m;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; ssl_session_timeout 10m;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # ========== 反向代理配置 ==========
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; location / {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_pass http://backend;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 传递客户端真实信息
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Host $host;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header X-Real-IP $remote_addr;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header X-Forwarded-Proto $scheme;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # http1.1提供长连接和WebSocket支持
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_http_version 1.1;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Upgrade $http_upgrade;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Connection $connection_upgrade;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 视频流支持 (解决视频无法点播的问题)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header Range $http_range;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_set_header If-Range $http_if_range;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 大文件上传/下载优化
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_request_buffering off; # 上传不缓冲
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_buffering off; # 下载不缓冲
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 超时配置
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_connect_timeout 600s;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_send_timeout 600s;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; proxy_read_timeout 600s;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; # 上传大小限制 (0为无限)
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; client_max_body_size 0;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item><item><title>低功耗家里云升级记</title><link>https://verymoe.vercel.app/posts/intel-d1581-home-server-upgrade/</link><pubDate>Wed, 22 Jan 2025 17:37:00 +0000</pubDate><guid>https://verymoe.vercel.app/posts/intel-d1581-home-server-upgrade/</guid><description>&lt;img src="https://verymoe.vercel.app/" alt="Featured image of post 低功耗家里云升级记" /&gt;&lt;h2 id="缘由"&gt;缘由
&lt;/h2&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="518px" data-flex-grow="216" height="555" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20250122114505511.png!webp_white_sign" srcset="https://verymoe.vercel.app/20250122114505511_2010835319387786217_hu_2d3114424a3b762.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/20250122114505511.png!webp_white_sign 1200w" width="1200"&gt;
↑上图是博主家里云早期形态，咱自己知道很抽象，就别吐槽了（QAQ）&lt;/p&gt;
&lt;p&gt;在最近一次断电后，家里的老服务器便未能再次成功启动。此前家里的软路由、HA和咱自用的容器服务器等设施都运行在这上面。于是购置一台新的服务器就成了需要马上解决的问题。&lt;/p&gt;
&lt;p&gt;老服务器是博主在高中的时候用可怜的预算组的，由一块退役X8DTL-3F主板搭配双路X5680和混插的32G内存组成，硬盘在后期也只有一块英睿达MX500，电源在搬出准系统后用的是一款捡废品的不知名老电源，待机功耗达到了相当恐怖的100-110w。（一年下来电费都够买一台全新的服务器了）&lt;/p&gt;
&lt;p&gt;有了之前的经验，这次选购新平台的时候博主就非常注重能耗问题，毕竟博主身处19线小县城，当地私人电力公司从国网购电后再销售给当地居民，电价&amp;gt;0.6/度。可惜当前arm洋垃圾价格仍然不够便宜，在群友的建议下，咱准备从d1581和d-2143it中选择一套。&lt;/p&gt;
&lt;h2 id="采购"&gt;采购
&lt;/h2&gt;&lt;h3 id="板u--内存"&gt;板U + 内存
&lt;/h3&gt;&lt;p&gt;逛了两天咸鱼后博主选择了火神革命D-1581 Q3板U套装，虽然知道寨板问题挺多的，但是它胜在便宜啊。主板+U套装咸鱼二手只要300出头，而且还有2.5G网口x2，并且D-1581拥有16核32线程，采用14nm工艺，TDP仅仅只有65w，相比之前老平台上单颗130w的X5680能耗不知道甩了几条街，完美符合咱对家里云的想象。&lt;/p&gt;
&lt;p&gt;内存是咸鱼卖家一起打包出售的4根16GB DDR3L低压1666Mhz三星内存条。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="393px" data-flex-grow="163" height="732" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/2968d579479463334834d2f67b7ec886.jpeg!webp_white_sign" srcset="https://verymoe.vercel.app/2968d579479463334834d2f67b7ec886_15222502910379129458_hu_3271f8661a09a899.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/2968d579479463334834d2f67b7ec886.jpeg!webp_white_sign 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;::: grid {cols=2,rows=1,type=images}
&lt;img alt="D-1581 Q3板U" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1599" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20250122112601528.png!webp_white_sign" srcset="https://verymoe.vercel.app/20250122112601528_6981406969718776679_hu_410129b879d3497e.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/20250122112601528.png!webp_white_sign 1200w" width="1200"&gt;
&lt;img alt="4根16GB DDR3L低压1666Mhz三星内存条" class="gallery-image" data-flex-basis="180px" data-flex-grow="75" height="1600" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20250122112620502.png!webp_white_sign" srcset="https://verymoe.vercel.app/20250122112620502_8972186817270111109_hu_d3863cc44a651712.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/20250122112620502.png!webp_white_sign 1200w" width="1200"&gt;
:::&lt;/p&gt;
&lt;h3 id="硬盘"&gt;硬盘
&lt;/h3&gt;&lt;p&gt;硬盘方面系统盘依旧使用原有的英睿达MX500，在此基础上咱又从淘宝店家“上海浦东服务器”购买了一块店保1年的6TB SAS盘作为数据写入盘。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/bb2104a889575a48dcb691c455fc5259.jpeg!webp_white_sign" srcset="https://verymoe.vercel.app/bb2104a889575a48dcb691c455fc5259_10283497029577569382_hu_1f7ffe827f861782.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/bb2104a889575a48dcb691c455fc5259.jpeg!webp_white_sign 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;::: grid {cols=2,rows=1,type=images}
&lt;img class="gallery-image" data-flex-basis="437px" data-flex-grow="182" height="658" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/c2d803ccdaf0c6767ed4337364b0e8bd.jpeg!webp_white_sign" srcset="https://verymoe.vercel.app/c2d803ccdaf0c6767ed4337364b0e8bd_4689387879514589774_hu_d5d25470891c24f0.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/c2d803ccdaf0c6767ed4337364b0e8bd.jpeg!webp_white_sign 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="248px" data-flex-grow="103" height="1160" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/ee80a0c4774359b1cc2df8e886b65280.jpeg!webp_white_sign" srcset="https://verymoe.vercel.app/ee80a0c4774359b1cc2df8e886b65280_12463806423668362673_hu_126db34f19029fbd.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/ee80a0c4774359b1cc2df8e886b65280.jpeg!webp_white_sign 1200w" width="1200"&gt;
:::&lt;/p&gt;
&lt;h3 id="电源机箱"&gt;电源&amp;amp;机箱
&lt;/h3&gt;&lt;p&gt;一开始咱用的老服务器上捡垃圾来的杂牌电源，结果加上新硬盘后硬盘供电线不够了，索性直接把家里闲置的直出线长城电源换上了。机箱也是用的之前买的航嘉￥99机箱。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="422px" data-flex-grow="175" height="682" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/a787d34687b762780c2e9c2ce424dd01.jpeg!webp_white_sign" srcset="https://verymoe.vercel.app/a787d34687b762780c2e9c2ce424dd01_10483726209666058384_hu_3d5fa31305aa2de3.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/a787d34687b762780c2e9c2ce424dd01.jpeg!webp_white_sign 1200w" width="1200"&gt;&lt;/p&gt;
&lt;h2 id="部署"&gt;部署
&lt;/h2&gt;&lt;p&gt;拆掉旧主板，然后水洗散热器里的灰尘，不停歇的跑了整整两三年还是积了不少灰。&lt;/p&gt;
&lt;p&gt;::: grid {cols=2,rows=1,type=images}
&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20250122164632909.png!webp_white_sign" srcset="https://verymoe.vercel.app/20250122164632909_7432733988566275242_hu_f435730fb7b2f8af.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/20250122164632909.png!webp_white_sign 1200w" width="1200"&gt;
&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20250122164600246.png!webp_white_sign" srcset="https://verymoe.vercel.app/20250122164600246_14932411043520539453_hu_f2c2648fe9c323c8.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/20250122164600246.png!webp_white_sign 1200w" width="1200"&gt;
:::&lt;/p&gt;
&lt;h3 id="寨板内存问题"&gt;寨板内存问题
&lt;/h3&gt;&lt;p&gt;安装散热器到新主板测试一次点亮进入BIOS，但是一进入Ventoy引导的WinPE就死机重启，数显管故障码42。插上原来的系统盘进入PVE系统的时候也出现了问题，在启动过程中PVE会卡死机在Loading initial ramdisk，重启后问题稳定复现。&lt;/p&gt;
&lt;p&gt;通过在网上对这块寨板的搜索，最终在v2ex论坛找到一个有用的答复。&lt;/p&gt;

 &lt;blockquote&gt;
 &lt;p&gt;V2EX › 问与答 &lt;a class="link" href="https://www.v2ex.com/t/908551#;" target="_blank" rel="noopener"
 &gt;https://www.v2ex.com/t/908551#;&lt;/a&gt;
zeze0556 2023-01-13 16:29:59 +08:00
@xuxuxu123 我目前在用的是这个方案。感觉不稳定。头一次，vmware 中开鲁大师跑分，到 cpu 测试的某一项，3/10 的概率整台电脑（不是单独虚拟机）定屏死机。后来换了主板，就是目前在用的，vmware 中跑鲁大师无问题了，然后发现，有时候正常关机后，再次开机鼠标+键盘可能就失效了（连电都不供的那种），重启无效，除非把电源断开 10 秒以上，然后开机就又回来了，这个问题只是一个使用麻烦的问题，另外一个问题就实在太无语了，我内存加满到 4x16G,有时候几天都不出问题，有时候突然来个定屏死机，不频繁+我自己太忙，就先凑活着。前几天稍闲，决定看看到底是什么问题，根据 windows 的日志，有很多内存相关的错误，但定屏死机没有错误日志，这个真的靠猜测了。联系客服，反馈内存问题，然后沟通测试单条，看是否内存的问题。这两天我晚上一回家就测试，一个晚上多加一根内存，目前测试到第三根内存，结果都没有出现死机。但昨天完场发现另外一个问题，==四个内存槽，从 cpu 侧往电源侧数，1-3 内存槽，如果插了的话，电脑开机就是黑的，连 bios 自检画面都不出来，如果隔开第 3 个内存槽，则正常开机。==但目前还没发现死机，因为死机无规律，只能看运气。理论上将，可能 4 根内存插上也可以开机，毕竟之前就这么用的，只是会死机。目前过年要回老家了，注定要年后去骚扰客服了。&lt;/p&gt;

 &lt;/blockquote&gt;
&lt;p&gt;博主按照这位网页的插法去掉一根内存果然顺利进入系统，并且后续测试稳定不死机，不过这样很可惜的就是白白浪费掉一根内存条，总内存从64G下降到48G，心里在滴血。&lt;/p&gt;
&lt;p&gt;随后装入机箱，并加装SAS直通卡和硬盘，通过显示器上的终端修改PVE网卡绑定。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="685px" data-flex-grow="285" height="420" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20250122165137765.png!webp_white_sign" srcset="https://verymoe.vercel.app/20250122165137765_144107743839162892_hu_dd3d10d11e48e479.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/20250122165137765.png!webp_white_sign 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;::: grid {cols=2,rows=1,type=images}
&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="900" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20250122164813597.png!webp_white_sign" srcset="https://verymoe.vercel.app/20250122164813597_3871871923654863889_hu_4f42d5e21a415679.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/20250122164813597.png!webp_white_sign 1200w" width="1200"&gt;
&lt;img class="gallery-image" data-flex-basis="178px" data-flex-grow="74" height="1613" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/b7f78dee4d1961936b4fdcc19024413e.jpeg!webp_white_sign" srcset="https://verymoe.vercel.app/b7f78dee4d1961936b4fdcc19024413e_7333240806224450446_hu_50825bcc8e0b8c06.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/b7f78dee4d1961936b4fdcc19024413e.jpeg!webp_white_sign 1200w" width="1200"&gt;
:::&lt;/p&gt;
&lt;h3 id="内存问题分析"&gt;内存问题分析
&lt;/h3&gt;&lt;p&gt;博主咨询了卖家此前的运行情况，了解到原主人安装ESXI 8U3的时候内存插满运行正常，也就是说这块板子一开始是正常的，同时网上另一家D-1581主板厂子（米多贝克）的主板不存在内存插满死机问题，因此也可以排除设计缺陷。&lt;/p&gt;
&lt;p&gt;博主猜测由于主板走线设计问题，内存插槽可能在运输途中受损所以出现了工作不稳定的情况。&lt;/p&gt;
&lt;h2 id="测试"&gt;测试
&lt;/h2&gt;&lt;h3 id="来电自启测试"&gt;来电自启测试
&lt;/h3&gt;&lt;p&gt;好在该寨板本就为AIO（All in one，all in boom）设计，所以板载了来电开机跳线，经过几次人为意外断电测试，机器均能稳定启动并进入PVE。&lt;/p&gt;
&lt;p&gt;为了避免以外发生，咱又在咸鱼购入一台Pikvm（基于onekvm的ipmi系统，能通过网络远程控制主机，可连接被控显示器输出和鼠标输入，并模拟usb设备插入和控制开机重启跳线），目前已经下单在途还未收到货。&lt;/p&gt;
&lt;h3 id="geekbench-6测试"&gt;Geekbench 6测试
&lt;/h3&gt;&lt;p&gt;测试结果：https://browser.geekbench.com/v6/cpu/10055850&lt;/p&gt;
&lt;p&gt;被测主机信息：&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="624px" data-flex-grow="260" height="461" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/7d022cb87046bc32c6b281bd733b59fc.png!webp_white_sign" srcset="https://verymoe.vercel.app/7d022cb87046bc32c6b281bd733b59fc_8451955463083327450_hu_c014ca5f5660fd11.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/7d022cb87046bc32c6b281bd733b59fc.png!webp_white_sign 1200w" width="1200"&gt;&lt;/p&gt;
&lt;p&gt;单核&amp;amp;多核测试结果：&lt;/p&gt;
&lt;p&gt;::: grid {cols=2,rows=1,type=images}
&lt;img class="gallery-image" data-flex-basis="218px" data-flex-grow="90" height="1320" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20250122172921849.png!webp_white_sign" srcset="https://verymoe.vercel.app/20250122172921849_8257585300241690776_hu_321038866df2eaf3.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/20250122172921849.png!webp_white_sign 1200w" width="1200"&gt;
&lt;img class="gallery-image" data-flex-basis="219px" data-flex-grow="91" height="1314" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/images/2025/20250122172939377.png!webp_white_sign" srcset="https://verymoe.vercel.app/20250122172939377_11759336991976620085_hu_d7340db67999085c.webp 800w, https://assets.moedev.cn/blog/photo/images/2025/20250122172939377.png!webp_white_sign 1200w" width="1200"&gt;
:::&lt;/p&gt;
&lt;p&gt;单核可以说是惨不忍睹，但是家里云这种场景来说，完全够用了。希望这台机器能够稳定使用5个年头吧，到时候估计就能玩上arm洋垃圾了。&lt;/p&gt;
&lt;p&gt;完结撒花，感谢阅读🌸&lt;/p&gt;</description></item><item><title>Nginx单端口HTTP自动跳转HTTPS</title><link>https://verymoe.vercel.app/posts/nginx-single-port-http-https-redirect/</link><pubDate>Fri, 06 Dec 2024 21:04:00 +0000</pubDate><guid>https://verymoe.vercel.app/posts/nginx-single-port-http-https-redirect/</guid><description>&lt;h2 id="场景分析"&gt;场景分析
&lt;/h2&gt;&lt;p&gt;通常情况下，HTTP 和 HTTPS 无法共用同一个端口，因为两者使用不同的协议，无法在同一端口上完成握手通信，除非 Web 服务器能够根据协议类型进行智能分流。然而，为了提升用户体验，我们应该实现当用户使用 HTTP 协议访问网站时，自动跳转到 HTTPS 协议。例如，当用户访问 &lt;code&gt;http://192.168.1.1:2233&lt;/code&gt; 时，服务器自动重定向到 &lt;code&gt;https://192.168.1.1:2233&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;PS：起初我认为 Nginx 是做不到的，需要基于 HAProxy 实现协议分流，但实际情况是，Nginx 已经内置支持了，只需要我们合理利用 Nginx 的 497 错误响应。&lt;/p&gt;
&lt;p&gt;常见的一些平台，例如 &lt;strong&gt;Proxmox VE (PVE)&lt;/strong&gt;、 &lt;strong&gt;VMware ESXi Web Client&lt;/strong&gt;都采用了单端口跳转机制，既确保了管理界面的安全性，又提供了无需手动输入协议头的良好用户体验。&lt;/p&gt;
&lt;p&gt;效果如下：&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="373px" data-flex-grow="155" height="772" loading="lazy" sizes="(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px" src="https://assets.moedev.cn/blog/photo/article/2024/nginx-single-port-http-https-redirect/curl.png!webp" srcset="https://verymoe.vercel.app/curl_14591617579201160504_hu_43de4ae5bcc34fb4.webp 800w, https://assets.moedev.cn/blog/photo/article/2024/nginx-single-port-http-https-redirect/curl.png!webp 1200w" width="1200"&gt;&lt;/p&gt;
&lt;h2 id="实验测试"&gt;实验测试
&lt;/h2&gt;&lt;p&gt;为了验证上述场景，基于 Nginx 配置一个纯 HTTPS 网站，并使用&lt;code&gt;curl&lt;/code&gt;工具分别通过 HTTP 和 HTTPS 协议进行请求。&lt;/p&gt;
&lt;h3 id="初始配置未配置-error_page-497"&gt;初始配置（未配置 &lt;code&gt;error_page 497&lt;/code&gt;）
&lt;/h3&gt;&lt;h4 id="nginx-配置文件"&gt;Nginx 配置文件
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;2233&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;192.168.1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="s"&gt;/path/to/cert.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="s"&gt;/path/to/key.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="s"&gt;/var/www/html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;index&lt;/span&gt; &lt;span class="s"&gt;index.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="测试结果"&gt;测试结果
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTP 请求&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;curl&lt;/code&gt;发送 HTTP 请求：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -v http://192.168.1.1:2233
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;服务器响应：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HTTP/1.1 400 Bad Request
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;说明：由于未配置 HTTP 处理，Nginx 在接收到 HTTP 请求时返回了 400 错误。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTPS 请求&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;curl&lt;/code&gt;发送 HTTPS 请求：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -v https://192.168.1.1:2233
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;服务器正常响应网站内容。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="配置-error_page-497-实现自动重定向"&gt;配置 &lt;code&gt;error_page 497&lt;/code&gt; 实现自动重定向
&lt;/h3&gt;&lt;p&gt;为了实现 HTTP 请求自动重定向到 HTTPS，我们需要配置 Nginx 处理错误码 497，并返回 302 重定向。&lt;/p&gt;
&lt;h4 id="修改后的-nginx-配置文件"&gt;修改后的 Nginx 配置文件
&lt;/h4&gt;&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt; 1
&lt;/span&gt;&lt;span class="lnt"&gt; 2
&lt;/span&gt;&lt;span class="lnt"&gt; 3
&lt;/span&gt;&lt;span class="lnt"&gt; 4
&lt;/span&gt;&lt;span class="lnt"&gt; 5
&lt;/span&gt;&lt;span class="lnt"&gt; 6
&lt;/span&gt;&lt;span class="lnt"&gt; 7
&lt;/span&gt;&lt;span class="lnt"&gt; 8
&lt;/span&gt;&lt;span class="lnt"&gt; 9
&lt;/span&gt;&lt;span class="lnt"&gt;10
&lt;/span&gt;&lt;span class="lnt"&gt;11
&lt;/span&gt;&lt;span class="lnt"&gt;12
&lt;/span&gt;&lt;span class="lnt"&gt;13
&lt;/span&gt;&lt;span class="lnt"&gt;14
&lt;/span&gt;&lt;span class="lnt"&gt;15
&lt;/span&gt;&lt;span class="lnt"&gt;16
&lt;/span&gt;&lt;span class="lnt"&gt;17
&lt;/span&gt;&lt;span class="lnt"&gt;18
&lt;/span&gt;&lt;span class="lnt"&gt;19
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;server&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;listen&lt;/span&gt; &lt;span class="mi"&gt;2233&lt;/span&gt; &lt;span class="s"&gt;ssl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;server_name&lt;/span&gt; &lt;span class="n"&gt;192.168.1.1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate&lt;/span&gt; &lt;span class="s"&gt;/path/to/cert.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;ssl_certificate_key&lt;/span&gt; &lt;span class="s"&gt;/path/to/key.pem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;root&lt;/span&gt; &lt;span class="s"&gt;/var/www/html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;index&lt;/span&gt; &lt;span class="s"&gt;index.html&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="c1"&gt;# 捕获HTTP请求发送到HTTPS端口的错误497，并重定向到HTTPS
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;error_page&lt;/span&gt; &lt;span class="mi"&gt;497&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;@redirect_to_https&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;location&lt;/span&gt; &lt;span class="s"&gt;@redirect_to_https&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="kn"&gt;return&lt;/span&gt; &lt;span class="mi"&gt;302&lt;/span&gt; &lt;span class="s"&gt;https://&lt;/span&gt;&lt;span class="nv"&gt;$host:$server_port$request_uri&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h4 id="测试结果-1"&gt;测试结果
&lt;/h4&gt;&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTP 请求&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;curl&lt;/code&gt;发送 HTTP 请求：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -v http://192.168.1.1:2233
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;服务器响应：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;span class="lnt"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;HTTP/1.1 302 Found
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;Location: https://192.168.1.1:2233/
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;说明：配置&lt;code&gt;error_page 497&lt;/code&gt;后，Nginx 检测到 HTTP 请求发送到 HTTPS 端口，返回了 302 重定向，自动将请求引导至 HTTPS。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;HTTPS 请求&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;使用&lt;code&gt;curl&lt;/code&gt;发送 HTTPS 请求：&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div class="chroma"&gt;
&lt;table class="lntable"&gt;&lt;tr&gt;&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code&gt;&lt;span class="lnt"&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class="lntd"&gt;
&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;curl -v https://192.168.1.1:2233
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;服务器正常响应网站内容。&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="利用-497-响应"&gt;利用 497 响应
&lt;/h2&gt;&lt;h3 id="1-什么是-http-状态码-497"&gt;1. 什么是 HTTP 状态码 497？
&lt;/h3&gt;&lt;p&gt;HTTP 状态码 497，“HTTP 请求发送到 HTTPS 端口”，是 Nginx 特有的错误代码。当客户端尝试使用 HTTP 协议连接到预期为 HTTPS 的端口时，Nginx 会返回此错误。此错误表示协议不匹配，服务器拒绝了该请求。&lt;/p&gt;
&lt;p&gt;理解 497 错误有助于诊断协议不匹配的问题，并确保 Nginx 正确配置和强制执行 HTTPS 连接。&lt;/p&gt;
&lt;h3 id="2-497-错误码的常见原因"&gt;2. 497 错误码的常见原因
&lt;/h3&gt;&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;URL 协议错误&lt;/strong&gt;：客户端使用 HTTP 而非 HTTPS 协议，可能由于书签过时或链接错误导致。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;服务器配置问题&lt;/strong&gt;：服务器在特定端口上配置为处理 HTTPS 请求，但误收到 HTTP 请求。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;手动输入错误&lt;/strong&gt;：用户在手动输入 URL 时，忘记添加“https://”，默认使用“http://”导致协议不匹配。&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="结论"&gt;结论
&lt;/h2&gt;&lt;p&gt;通过上述配置，当用户通过 HTTP 协议访问 &lt;code&gt;http://192.168.1.1:2233&lt;/code&gt; 时，Nginx 服务器会响应一个 302 重定向，将用户自动引导至 &lt;code&gt;https://192.168.1.1:2233&lt;/code&gt;。这种配置不仅提升了安全性，确保所有通信都通过加密的 HTTPS 进行，还优化了用户体验，避免了因协议不匹配而产生的错误。&lt;/p&gt;
&lt;h2 id="参考资料"&gt;参考资料
&lt;/h2&gt;&lt;p&gt;&lt;a class="link" href="https://error404.atomseo.com/blog/status-code-497" title="Understanding and Steps to Resolve the 497 Error Code"
 target="_blank" rel="noopener"
 &gt;1. Understanding and Steps to Resolve the 497 Error Code&lt;/a&gt;&lt;/p&gt;</description></item></channel></rss>