<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Shiro</title><link>https://verymoe.vercel.app/</link><description>Recent content 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/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><item><title>拉萨之行</title><link>https://verymoe.vercel.app/posts/travel-to-lhasa/</link><pubDate>Tue, 05 Nov 2024 08:31:00 +0000</pubDate><guid>https://verymoe.vercel.app/posts/travel-to-lhasa/</guid><description>&lt;img src="https://verymoe.vercel.app/" alt="Featured image of post 拉萨之行" /&gt;&lt;p&gt;作为宅宅平时就没想着出门玩什么的，这学期连地铁都没怎么坐过，来天津后出门去过最远的地方也就和朋友一起组团去爬泰山。不过这次恰好比赛承办校在拉萨，所以就有了这趟公费&lt;del&gt;旅游&lt;/del&gt;。&lt;/p&gt;
&lt;p&gt;::: warning
&lt;em&gt;本文多图流水账警告&lt;/em&gt;
:::&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;迄今为止到达过的地方&lt;/summary&gt;
&lt;p&gt;&lt;img alt="中国制霸" class="gallery-image" data-flex-basis="240px" data-flex-grow="100" height="1280" 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/2024/lhasa/maps.webp" srcset="https://verymoe.vercel.app/maps_11845725045583437247_hu_cc611a4db7e97e7a.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/maps.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;/details&gt;
&lt;h2 id="出发去拉萨"&gt;出发去拉萨
&lt;/h2&gt;&lt;p&gt;这次比赛通知挺仓促的，9月30号教育部才发通知（至今官网不可查），承办校10月19号才发举办通知，这个时候才能开始买票走报销流程，购票的时候直达航班已经没有了，最后选了先坐廉航到西安中转，再坐西藏航空到拉萨的方案。&lt;/p&gt;
&lt;p&gt;出发那天西安的光线非常足，落地的时候看见飞机影子挺好看的，角度也很合适，就顺便录了个视频。&lt;/p&gt;
&lt;p&gt;&lt;video src="https://assets.moedev.cn/blog/photo/images/2024/lhasa/VID_20241023_101357.webm" controls="controls"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;下面是从西安咸阳到拉萨贡嘎拍的一些。&lt;/p&gt;
&lt;p&gt;&lt;video src="https://assets.moedev.cn/blog/photo/images/2024/lhasa/VID_20241023_150756.webm" controls="controls"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;::: grid {cols=3,rows=3,gap=12,type=images}
&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/IMG_20241023_101147.webp" srcset="https://verymoe.vercel.app/IMG_20241023_101147_1528332845643154512_hu_8f73464dafb5283f.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241023_101147.webp 1280w" width="1280"&gt;
&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/IMG_20241023_094149.webp" srcset="https://verymoe.vercel.app/IMG_20241023_094149_9364478521418542720_hu_14e9c28b742195cd.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241023_094149.webp 1280w" width="1280"&gt;
&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241023_124641.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_124641_12445596753603101688_hu_575a40c21227d68f.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_124641.webp 1280w" width="1280"&gt;
&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241023_154902.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_154902_9382808584103786687_hu_5ab8dab195395103.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_154902.webp 1280w" width="1280"&gt;
&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241023_155038.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_155038_5002509416085789030_hu_552e094e3ea3120e.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_155038.webp 1280w" width="1280"&gt;
&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241023_134304.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_134304_2846741648669193690_hu_62a64d2621ad3ce6.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_134304.webp 1280w" width="1280"&gt;
&lt;img class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/MVIMG_20241023_122801.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_122801_4458147305095280557_hu_130b4730e7fca428.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_122801.webp 1280w" width="1280"&gt;
&lt;img class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/MVIMG_20241023_162509.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_162509_14577331002373708814_hu_9123d25a7ffc7f00.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_162509.webp 1280w" width="1280"&gt;
:::&lt;/p&gt;
&lt;p&gt;西安飞拉萨的这一段可以看到高原的雪山，有一说一确实很漂亮&lt;del&gt;喵&lt;/del&gt;，图 4 是雅鲁藏布江，图 5 是拉萨的城区，这布局真的是强迫症福音，太规整了。
下飞机的时候还有人接风（太高级了），对面给我们一行人进行了献&lt;a class="link" href="https://zh.wikipedia.org/zh-hans/%E5%93%88%E8%BE%BE" target="_blank" rel="noopener"
 &gt;哈达&lt;/a&gt;。&lt;/p&gt;
&lt;p&gt;说起来这次是我第一次坐 319（空客比波音安静多了），西藏航空标准涂装，安全须知有藏语，不知道是不是只有西藏航空才有。&lt;/p&gt;
&lt;p&gt;不过给的餐食很普通，咖喱鸡饭 + 餐盒，饮料倒是给了西藏特色酥油茶。&lt;/p&gt;
&lt;h2 id="抵达拉萨"&gt;抵达拉萨
&lt;/h2&gt;&lt;p&gt;导游在路上唱藏歌。&lt;/p&gt;
&lt;p&gt;&lt;video src="https://assets.moedev.cn/blog/photo/images/2024/lhasa/VID_20241023_172941.webm" controls="controls"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;住的地方也是非常棒，外面是雅鲁藏布江，向右还能直接望到布达拉宫。&lt;/p&gt;
&lt;p&gt;&lt;img alt="江景房" class="gallery-image" data-flex-basis="319px" data-flex-grow="133" height="962" 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/2024/lhasa/MVIMG_20241023_184212.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_184212_18196571943693971020_hu_3414df5e5e9131c.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_184212.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="窗外就是雅鲁藏布江" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241023_184339.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_184339_6177540896893596477_hu_af28f570d10fb699.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_184339.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="在窗台能望见布达拉宫" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241023_184302.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_184302_4011370944300949228_hu_bfb6da04e5c0ecf3.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_184302.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;虽然能直接望到布达拉宫，但还是有些距离的，毕竟不在一个区。&lt;/p&gt;
&lt;h2 id="扭曲的家乡菜"&gt;扭曲的家乡菜
&lt;/h2&gt;&lt;p&gt;在万达看到了一家本来抱有一丝希望的跷脚牛肉。&lt;/p&gt;
&lt;p&gt;结果是，事实证明不能指望在家乡以外吃到任何自称正宗的东西…..&lt;/p&gt;
&lt;p&gt;::: grid {cols=4,rows=1,gap=12,type=images}
&lt;img alt="MVIMG_20241023_193652.webp" class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/MVIMG_20241023_193652.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_193652_185540838483369404_hu_aac87dd940f8cadd.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_193652.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="MVIMG_20241023_194521.webp" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241023_194521.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_194521_17311619573494356061_hu_11c3440bf922811e.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_194521.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="MVIMG_20241023_195841.webp" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241023_195841.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_195841_5344977102276115495_hu_896804562faa8705.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_195841.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="MVIMG_20241023_194908.webp" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241023_194908.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_194908_2661941030300242720_hu_9a64c3c568b11436.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_194908.webp 1280w" width="1280"&gt;
:::&lt;/p&gt;
&lt;p&gt;在万达看见了熟悉的滚筒洗衣机（其实我至今仍不会玩）。&lt;/p&gt;
&lt;p&gt;&lt;img alt="熟悉的滚筒洗衣机（万达二楼）" class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/MVIMG_20241023_203016.webp" srcset="https://verymoe.vercel.app/MVIMG_20241023_203016_10694404152144257151_hu_5728c4f47be71e3d.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241023_203016.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;下面是一家湘菜馆的菜单，不难看出，新疆的物价不是一般的贵…堪比沪都。&lt;/p&gt;
&lt;p&gt;&lt;img alt="楼下一家湘菜馆的菜单" class="gallery-image" data-flex-basis="135px" data-flex-grow="56" height="1920" 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/2024/lhasa/wx_camera_1729747558277.webp" srcset="https://verymoe.vercel.app/wx_camera_1729747558277_5260926066824771595_hu_c58a37523b6f6da3.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/wx_camera_1729747558277.webp 1080w" width="1080"&gt;&lt;/p&gt;
&lt;h2 id="布达拉宫"&gt;布达拉宫
&lt;/h2&gt;&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/MVIMG_20241027_110912.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_110912_5112920882568359866_hu_b4ab472a3dd9edf.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_110912.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;::: gallery
&lt;img alt="MVIMG_20241027_105346.webp" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241027_105346.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_105346_4096530916964689867_hu_72bca697b205e8ff.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_105346.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="MVIMG_20241027_111810.webp" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241027_111810.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_111810_2845133916536093448_hu_222e0a57872fe80f.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_111810.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="MVIMG_20241027_112241.webp" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241027_112241.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_112241_11221001284439107356_hu_cef882094cdbf83.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_112241.webp 1280w" width="1280"&gt;
:::&lt;/p&gt;
&lt;p&gt;走进了才发现布达拉宫的墙角其实是由草构成的。
&lt;img class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/MVIMG_20241027_113146.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_113146_15338650812937313495_hu_5920fa4d259e2ff2.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_113146.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;中途的高度就和鸟肩并肩了。&lt;/p&gt;
&lt;p&gt;&lt;video src="https://assets.moedev.cn/blog/photo/images/2024/lhasa/VID_20241027_114008.webm" controls="controls"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;抵达顶端部分。&lt;/p&gt;
&lt;p&gt;::: gallery
&lt;img alt="MVIMG_20241027_114518.webp" class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/MVIMG_20241027_114518.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_114518_5690262427433138243_hu_d1c2e218927fe3db.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_114518.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="MVIMG_20241027_122303.webp" class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/MVIMG_20241027_122303.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_122303_313601350489419983_hu_a3bd87a049af329f.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_122303.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="MVIMG_20241027_122253.webp" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241027_122253.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_122253_14879300589662443692_hu_f093d1a74bd8f5e5.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_122253.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="MVIMG_20241027_124951.webp" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241027_124951.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_124951_558149103046503357_hu_385a52c1993329e8.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_124951.webp 1280w" width="1280"&gt;
:::&lt;/p&gt;
&lt;p&gt;&lt;img alt="文创馆中唯一看上的却是非卖品" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241027_123917.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_123917_15439494419064865675_hu_98df08b7c3a8a5bf.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_123917.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;这个模型很还原，相比照片很容易看出布达拉宫是如何攀登上去的。
不过这个景点，如果不是朝圣或者历史爱好者的话，估计是不太会想来第二次的。&lt;/p&gt;
&lt;h2 id="品鉴藏菜"&gt;品鉴藏菜
&lt;/h2&gt;&lt;p&gt;&lt;img alt="吉祥措姆" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241027_134113.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_134113_15843581168318936928_hu_c40b955e14188b5.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_134113.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="菜名：扎西德勒" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241027_141901.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_141901_17714865860956822490_hu_f592fcc7c483d3e8.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_141901.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="菜名：手抓羊排" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241027_144302.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_144302_10720613117186338561_hu_1b1460d3b569f24f.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_144302.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;藏菜（有些菜品和学校清真食堂差不多），扎西得嘞这个菜是真够坑的。&lt;/p&gt;
&lt;h2 id="饭后加餐"&gt;饭后加餐
&lt;/h2&gt;&lt;p&gt;一行人都没吃的尽兴，于是晚上去恰了顿自助&lt;del&gt;烤肉&lt;/del&gt;炒菜。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/MVIMG_20241028_123939.webp" srcset="https://verymoe.vercel.app/MVIMG_20241028_123939_10573575415346496657_hu_9e2499cec4e32a9d.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241028_123939.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/IMG_20241107_233047.webp" srcset="https://verymoe.vercel.app/IMG_20241107_233047_12374807099258521944_hu_2532bf5e61f8cf8e.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241107_233047.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/IMG_20241107_232753.webp" srcset="https://verymoe.vercel.app/IMG_20241107_232753_12465506737537129120_hu_eb2378bab5f13738.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241107_232753.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/IMG_20241107_232728.webp" srcset="https://verymoe.vercel.app/IMG_20241107_232728_13913034515727927251_hu_b65df34356c3be31.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241107_232728.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/IMG_20241107_232715.webp" srcset="https://verymoe.vercel.app/IMG_20241107_232715_8587389377481253170_hu_9c8fc7d9288a1b1a.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241107_232715.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;我们这波人把烤肉吃成了炒菜。&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241027_210008.webp" srcset="https://verymoe.vercel.app/MVIMG_20241027_210008_2873683486607620567_hu_c08d9c92189d5133.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241027_210008.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;晚上能从窗户望见点灯的布达拉宫，摄像头太拉了。&lt;/p&gt;
&lt;h2 id="回程"&gt;回程
&lt;/h2&gt;&lt;p&gt;回程在贡嘎机场看见了现役战斗机飞过，一开始还以为是小型私人飞机，不得不说那发动机是真的猛&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/z30shb.webp" srcset="https://verymoe.vercel.app/z30shb_877578709419050914_hu_688b2065f94310f5.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/z30shb.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="西藏限定双语麦当劳。" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/MVIMG_20241028_121923.webp" srcset="https://verymoe.vercel.app/MVIMG_20241028_121923_15552925727646987849_hu_cc4f0924fbad2f34.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/MVIMG_20241028_121923.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img alt="地府机场 APM" class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/IMG_20241029_174955.webp" srcset="https://verymoe.vercel.app/IMG_20241029_174955_16532223234395545518_hu_a6333d88a4588bba.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241029_174955.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;这或许是半年来吃过最有四川味的面。
&lt;img alt="两舱休息室的牛肉面" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/IMG_20241029_180417.webp" srcset="https://verymoe.vercel.app/IMG_20241029_180417_10925519823970611962_hu_7bdd0e73c0758555.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241029_180417.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/IMG_20241029_210635.webp" srcset="https://verymoe.vercel.app/IMG_20241029_210635_17129289009420073660_hu_6608a54285e3800c.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241029_210635.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/IMG_20241029_213937.webp" srcset="https://verymoe.vercel.app/IMG_20241029_213937_10588222447533861092_hu_d90e74303f478870.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241029_213937.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;无意在画面正中间拍到了世界第一烂尾楼。
&lt;img alt="天津夜间上空——711 大厦" class="gallery-image" data-flex-basis="320px" data-flex-grow="133" height="960" 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/2024/lhasa/IMG_20241029_230847.webp" srcset="https://verymoe.vercel.app/IMG_20241029_230847_14715337171154086903_hu_1d91d44b7f3e7194.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241029_230847.webp 1280w" width="1280"&gt;&lt;/p&gt;
&lt;p&gt;顺便把降落过程拍下来了&lt;/p&gt;
&lt;p&gt;&lt;video src="https://assets.moedev.cn/blog/photo/images/2024/lhasa/VID_20241029_232810.webm" controls="controls"&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;落地国际航站楼坐的摆渡车，一下飞机就吸上了天津的雾霾。&lt;/p&gt;
&lt;p&gt;这次给我的感受就是，西藏物价是真的高，&lt;del&gt;但幸运的是可以报销（不然我就得吐血了）&lt;/del&gt;（学校今年没预算了，餐补明年才给报销，已吐血），感受到了西藏人的纯朴。出门解锁新地点果然还是很棒，争取这几年能到全国多打卡一些地方吧~&lt;/p&gt;
&lt;p&gt;抵达终点（此处距离我休息的地方不到 200m）&lt;/p&gt;
&lt;p&gt;&lt;img class="gallery-image" data-flex-basis="179px" data-flex-grow="74" height="1707" 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/2024/lhasa/IMG_20241030_003430.webp" srcset="https://verymoe.vercel.app/IMG_20241030_003430_11804308982576820846_hu_d2f5acc472275857.webp 800w, https://assets.moedev.cn/blog/photo/images/2024/lhasa/IMG_20241030_003430.webp 1280w" width="1280"&gt;&lt;/p&gt;</description></item></channel></rss>