feat: add nginx.md cheatsheet. c221cd1ac3

This commit is contained in:
jaywcjlove
2022-10-07 19:19:14 +00:00
parent 0672b3a6a1
commit 50aab66fee
4 changed files with 821 additions and 15 deletions

View File

@ -204,18 +204,24 @@
<p><code>.gitignore</code> 文件指定了 Git 应该忽略的未跟踪的文件</p>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="git-技巧"><a aria-hidden="true" tabindex="-1" href="#git-技巧"><span class="icon icon-link"></span></a>Git 技巧</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="重命名分支"><a aria-hidden="true" tabindex="-1" href="#重命名分支"><span class="icon icon-link"></span></a>重命名分支</h3><div class="wrap-body">
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="重命名为new"><a aria-hidden="true" tabindex="-1" href="#重命名为new"><span class="icon icon-link"></span></a><strong>重命名</strong><code>new</code></h4><div class="wrap-body">
<ul class="style-timeline">
<li><strong>重命名</strong><code>new</code>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">git</span> branch <span class="token parameter variable">-m</span> <span class="token operator">&#x3C;</span>new<span class="token operator">></span>
</span><span class="code-line">$ <span class="token function">git</span> branch <span class="token parameter variable">-m</span> <span class="token operator">&#x3C;</span>old<span class="token operator">></span> <span class="token operator">&#x3C;</span>new<span class="token operator">></span> <span class="token comment"># 重命名分支 </span>
</span><span class="code-line">$ <span class="token function">git</span> branch <span class="token parameter variable">-m</span> <span class="token operator">&#x3C;</span>old<span class="token operator">></span> <span class="token operator">&#x3C;</span>new<span class="token operator">></span> <span class="token comment">#重命名分支 </span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="推送并重置"><a aria-hidden="true" tabindex="-1" href="#推送并重置"><span class="icon icon-link"></span></a><strong>推送</strong>并重置</h4><div class="wrap-body">
</li>
<li><strong>推送</strong>并重置
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">git</span> push origin <span class="token parameter variable">-u</span> <span class="token operator">&#x3C;</span>new<span class="token operator">></span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="删除远程分支"><a aria-hidden="true" tabindex="-1" href="#删除远程分支"><span class="icon icon-link"></span></a><strong>删除</strong>远程分支</h4><div class="wrap-body">
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">git</span> push origin <span class="token parameter variable">--delete</span> <span class="token operator">&#x3C;</span>old<span class="token operator">></span> <span class="token comment"># 方法1</span>
</span><span class="code-line">$ <span class="token function">git</span> push origin :oldBranchName <span class="token comment"># 方法2</span>
</li>
<li><strong>删除</strong>远程分支
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">git</span> push origin <span class="token parameter variable">--delete</span> <span class="token operator">&#x3C;</span>old<span class="token operator">></span> <span class="token comment">#方法1</span>
</span><span class="code-line">$ <span class="token function">git</span> push origin :oldBranchName <span class="token comment">#方法2</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="log"><a aria-hidden="true" tabindex="-1" href="#log"><span class="icon icon-link"></span></a>Log</h3><div class="wrap-body">
</li>
</ul>
<!--rehype:className=style-timeline-->
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="log"><a aria-hidden="true" tabindex="-1" href="#log"><span class="icon icon-link"></span></a>Log</h3><div class="wrap-body">
<p>按内容搜索更改</p>
<pre class="language-shell"><code class="language-shell code-highlight"><span class="code-line">$ <span class="token function">git</span> log -S<span class="token string">'&#x3C;a term in the source>'</span>
</span></code></pre>

787
docs/nginx.html Normal file
View File

@ -0,0 +1,787 @@
<!doctype html>
<html lang="en" data-color-mode="dark">
<head>
<meta charset="utf-8">
<title>NGINX 备忘清单
&#x26; nginx cheatsheet &#x26; Quick Reference</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta description="这个 nginx 快速参考备忘单显示了它的常用命和配置使用清单。为开发人员分享快速参考备忘单。">
<meta keywords="Quick,Reference,cheatsheet,nginx">
<link rel="icon" href="data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20height%3D%221em%22%20width%3D%221em%22%3E%20%3Cpath%20opacity%3D%22.4%22%20d%3D%22m21.66%2010.44-.98%204.18c-.84%203.61-2.5%205.07-5.62%204.77-.5-.04-1.04-.13-1.62-.27l-1.68-.4c-4.17-.99-5.46-3.05-4.48-7.23l.98-4.19c.2-.85.44-1.59.74-2.2%201.17-2.42%203.16-3.07%206.5-2.28l1.67.39c4.19.98%205.47%203.05%204.49%207.23Z%22%20fill%3D%22%23777%22%2F%3E%20%3Cpath%20d%3D%22M15.06%2019.39c-.62.42-1.4.77-2.35%201.08l-1.58.52c-3.97%201.28-6.06.21-7.35-3.76L2.5%2013.28c-1.28-3.97-.22-6.07%203.75-7.35l1.58-.52c.41-.13.8-.24%201.17-.31-.3.61-.54%201.35-.74%202.2l-.98%204.19c-.98%204.18.31%206.24%204.48%207.23l1.68.4c.58.14%201.12.23%201.62.27Zm2.43-8.88c-.06%200-.12-.01-.19-.02l-4.85-1.23a.75.75%200%200%201%20.37-1.45l4.85%201.23a.748.748%200%200%201-.18%201.47Z%22%20fill%3D%22%23999%22%20%2F%3E%20%3Cpath%20d%3D%22M14.56%2013.89c-.06%200-.12-.01-.19-.02l-2.91-.74a.75.75%200%200%201%20.37-1.45l2.91.74c.4.1.64.51.54.91-.08.34-.38.56-.72.56Z%22%20fill%3D%22%23999%22%20%2F%3E%20%3C%2Fsvg%3E" type="image/svg+xml">
<link rel="stylesheet" href="../style/style.css">
</head>
<body><nav class="header-nav"><div class="max-container"><a href="../index.html" class="logo"><svg viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" height="1em" width="1em">
<path opacity=".4" d="m21.66 10.44-.98 4.18c-.84 3.61-2.5 5.07-5.62 4.77-.5-.04-1.04-.13-1.62-.27l-1.68-.4c-4.17-.99-5.46-3.05-4.48-7.23l.98-4.19c.2-.85.44-1.59.74-2.2 1.17-2.42 3.16-3.07 6.5-2.28l1.67.39c4.19.98 5.47 3.05 4.49 7.23Z" fill="currentColor"></path>
<path d="M15.06 19.39c-.62.42-1.4.77-2.35 1.08l-1.58.52c-3.97 1.28-6.06.21-7.35-3.76L2.5 13.28c-1.28-3.97-.22-6.07 3.75-7.35l1.58-.52c.41-.13.8-.24 1.17-.31-.3.61-.54 1.35-.74 2.2l-.98 4.19c-.98 4.18.31 6.24 4.48 7.23l1.68.4c.58.14 1.12.23 1.62.27Zm2.43-8.88c-.06 0-.12-.01-.19-.02l-4.85-1.23a.75.75 0 0 1 .37-1.45l4.85 1.23a.748.748 0 0 1-.18 1.47Z" fill="currentColor"></path>
<path d="M14.56 13.89c-.06 0-.12-.01-.19-.02l-2.91-.74a.75.75 0 0 1 .37-1.45l2.91.74c.4.1.64.51.54.91-.08.34-.38.56-.72.56Z" fill="currentColor"></path>
</svg>
<span class="title">Quick Reference</span></a><div class="menu"><a href="https://github.com/jaywcjlove/reference/blob/main/docs/nginx.md" class="" target="__blank"><svg viewBox="0 0 36 36" fill="currentColor" height="1em" width="1em"><path d="m33 6.4-3.7-3.7a1.71 1.71 0 0 0-2.36 0L23.65 6H6a2 2 0 0 0-2 2v22a2 2 0 0 0 2 2h22a2 2 0 0 0 2-2V11.76l3-3a1.67 1.67 0 0 0 0-2.36ZM18.83 20.13l-4.19.93 1-4.15 9.55-9.57 3.23 3.23ZM29.5 9.43 26.27 6.2l1.85-1.85 3.23 3.23Z"></path><path fill="none" d="M0 0h36v36H0z"></path></svg><span>编辑</span></a><button id="darkMode" type="button"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="light" height="1em" width="1em">
<path d="M6.995 12c0 2.761 2.246 5.007 5.007 5.007s5.007-2.246 5.007-5.007-2.246-5.007-5.007-5.007S6.995 9.239 6.995 12zM11 19h2v3h-2zm0-17h2v3h-2zm-9 9h3v2H2zm17 0h3v2h-3zM5.637 19.778l-1.414-1.414 2.121-2.121 1.414 1.414zM16.242 6.344l2.122-2.122 1.414 1.414-2.122 2.122zM6.344 7.759 4.223 5.637l1.415-1.414 2.12 2.122zm13.434 10.605-1.414 1.414-2.122-2.122 1.414-1.414z"></path>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 24 24" class="dark" height="1em" width="1em">
<path d="M12 11.807A9.002 9.002 0 0 1 10.049 2a9.942 9.942 0 0 0-5.12 2.735c-3.905 3.905-3.905 10.237 0 14.142 3.906 3.906 10.237 3.905 14.143 0a9.946 9.946 0 0 0 2.735-5.119A9.003 9.003 0 0 1 12 11.807z"></path>
</svg>
</button><script>
const LOCAL_NANE = '_dark_mode_theme_'
const rememberedValue = localStorage.getItem(LOCAL_NANE);
if (rememberedValue && ['light', 'dark'].includes(rememberedValue)) {
document.documentElement.setAttribute('data-color-mode', rememberedValue);
}
const button = document.querySelector('#darkMode');
button.onclick = () => {
const theme = document.documentElement.dataset.colorMode;
const mode = theme === 'light' ? 'dark' : 'light';
document.documentElement.setAttribute('data-color-mode', mode);
localStorage.setItem(LOCAL_NANE, mode);
}
</script><a href="https://github.com/jaywcjlove/reference" class="" target="__blank"><svg viewBox="0 0 16 16" fill="currentColor" height="1em" width="1em"><path d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.012 8.012 0 0 0 16 8c0-4.42-3.58-8-8-8z"></path></svg></a></div></div></nav><div class="wrap max-container"><header class="wrap-header h1wrap"><h1 id="nginx-备忘清单"><a aria-hidden="true" tabindex="-1" href="#nginx-备忘清单"><span class="icon icon-link"></span></a>NGINX 备忘清单</h1><div class="wrap-body">
<p>这个 nginx 快速参考备忘单显示了它的常用命和配置使用清单。</p>
</div></header><div class="h1wrap-body"><div class="wrap"><div class="wrap-header h2wrap"><h2 id="入门"><a aria-hidden="true" tabindex="-1" href="#入门"><span class="icon icon-link"></span></a>入门</h2><div class="wrap-body">
</div></div><div class="h2wrap-body"><div class="wrap"><div class="wrap-header h3wrap"><h3 id="服务管理"><a aria-hidden="true" tabindex="-1" href="#服务管理"><span class="icon icon-link"></span></a>服务管理</h3><div class="wrap-body">
<pre class="language-bash"><code class="language-bash code-highlight"><span class="code-line"><span class="token function">sudo</span> systemctl status nginx <span class="token comment"># nginx当前状态</span>
</span><span class="code-line"><span class="token function">sudo</span> systemctl reload nginx <span class="token comment"># 重新加载 nginx</span>
</span><span class="code-line"><span class="token function">sudo</span> systemctl restart nginx <span class="token comment"># 重启nginx</span>
</span><span class="code-line"><span class="token function">sudo</span> nginx <span class="token parameter variable">-t</span> <span class="token comment"># 检查语法</span>
</span><span class="code-line">nginx <span class="token comment"># 启动</span>
</span><span class="code-line">nginx <span class="token parameter variable">-s</span> reload <span class="token comment"># 重启</span>
</span><span class="code-line">nginx <span class="token parameter variable">-s</span> stop <span class="token comment"># 关闭进程</span>
</span><span class="code-line">nginx <span class="token parameter variable">-s</span> quit <span class="token comment"># 平滑关闭nginx</span>
</span><span class="code-line">nginx <span class="token parameter variable">-V</span> <span class="token comment"># 查看nginx的安装状态</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="简单代理"><a aria-hidden="true" tabindex="-1" href="#简单代理"><span class="icon icon-link"></span></a>简单代理</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://127.0.0.1:3000</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_redirect</span> <span class="token boolean">off</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$host</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 客户端的 IP 地址</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Real-IP <span class="token variable">$remote_addr</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># HTTP 请求端真实的IP</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Forwarded-For <span class="token variable">$proxy_add_x_forwarded_for</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2 row-span-4"><div class="wrap-header h3wrap"><h3 id="全局变量"><a aria-hidden="true" tabindex="-1" href="#全局变量"><span class="icon icon-link"></span></a>全局变量</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 row-span-4-->
<table><thead><tr><th align="left">变量</th><th align="left">说明</th></tr></thead><tbody><tr><td align="left"><code>$args</code></td><td align="left">这个变量等于请求行中的参数,同 <code>$query_string</code></td></tr><tr><td align="left"><code>$remote_port</code></td><td align="left">客户端的端口</td></tr><tr><td align="left"><code>$content_length</code></td><td align="left">请求头中的 <code>Content-length</code> 字段</td></tr><tr><td align="left"><code>$remote_user</code></td><td align="left">已经经过 <code>Auth Basic Module</code> 验证的用户名</td></tr><tr><td align="left"><code>$content_type</code></td><td align="left">请求头中的 <code>Content-Type</code> 字段</td></tr><tr><td align="left"><code>$request_filename</code></td><td align="left">当前请求的文件路径,由 <code>root</code> 或alias指令与URI请求生成</td></tr><tr><td align="left"><code>$document_root</code></td><td align="left">当前请求在 <code>root</code> 指令中指定的值</td></tr><tr><td align="left"><code>$scheme</code></td><td align="left">HTTP方法如httphttps</td></tr><tr><td align="left"><code>$host</code></td><td align="left">请求主机头字段,否则为服务器名称</td></tr><tr><td align="left"><code>$hostname</code></td><td align="left">主机名</td></tr><tr><td align="left"><code>$http_user_agent</code></td><td align="left">客户端<code>agent</code>信息</td></tr><tr><td align="left"><code>$http_cookie</code></td><td align="left">客户端<code>cookie</code>信息</td></tr><tr><td align="left"><code>$server_protocol</code></td><td align="left">请求使用的协议,通常是<code>HTTP/1.0</code><code>HTTP/1.1</code></td></tr><tr><td align="left"><code>$server_addr</code></td><td align="left">服务器地址,在完成一次系统调用后可以确定这个值</td></tr><tr><td align="left"><code>$server_name</code></td><td align="left">服务器名称</td></tr><tr><td align="left"><code>$server_port</code></td><td align="left">请求到达服务器的端口号</td></tr><tr><td align="left"><code>$limit_rate</code></td><td align="left">这个变量可以限制连接速率</td></tr><tr><td align="left"><code>$request_method</code></td><td align="left">客户端请求的动作,如 GET/POST</td></tr><tr><td align="left"><code>$request_uri</code></td><td align="left">包含请求参数的原始URI不包含主机名<code>/foo/bar.php?arg=baz</code></td></tr><tr><td align="left"><code>$remote_addr</code></td><td align="left">客户端的IP地址</td></tr><tr><td align="left"><code>$uri</code></td><td align="left">不带请求参数的当前URI<code>$uri</code>不包含主机名,如 <code>/foo/bar.html</code></td></tr><tr><td align="left"><code>$document_uri</code></td><td align="left"><code>$uri</code> 相同</td></tr><tr><td align="left"><code>$nginx_version</code></td><td align="left"><code>nginx</code> 版本</td></tr></tbody></table>
<p>更多全局变量<a href="https://nginx.org/en/docs/varindex.html">查看官方文档</a></p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="监听端口"><a aria-hidden="true" tabindex="-1" href="#监听端口"><span class="icon icon-link"></span></a>监听端口</h3><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span> <span class="token comment"># 标准 HTTP 协议</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">443</span> ssl</span><span class="token punctuation">;</span> <span class="token comment"># 标准 HTTPS 协议</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">443</span> ssl http2</span><span class="token punctuation">;</span> <span class="token comment"># 对于 http2</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> [::]:80</span><span class="token punctuation">;</span> <span class="token comment"># 使用 IPv6 在 80 上收听</span>
</span><span class="code-line"> <span class="token comment"># 仅收听使用 IPv6</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> [::]:80 ipv6only=on</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="域名-server_name"><a aria-hidden="true" tabindex="-1" href="#域名-server_name"><span class="icon icon-link"></span></a>域名 (server_name)</h3><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment"># 监听 example.com</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> example.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 监听多个域</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> example.com www.example.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 监听所有子域</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> *.example.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 监听所有顶级域</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> example.*</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 监听未指定的主机名(监听 IP 地址本身)</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> <span class="token string">""</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="负载均衡简单实例"><a aria-hidden="true" tabindex="-1" href="#负载均衡简单实例"><span class="icon icon-link"></span></a>负载均衡(简单实例)</h3><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> node_js</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 0.0.0.0:3000</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 0.0.0.0:4000</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.155.142.421</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="负载均衡权重"><a aria-hidden="true" tabindex="-1" href="#负载均衡权重"><span class="icon icon-link"></span></a>负载均衡(权重)</h3><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> test</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> localhost:8080 weight=9</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> localhost:8081 weight=1</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="upstream-ip_hash"><a aria-hidden="true" tabindex="-1" href="#upstream-ip_hash"><span class="icon icon-link"></span></a>upstream ip_hash</h3><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> test</span> <span class="token punctuation">{</span>
</span><span class="code-line highlight-line"> <span class="token directive"><span class="token keyword">ip_hash</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> localhost:8080</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> localhost:8081</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<p>解决负载均衡 <code>session</code> 的问题</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="upstream-fair"><a aria-hidden="true" tabindex="-1" href="#upstream-fair"><span class="icon icon-link"></span></a>upstream fair</h3><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> backend</span> <span class="token punctuation">{</span>
</span><span class="code-line highlight-line"> <span class="token directive"><span class="token keyword">fair</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> localhost:8080</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> localhost:8081</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<p>响应时间短的优先分配</p>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="server-可选参数"><a aria-hidden="true" tabindex="-1" href="#server-可选参数"><span class="icon icon-link"></span></a>server 可选参数</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<table><thead><tr><th align="left">:-</th><th align="left">:-</th></tr></thead><tbody><tr><td align="left"><code>weight</code></td><td align="left">访问权重数值越高,收到请求越多</td></tr><tr><td align="left"><code>fail_timeout</code></td><td align="left">指定的时间内必须提供响应</td></tr><tr><td align="left"><code>max_fails</code></td><td align="left">尝试失败服务器连接的最大次数</td></tr><tr><td align="left"><code>down</code></td><td align="left">标记一个服务器不再接受任何请求</td></tr><tr><td align="left"><code>backup</code></td><td align="left">有服务器宕机,标记的机器接收请求</td></tr></tbody></table>
<p>配置示例</p>
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> test</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:83 weight=9</span><span class="token punctuation">;</span> <span class="token comment"># 权重</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:83 weight=1</span><span class="token punctuation">;</span> <span class="token comment"># 权重</span>
</span><span class="code-line"> <span class="token comment"># 失败超时时间</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:83 max_fails=3</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:83 weight=3 down</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="upstream-url_hash"><a aria-hidden="true" tabindex="-1" href="#upstream-url_hash"><span class="icon icon-link"></span></a>upstream url_hash</h3><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> backend</span> <span class="token punctuation">{</span>
</span><span class="code-line highlight-line"> <span class="token directive"><span class="token keyword">hash</span> <span class="token variable">$request_uri</span></span><span class="token punctuation">;</span>
</span><span class="code-line highlight-line"> <span class="token directive"><span class="token keyword">hash_method</span> crc32</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> localhost:8080</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> localhost:8081</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<p>按访问url的hash结果来分配请求</p>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="upstream-keepalive"><a aria-hidden="true" tabindex="-1" href="#upstream-keepalive"><span class="icon icon-link"></span></a>upstream keepalive</h3><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> memcached_backend</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:11211</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 10.0.0.2:11211</span><span class="token punctuation">;</span>
</span><span class="code-line highlight-line"> <span class="token directive"><span class="token keyword">keepalive</span> <span class="token number">32</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<p>激活缓存以连接到上游服务器</p>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="子文件夹中的代理"><a aria-hidden="true" tabindex="-1" href="#子文件夹中的代理"><span class="icon icon-link"></span></a>子文件夹中的代理</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line highlight-line"><span class="token directive"><span class="token keyword">location</span> /folder/</span> <span class="token punctuation">{</span> <span class="token comment"># / 很重要!</span>
</span><span class="code-line highlight-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://127.0.0.1:3000/</span><span class="token punctuation">;</span> <span class="token comment"># / 很重要!</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_redirect</span> <span class="token boolean">off</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$host</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Real-IP <span class="token variable">$remote_addr</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Forwarded-For <span class="token variable">$proxy_add_x_forwarded_for</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap row-span-3"><div class="wrap-header h3wrap"><h3 id="反向代理"><a aria-hidden="true" tabindex="-1" href="#反向代理"><span class="icon icon-link"></span></a>反向代理</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-3-->
</div></div><div class="h3wrap-body"><div class="wrap"><div class="wrap-header h4wrap"><h4 id="基础"><a aria-hidden="true" tabindex="-1" href="#基础"><span class="icon icon-link"></span></a>基础</h4><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> example.com</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://0.0.0.0:3000</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 其中 0.0.0.0:3000 是绑定在 </span>
</span><span class="code-line"> <span class="token comment"># 0.0.0.0端口3000 列表上的 Node.js 服务器</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="基础--upstream"><a aria-hidden="true" tabindex="-1" href="#基础--upstream"><span class="icon icon-link"></span></a>基础 + (upstream)</h4><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> node_js</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 0.0.0.0:3000</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 其中 0.0.0.0:3000 是绑定在 </span>
</span><span class="code-line"> <span class="token comment"># 0.0.0.0端口3000 列表上的 Node.js 服务器</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> example.com</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://node_js</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h4wrap"><h4 id="升级连接适用于支持-websockets-的应用程序"><a aria-hidden="true" tabindex="-1" href="#升级连接适用于支持-websockets-的应用程序"><span class="icon icon-link"></span></a>升级连接(适用于支持 WebSockets 的应用程序)</h4><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> node_js</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 0.0.0.0:3000</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> example.com</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://node_js</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_redirect</span> <span class="token boolean">off</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_http_version</span> 1.1</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> Upgrade <span class="token variable">$http_upgrade</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> Connection <span class="token string">"upgrade"</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$host</span></span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<p>适用于 Node.js、Streamlit、Jupyter 等</p>
</div></div></div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="静态资源传统-web-服务器"><a aria-hidden="true" tabindex="-1" href="#静态资源传统-web-服务器"><span class="icon icon-link"></span></a>静态资源(传统 Web 服务器)</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> example.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">root</span> /path/to/website</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># root /www/data/ 示例,如果里面没有'root',它将寻找 /www/data/index.html</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /images/</span> <span class="token punctuation">{</span> <span class="token comment"># 如果里面没有“root”它将寻找 /www/data/images/index.html</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /videos/</span> <span class="token punctuation">{</span> <span class="token comment"># 由于里面有“root”它会寻找 /www/media/videos/index.html</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">root</span> /www/media</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="https-协议"><a aria-hidden="true" tabindex="-1" href="#https-协议"><span class="icon icon-link"></span></a>HTTPS 协议</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<p>大多数 SSL 选项取决于您的应用程序做什么或需要什么</p>
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">443</span> ssl http2</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> example.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">ssl</span> <span class="token boolean">on</span></span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">ssl_certificate</span> /path/to/cert.pem</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">ssl_certificate_key</span> /path/to/privkey.pem</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">ssl_stapling</span> <span class="token boolean">on</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">ssl_stapling_verify</span> <span class="token boolean">on</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">ssl_trusted_certificate</span> /path/to/fullchain.pem</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">ssl_protocols</span> TLSv1 TLSv1.1 TLSv1.2</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">ssl_session_timeout</span> <span class="token number">1d</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">ssl_session_cache</span> shared:SSL:50m</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">add_header</span> Strict-Transport-Security max-age=15768000</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<p>您可以使用 Let's Encrypt 轻松保护您的网站/应用程序。去 <a href="https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx.html">lets-encrypt</a> 获取更多信息</p>
</div></div></div><div class="wrap row-span-2"><div class="wrap-header h3wrap"><h3 id="重定向301永久"><a aria-hidden="true" tabindex="-1" href="#重定向301永久"><span class="icon icon-link"></span></a>重定向(301永久)</h3><div class="wrap-body">
<!--rehype:wrap-class=row-span-2-->
<p><a href="http://www.example.com">www.example.com</a> 重定向到 example.com</p>
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> www.example.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">return</span> <span class="token number">301</span> http://example.com<span class="token variable">$request_uri</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<p>将 http 重定向到 https</p>
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> example.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">return</span> <span class="token number">301</span> https://example.com<span class="token variable">$request_uri</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="重定向302临时"><a aria-hidden="true" tabindex="-1" href="#重定向302临时"><span class="icon icon-link"></span></a>重定向(302临时)</h3><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> yourdomain.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">return</span> <span class="token number">302</span> http://otherdomain.com</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="永久重定向到-https-安全域"><a aria-hidden="true" tabindex="-1" href="#永久重定向到-https-安全域"><span class="icon icon-link"></span></a>永久重定向到 HTTPS 安全域</h3><div class="wrap-body">
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> yourdomain.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">return</span> <span class="token number">301</span> https://<span class="token variable">$host</span><span class="token variable">$request_uri</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="重定向参数"><a aria-hidden="true" tabindex="-1" href="#重定向参数"><span class="icon icon-link"></span></a>重定向参数</h3><div class="wrap-body">
<table><thead><tr><th align="left">:-</th><th align="left">:-</th></tr></thead><tbody><tr><td align="left"><code>permanent</code></td><td align="left">永久性重定向。日志中的状态码为 <code>301</code></td></tr><tr><td align="left"><code>redirect</code></td><td align="left">临时重定向。日志中的状态码为 <code>302</code></td></tr></tbody></table>
</div></div></div><div class="wrap"><div class="wrap-header h3wrap"><h3 id="http-请求端真实的ip"><a aria-hidden="true" tabindex="-1" href="#http-请求端真实的ip"><span class="icon icon-link"></span></a>HTTP 请求端真实的IP</h3><div class="wrap-body">
<pre class="wrap-text "><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Forwarded-For <span class="token variable">$remote_addr</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="示例"><a aria-hidden="true" tabindex="-1" href="#示例"><span class="icon icon-link"></span></a>示例</h2><div class="wrap-body">
<!--rehype:body-class=cols-6-->
</div></div><div class="h2wrap-body cols-6"><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="websocket-的代理-keepalive"><a aria-hidden="true" tabindex="-1" href="#websocket-的代理-keepalive"><span class="icon icon-link"></span></a>websocket 的代理 keepalive</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-3-->
<pre class="wrap-text "><code class="language-nginx code-highlight"><span class="code-line"><span class="token comment"># Upstreams</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> backend</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:3000</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">keepalive</span> <span class="token number">5</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token comment"># HTTP Server</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> your_hostname.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">error_log</span> /var/log/nginx/rocketchat.access.log</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://backend</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_http_version</span> 1.1</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> Upgrade <span class="token variable">$http_upgrade</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> Connection <span class="token string">"upgrade"</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$http_host</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Real-IP <span class="token variable">$remote_addr</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Forward-For <span class="token variable">$proxy_add_x_forwarded_for</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Forward-Proto http</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Nginx-Proxy true</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_redirect</span> <span class="token boolean">off</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="apache-的反向代理"><a aria-hidden="true" tabindex="-1" href="#apache-的反向代理"><span class="icon icon-link"></span></a>Apache 的反向代理</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-3-->
<pre class="wrap-text "><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> domain.tld</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">access_log</span> /log/domain.tld.access.log</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">error_log</span> /log/domain.tld.error.log</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">root</span> /var/www/domain.tld/htdocs</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token comment"># 将请求传递给 Apache 后端</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://backend</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"> <span class="token comment"># 使用后备处理静态文件</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> ~* \.(ogg|ogv|svg|svgz|eot|otf|woff|woff2|ttf|m4a|mp4|ttf|rss|atom|jpe?g|gif|cur|heic|png|tiff|ico|zip|webm|mp3|aac|tgz|gz|rar|bz2|doc|xls|exe|ppt|tar|mid|midi|wav|bmp|rtf|swf|webp)$</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">add_header</span> <span class="token string">"Access-Control-Allow-Origin"</span> <span class="token string">"*"</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">access_log</span> <span class="token boolean">off</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">log_not_found</span> <span class="token boolean">off</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">expires</span> max</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">try_files</span> <span class="token variable">$uri</span> @fallback</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"> <span class="token comment"># 如果找不到文件,则回退以将请求传递给 Apache</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> @fallback</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://backend</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap col-span-4 row-span-3"><div class="wrap-header h3wrap"><h3 id="gitlab-的反向代理"><a aria-hidden="true" tabindex="-1" href="#gitlab-的反向代理"><span class="icon icon-link"></span></a>Gitlab 的反向代理</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-4 row-span-3-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment">#侦听的80端口</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> git.example.cn</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://localhost:3000</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 以下是一些反向代理的配置可删除</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_redirect</span> <span class="token boolean">off</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$host</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">client_max_body_size</span> <span class="token number">10m</span></span><span class="token punctuation">;</span> <span class="token comment"># 允许客户端请求的最大单文件字节数</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">client_body_buffer_size</span> <span class="token number">128k</span></span><span class="token punctuation">;</span> <span class="token comment"># 缓冲区代理缓冲用户端请求的最大字节数</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_connect_timeout</span> <span class="token number">300</span></span><span class="token punctuation">;</span> <span class="token comment"># nginx跟后端服务器连接超时时间(代理连接超时)</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_send_timeout</span> <span class="token number">300</span></span><span class="token punctuation">;</span> <span class="token comment"># 后端服务器数据回传时间(代理发送超时)</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_read_timeout</span> <span class="token number">300</span></span><span class="token punctuation">;</span> <span class="token comment"># 连接成功后,后端服务器响应时间(代理接收超时)</span>
</span><span class="code-line"> <span class="token comment"># 设置代理服务器nginx保存用户头信息的缓冲区大小</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_buffer_size</span> <span class="token number">4k</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># proxy_buffers缓冲区网页平均在32k以下的话这样设置</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_buffers</span> <span class="token number">4</span> <span class="token number">32k</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 高负荷下缓冲大小proxy_buffers*2</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_busy_buffers_size</span> <span class="token number">64k</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="重定向整个网站"><a aria-hidden="true" tabindex="-1" href="#重定向整个网站"><span class="icon icon-link"></span></a>重定向整个网站</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="wrap-text "><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> old-site.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">return</span> <span class="token number">301</span> <span class="token variable">$scheme</span>://new-site.com<span class="token variable">$request_uri</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="重定向单页"><a aria-hidden="true" tabindex="-1" href="#重定向单页"><span class="icon icon-link"></span></a>重定向单页</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="wrap-text "><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> = /oldpage.html</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">return</span> <span class="token number">301</span> http://example.org/newpage.html</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="重定向整个子路径"><a aria-hidden="true" tabindex="-1" href="#重定向整个子路径"><span class="icon icon-link"></span></a>重定向整个子路径</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="wrap-text "><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> /old-site</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">rewrite</span> ^/old-site/(.*) http://example.org/new-site/<span class="token variable">$1</span> permanent</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="负载均衡"><a aria-hidden="true" tabindex="-1" href="#负载均衡"><span class="icon icon-link"></span></a>负载均衡</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-3-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> example</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">ip_hash</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># upstream的负载均衡weight是权重可以根据机器配置定义权重。</span>
</span><span class="code-line"> <span class="token comment"># weigth参数表示权值权值越高被分配到的几率越大。</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 192.168.122.11:8081</span> <span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:82 weight=3</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:83 weight=3 down</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:84 weight=3</span><span class="token punctuation">;</span> <span class="token directive"><span class="token keyword">max_fails=3</span> fail_timeout=20s</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:85 weight=4</span><span class="token punctuation">;</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">keepalive</span> <span class="token number">32</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment">#侦听的80端口</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> git.example.cn</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment"># 在这里设置一个代理,和 upstream 的名字一样</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://example</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="内容缓存"><a aria-hidden="true" tabindex="-1" href="#内容缓存"><span class="icon icon-link"></span></a>内容缓存</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-3-->
<p>允许浏览器基本上永久地缓存静态内容。 Nginx 将为您设置 Expires 和 Cache-Control 头信息</p>
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> /static</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">root</span> /data</span><span class="token punctuation">;</span>
</span><span class="code-line highlight-line"> <span class="token directive"><span class="token keyword">expires</span> max</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<p>如果要求浏览器永远不会缓存响应(例如用于跟踪请求),请使用 <code>-1</code></p>
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> = /empty.gif</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">empty_gif</span></span><span class="token punctuation">;</span>
</span><span class="code-line highlight-line"> <span class="token directive"><span class="token keyword">expires</span> -1</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="跨域问题"><a aria-hidden="true" tabindex="-1" href="#跨域问题"><span class="icon icon-link"></span></a>跨域问题</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-3-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> api.xxx.com</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">add_header</span> <span class="token string">'Access-Control-Allow-Origin'</span> <span class="token string">'*'</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">add_header</span> <span class="token string">'Access-Control-Allow-Credentials'</span> <span class="token string">'true'</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">add_header</span> <span class="token string">'Access-Control-Allow-Methods'</span> <span class="token string">'GET,POST,HEAD'</span></span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://127.0.0.1:3000</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Real-IP <span class="token variable">$remote_addr</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> X-Forwarded-For <span class="token variable">$proxy_add_x_forwarded_for</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_set_header</span> Host <span class="token variable">$http_host</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-3 row-span-2"><div class="wrap-header h3wrap"><h3 id="重定向-uri-来解决跨域问题"><a aria-hidden="true" tabindex="-1" href="#重定向-uri-来解决跨域问题"><span class="icon icon-link"></span></a>重定向 URI 来解决跨域问题</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-3 row-span-2-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> test</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:8080</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> localhost:8081</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> api.xxx.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">root</span> html</span><span class="token punctuation">;</span> <span class="token comment"># 去请求../html文件夹里的文件</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">index</span> index.html index.htm</span><span class="token punctuation">;</span> <span class="token comment"># 首页响应地址</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"> <span class="token comment"># 用于拦截请求,匹配任何以 /api/开头的地址,</span>
</span><span class="code-line"> <span class="token comment"># 匹配符合以后,停止往下搜索正则。</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> ^~/api/</span><span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment"># 代表重写拦截进来的请求,并且只能对域名后边的除去传递的参数外的字符串起作用</span>
</span><span class="code-line"> <span class="token comment"># 例如www.a.com/api/msg?meth=1&#x26;par=2重写只对/api/msg重写。</span>
</span><span class="code-line"> <span class="token comment"># rewrite后面的参数是一个简单的正则 ^/api/(.*)$</span>
</span><span class="code-line"> <span class="token comment"># $1代表正则中的第一个()$2代表第二个()的值,以此类推。</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">rewrite</span> ^/api/(.*)$ /<span class="token variable">$1</span> break</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token comment"># 把请求代理到其他主机 </span>
</span><span class="code-line"> <span class="token comment"># 其中 http://www.b.com/ 写法和 http://www.b.com写法的区别如下</span>
</span><span class="code-line"> <span class="token comment"># 如果你的请求地址是他 http://server/html/test.jsp</span>
</span><span class="code-line"> <span class="token comment"># 配置一: http://www.b.com/ 后面有“/” </span>
</span><span class="code-line"> <span class="token comment"># 将反向代理成 http://www.b.com/html/test.jsp 访问</span>
</span><span class="code-line"> <span class="token comment"># 配置一: http://www.b.com 后面没有有“/” </span>
</span><span class="code-line"> <span class="token comment"># 将反向代理成 http://www.b.com/test.jsp 访问</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://test</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token comment"># 如果 proxy_pass URL 是 http://a.xx.com/platform/ 这种情况</span>
</span><span class="code-line"> <span class="token comment"># proxy_cookie_path应该设置成 /platform/ / (注意两个斜杠之间有空格)。</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_cookie_path</span> /platfrom/ /</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token comment"># 设置 Cookie 头通过</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass_header</span> Set-Cookie</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-3"><div class="wrap-header h3wrap"><h3 id="跳转到带-www-的域上面"><a aria-hidden="true" tabindex="-1" href="#跳转到带-www-的域上面"><span class="icon icon-link"></span></a>跳转到带 www 的域上面</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-3-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 配置正常的带www的域名</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> www.wangchujiang.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">root</span> /home/www/wabg/download</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">try_files</span> <span class="token variable">$uri</span> <span class="token variable">$uri</span>/ /index.html =404</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment"># 将不带 www 的 wangchujiang.com </span>
</span><span class="code-line"> <span class="token comment"># 永久性重定向到 https://www.wangchujiang.com</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> wangchujiang.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">rewrite</span> ^(.*) https://www.wangchujiang.com<span class="token variable">$1</span> permanent</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2 row-span-2"><div class="wrap-header h3wrap"><h3 id="代理转发"><a aria-hidden="true" tabindex="-1" href="#代理转发"><span class="icon icon-link"></span></a>代理转发</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2 row-span-2-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> server-api</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment"># api 代理服务地址</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:3110</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">upstream</span> server-resource</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token comment"># 静态资源 代理服务地址</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server</span> 127.0.0.1:3120</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">3111</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> localhost</span><span class="token punctuation">;</span> <span class="token comment"># 这里指定域名</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">root</span> /home/www/server-statics</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 匹配 api 路由的反向代理到API服务</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> ^~/api/</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">rewrite</span> ^/(.*)$ /<span class="token variable">$1</span> break</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://server-api</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"> <span class="token comment"># 假设这里验证码也在API服务中</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> ^~/captcha</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">rewrite</span> ^/(.*)$ /<span class="token variable">$1</span> break</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://server-api</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"> <span class="token comment"># 假设你的图片资源全部在另外一个服务上面</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> ^~/img/</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">rewrite</span> ^/(.*)$ /<span class="token variable">$1</span> break</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://server-resource</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"> <span class="token comment"># 路由在前端,后端没有真实路由,</span>
</span><span class="code-line"> <span class="token comment"># 路由不存在的 404 状态的页面返回 /index.html</span>
</span><span class="code-line"> <span class="token comment"># 使用场景,用在 React/Vue项目没有真实路由</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">try_files</span> <span class="token variable">$uri</span> <span class="token variable">$uri</span>/ /index.html =404</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># 空格很重要 ^</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-4"><div class="wrap-header h3wrap"><h3 id="屏蔽-ip"><a aria-hidden="true" tabindex="-1" href="#屏蔽-ip"><span class="icon icon-link"></span></a>屏蔽 IP</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-4-->
<p>可以放到 <code>http</code>, <code>server</code>, <code>location</code>, <code>limit_except</code> 语句块</p>
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">include</span> blockip.conf</span><span class="token punctuation">;</span>
</span></code></pre>
<p><code>blockip.conf</code> 里面输入内容,如:</p>
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">deny</span> 165.91.122.67</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token directive"><span class="token keyword">deny</span> IP</span><span class="token punctuation">;</span> <span class="token comment"># 屏蔽单个 ip 访问</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">allow</span> IP</span><span class="token punctuation">;</span> <span class="token comment"># 允许单个 ip 访问</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">deny</span> all</span><span class="token punctuation">;</span> <span class="token comment"># 屏蔽所有 ip 访问</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">allow</span> all</span><span class="token punctuation">;</span> <span class="token comment"># 允许所有 ip 访问</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">deny</span> 123.0.0.0/8</span><span class="token punctuation">;</span> <span class="token comment"># 屏蔽整个段即从 123.0.0.1 到 123.255.255.254 访问的命令</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">deny</span> 124.45.0.0/16</span><span class="token punctuation">;</span> <span class="token comment"># 屏蔽IP段即从 123.45.0.1 到 123.45.255.254 访问的命令</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">deny</span> 123.45.6.0/24</span><span class="token punctuation">;</span> <span class="token comment"># 屏蔽IP段即从 123.45.6.1 到 123.45.6.254 访问的命令</span>
</span><span class="code-line">
</span><span class="code-line"><span class="token comment"># 如果你想实现这样的应用除了几个IP外其他全部拒绝</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">allow</span> 1.1.1.1</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">allow</span> 1.1.1.2</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">deny</span> all</span><span class="token punctuation">;</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-4"><div class="wrap-header h3wrap"><h3 id="强制将-http-重定向到-https"><a aria-hidden="true" tabindex="-1" href="#强制将-http-重定向到-https"><span class="icon icon-link"></span></a>强制将 http 重定向到 https</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-4-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">server</span></span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">listen</span> <span class="token number">80</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_name</span> example.com</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">rewrite</span> ^ https://<span class="token variable">$http_host</span><span class="token variable">$request_uri?</span> permanent</span><span class="token punctuation">;</span> <span class="token comment"># 强制将 http 重定向到 https</span>
</span><span class="code-line"> <span class="token comment"># 在错误页面和“服务器”响应头字段中启用或禁用发射nginx版本。 防止黑客利用版本漏洞攻击</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">server_tokens</span> <span class="token boolean">off</span></span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="代理转发连接替换"><a aria-hidden="true" tabindex="-1" href="#代理转发连接替换"><span class="icon icon-link"></span></a>代理转发连接替换</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> ^~/api/upload</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">rewrite</span> ^/(.*)$ /wfs/v1/upload break</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">proxy_pass</span> http://wfs-api</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<p>将地址 <code>/api/upload</code> 替换为 <code>/wfs/v1/upload</code></p>
</div></div></div><div class="wrap col-span-4"><div class="wrap-header h3wrap"><h3 id="爬虫-user-agent-过滤"><a aria-hidden="true" tabindex="-1" href="#爬虫-user-agent-过滤"><span class="icon icon-link"></span></a>爬虫 User-Agent 过滤</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-4-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> /</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">if</span> (<span class="token variable">$http_user_agent</span> ~* <span class="token string">"python|curl|java|wget|httpclient|okhttp"</span>)</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">return</span> <span class="token number">503</span></span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"> <span class="token comment"># 正常处理</span>
</span><span class="code-line"> <span class="token comment"># ...</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="图片防盗链"><a aria-hidden="true" tabindex="-1" href="#图片防盗链"><span class="icon icon-link"></span></a>图片防盗链</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> ~* \.(gif|jpg|png|swf|flv)$</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">root</span> html</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">valid_referers</span> none blocked *.nginx.com</span><span class="token punctuation">;</span>
</span><span class="code-line">
</span><span class="code-line"> <span class="token directive"><span class="token keyword">if</span> (<span class="token variable">$invalid_referer</span>)</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">rewrite</span> ^/ www.nginx.cn</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token comment"># return 404;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="虚拟目录配置"><a aria-hidden="true" tabindex="-1" href="#虚拟目录配置"><span class="icon icon-link"></span></a>虚拟目录配置</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> /img/</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">alias</span> /var/www/image/</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token comment"># 访问 /img/ 目录里面的文件时,</span>
</span><span class="code-line"><span class="token comment"># 会自动去 /var/www/image/ 目录找文件</span>
</span><span class="code-line"><span class="token directive"><span class="token keyword">location</span> /img/</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">root</span> /var/www/image</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span><span class="code-line"><span class="token comment"># 访问 /img/ 目录下的文件时,</span>
</span><span class="code-line"><span class="token comment"># 会去 /var/www/image/img/ 目录下找文件</span>
</span></code></pre>
</div></div></div><div class="wrap col-span-2"><div class="wrap-header h3wrap"><h3 id="屏蔽-git-等文件"><a aria-hidden="true" tabindex="-1" href="#屏蔽-git-等文件"><span class="icon icon-link"></span></a>屏蔽 .git 等文件</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-2-->
<pre class="wrap-text "><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> ~ (.git|.gitattributes|.gitignore|.svn)</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">deny</span> all</span><span class="token punctuation">;</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
<!--rehype:className=wrap-text -->
</div></div></div><div class="wrap col-span-4"><div class="wrap-header h3wrap"><h3 id="防盗图配置"><a aria-hidden="true" tabindex="-1" href="#防盗图配置"><span class="icon icon-link"></span></a>防盗图配置</h3><div class="wrap-body">
<!--rehype:wrap-class=col-span-4-->
<pre class="language-nginx"><code class="language-nginx code-highlight"><span class="code-line"><span class="token directive"><span class="token keyword">location</span> ~ \/public\/(css|js|img)\/.*\.(js|css|gif|jpg|jpeg|png|bmp|swf)</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">valid_referers</span> none blocked *.jslite.io</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">if</span> (<span class="token variable">$invalid_referer</span>)</span> <span class="token punctuation">{</span>
</span><span class="code-line"> <span class="token directive"><span class="token keyword">rewrite</span> ^/ http://wangchujiang.com/piratesp.png</span><span class="token punctuation">;</span>
</span><span class="code-line"> <span class="token punctuation">}</span>
</span><span class="code-line"><span class="token punctuation">}</span>
</span></code></pre>
</div></div></div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="另见"><a aria-hidden="true" tabindex="-1" href="#另见"><span class="icon icon-link"></span></a>另见</h2><div class="wrap-body">
<ul>
<li><a href="https://jaywcjlove.github.io/nginx-tutorial">Nginx 安装维护入门学习笔记</a> <em>(jaywcjlove.github.io)</em></li>
</ul>
</div></div></div></div></div><footer class="footer-wrap"><footer class="max-container">© 2022 Kenny Wang, All rights reserved.</footer></footer></body>
</html>

View File

@ -79,12 +79,21 @@
<a href="./docs/typescript.html" style="background: rgb(49 120 198/var(\-\-bg\-opacity));"><svg fill="currentColor" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 14 14" height="1em" width="1em">
<path d="M1 7v6h12V1H1v6zm7.36-.21v.538H6.811v4.922H5.547V7.328H4V6.25h4.36v.54zm3.046-.474c.192.037.408.089.483.117l.127.051v.586c0 .324-.01.586-.02.586-.009 0-.107-.051-.22-.112-.421-.24-1.096-.328-1.509-.207a.894.894 0 0 0-.319.193c-.112.108-.135.173-.135.347 0 .187.023.239.178.384.098.094.464.31.82.487.75.37 1.13.685 1.303 1.074.155.347.16 1.078.01 1.406-.141.31-.45.624-.755.769-.647.305-1.702.333-2.527.06l-.295-.098v-1.303l.234.169c.305.22.699.356 1.111.384.413.029.717-.047.905-.225.117-.107.14-.168.14-.346 0-.343-.196-.52-1.003-.915-.712-.351-.937-.51-1.148-.82-.469-.68-.328-1.72.3-2.194.534-.407 1.42-.557 2.32-.393Z"></path>
</svg>
<span>TypeScript</span></a><!--rehype:style=background: rgb(49 120 198/var(\-\-bg\-opacity));--></p>
<span>TypeScript</span></a><!--rehype:style=background: rgb(49 120 198/var(\-\-bg\-opacity));-->
<a href="./docs/yaml.html" style="background: rgb(91 163 230/var(\-\-bg\-opacity));"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 512 470.647">
<polygon points="235.793 0 143.978 137.674 143.978 224.949 87.702 224.949 87.702 137.674 0 0 63.25 0 119.018 88.646 175.243 0 235.793 0 235.793 0"></polygon>
<path d="M330.294,175.451h-101.861l-20.717,50.024h-45.106l95.38,-224.949h46.137l91.51,224.949h-48.2l-17.144,-50.024zm-16.92,-44.911l-31.226,-82.55l-34.837,82.55h66.063z"></path>
<polygon points="87.701 250.177 87.701 470.647 135.004 470.647 135.004 318.569 184.509 420.789 221.743 420.789 272.939 314.976 272.939 470.602 318.318 470.602 318.318 250.177 256.358 250.177 201.381 349.883 149.021 250.177 87.701 250.177 87.701 250.177"></polygon>
<polygon points="512 422.735 395.638 422.735 395.638 250.125 347.442 250.125 347.442 469.647 512 469.647 512 422.737 512 422.735"></polygon>
</svg><span>YAML</span></a><!--rehype:style=background: rgb(91 163 230/var(\-\-bg\-opacity));--></p>
<!--rehype:class=home-card-->
</div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="工具包"><a aria-hidden="true" tabindex="-1" href="#工具包"><span class="icon icon-link"></span></a>工具包</h2><div class="wrap-body">
<p class="home-card"><a href="./docs/emmet.html" style="background: rgb(122 203 23/var(\-\-bg\-opacity));"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="1em" width="1em" viewBox="0 0 153 151">
<path d="M76.2378757,0 C118.342892,0 152.475751,33.7082594 152.475751,75.2895046 C152.475751,116.87075 118.342892,150.579009 76.2378757,150.579009 C34.1328596,150.579009 0,116.87075 0,75.2895046 C0,33.7082594 34.1328596,0 76.2378757,0 Z M60.5934369,46.9019586 L19.8384036,56.9645627 L92.6150779,128.835332 L102.803239,88.5872762 L94.3131047,80.2021662 L87.0356763,108.950356 L70.5395345,92.6594199 L75.3909542,73.9732442 L56.2267408,78.5252622 L39.7305989,62.2343264 L68.8415078,55.0474265 L60.5934369,46.9019586 Z M116.873372,33.007443 L76.1189361,43.0694569 L84.367007,51.2149248 L102.561176,47.1421909 L98.1944795,64.8703887 L106.684613,73.2549084 L116.873372,33.007443 Z" transform="translate(0 .421)"></path>
</svg><span>Emmet</span></a><!--rehype:style=background: rgb(122 203 23/var(\-\-bg\-opacity));-->
<a href="./docs/nginx.html" style="background: rgb(0 193 9/var(\-\-bg\-opacity));"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" width="46" height="52" viewBox="0 0 46 52">
<path d="M21.6686953,0.373850863 C22.4859141,-0.124616954 23.5140859,-0.124616954 24.3575391,0.373850863 L44.6555781,12.0199042 C45.4992109,12.491911 46,13.3837179 46,14.3541925 L46,37.6459416 C46,38.6164162 45.4992109,39.5084019 44.6555781,39.9804087 L24.3575391,51.6262832 C23.5403203,52.1245723 22.5123281,52.1245723 21.6686953,51.6262832 L1.37083594,39.9804087 C0.948929687,39.7444053 0.606265625,39.4295553 0.369078125,39.009934 C0.105476562,38.5903128 0,38.1444094 0,37.672045 L0,14.3541925 C0,13.3837179 0.500789062,12.491911 1.37101563,12.0199042 Z M32.1078203,14.5377872 C31.4147694,14.5348957 30.749258,14.8075453 30.2591927,15.2951641 C29.7691273,15.782783 29.4951098,16.444972 29.4980391,17.134563 L29.4980391,30.0655834 L18.5843594,17.0821774 L17.7937344,16.1378062 C16.9238672,15.0623815 15.4739687,14.5640925 14.2348437,14.5640925 C12.5215234,14.5640925 11.2825549,15.6919028 11.2825549,17.0821774 L11.2825549,34.8918533 C11.2796492,35.5814132 11.5536421,36.2435748 12.0436685,36.7311885 C12.5336949,37.2188021 13.1991599,37.4914728 13.8921797,37.4886291 C14.5852306,37.4915206 15.250742,37.218871 15.7408073,36.7312522 C16.2308727,36.2436333 16.5048902,35.5814443 16.5019609,34.8918533 L16.5019609,21.9869363 L28.2062656,35.8886101 C29.0761328,36.9640348 30.5260312,37.4623238 31.7651562,37.4623238 C33.4784766,37.4623238 34.7174451,36.3345135 34.7174451,34.9444177 L34.7174451,17.134563 C34.7203508,16.4450031 34.4463579,15.7828415 33.9563315,15.2952278 C33.4663051,14.8076142 32.8008401,14.5349435 32.1078203,14.5377872 Z"></path>
</svg><span>nginx</span></a><!--rehype:style=background: rgb(0 193 9/var(\-\-bg\-opacity));-->
<a href="./docs/npm.html" style="background: rgb(203 2 0/var(\-\-bg\-opacity));"><svg viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg" fill="currentColor" height="1em" width="1em">
<path d="M1.763 0C.786 0 0 .786 0 1.763v20.474C0 23.214.786 24 1.763 24h20.474c.977 0 1.763-.786 1.763-1.763V1.763C24 .786 23.214 0 22.237 0zM5.13 5.323l13.837.019-.009 13.836h-3.464l.01-10.382h-3.456L12.04 19.17H5.113z"></path>
</svg>
@ -125,13 +134,7 @@
<path fill="none" d="M0 0h24v24H0z"></path>
<path d="M10 2a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1H8v2h5V9a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-1H8v6h5v-1a1 1 0 0 1 1-1h6a1 1 0 0 1 1 1v4a1 1 0 0 1-1 1h-6a1 1 0 0 1-1-1v-1H7a1 1 0 0 1-1-1V8H4a1 1 0 0 1-1-1V3a1 1 0 0 1 1-1h6zm9 16h-4v2h4v-2zm0-8h-4v2h4v-2zM9 4H5v2h4V4z"></path>
</svg>
<span>XPath</span></a><!--rehype:style=background: rgb(91 163 230/var(\-\-bg\-opacity));-->
<a href="./docs/yaml.html" style="background: rgb(91 163 230/var(\-\-bg\-opacity));"><svg xmlns="http://www.w3.org/2000/svg" fill="currentColor" viewBox="0 0 512 470.647">
<polygon points="235.793 0 143.978 137.674 143.978 224.949 87.702 224.949 87.702 137.674 0 0 63.25 0 119.018 88.646 175.243 0 235.793 0 235.793 0"></polygon>
<path d="M330.294,175.451h-101.861l-20.717,50.024h-45.106l95.38,-224.949h46.137l91.51,224.949h-48.2l-17.144,-50.024zm-16.92,-44.911l-31.226,-82.55l-34.837,82.55h66.063z"></path>
<polygon points="87.701 250.177 87.701 470.647 135.004 470.647 135.004 318.569 184.509 420.789 221.743 420.789 272.939 314.976 272.939 470.602 318.318 470.602 318.318 250.177 256.358 250.177 201.381 349.883 149.021 250.177 87.701 250.177 87.701 250.177"></polygon>
<polygon points="512 422.735 395.638 422.735 395.638 250.125 347.442 250.125 347.442 469.647 512 469.647 512 422.737 512 422.735"></polygon>
</svg><span>YAML</span></a><!--rehype:style=background: rgb(91 163 230/var(\-\-bg\-opacity));--></p>
<span>XPath</span></a><!--rehype:style=background: rgb(91 163 230/var(\-\-bg\-opacity));--></p>
<!--rehype:class=home-card-->
</div></div></div><div class="wrap"><div class="wrap-header h2wrap"><h2 id="linux-命令"><a aria-hidden="true" tabindex="-1" href="#linux-命令"><span class="icon icon-link"></span></a>Linux 命令</h2><div class="wrap-body">
<p class="home-card"><a href="./docs/chmod.html" style="background: rgb(239 68 113/var(\-\-bg\-opacity));"><svg viewBox="0 0 1024 1024" version="1.1" fill="currentColor" xmlns="http://www.w3.org/2000/svg" height="1em" width="1em"><path d="M912.9 130.6c-26.1 4.5-52.8 6.9-80.2 6.9-115.4 0-221.1-41.9-302.6-111.2-10.6-9-26.2-9-36.8 0-81.5 69.4-187.2 111.2-302.6 111.2-27 0-53.5-2.3-79.2-6.7-17.2-2.9-32.9 10.4-33 27.9-0.2 109.1-0.4 238.1-0.4 242.5 0 471 394.5 592.7 431 603 1.8 0.5 3.6 0.5 5.4 0C550.9 994 943 873 945.5 405.7l0.4-247c0-17.6-15.8-31.1-33-28.1zM546 568.9v154.5c0 18.8-15.2 34-34 34s-34-15.2-34-34V568.9c-68.2-15.5-119.1-76.4-119.1-149.3 0-84.5 68.5-153.1 153.1-153.1S665.1 335 665.1 419.6c0 72.9-50.9 133.9-119.1 149.3z"></path></svg><span>Chmod</span></a><!--rehype:style=background: rgb(239 68 113/var(\-\-bg\-opacity));-->

View File

@ -677,6 +677,9 @@ body:not(.home) .h2wrap > h2 a::after {
.cols-5 {
grid-template-columns: repeat(5,minmax(0,1fr)) !important;
}
.cols-6 {
grid-template-columns: repeat(6,minmax(0,1fr)) !important;
}
.col-span-2 {
grid-column: span 2/span 2;
}
@ -886,6 +889,13 @@ body:not(.home) .h2wrap > h2 a::after {
.footer-wrap {
font-size: 0.75rem;
}
table td, table th {
display: block;
text-align: left !important;
}
table td + td, table th + th {
padding-top: 0 !important;
}
}
@media (min-width: 768px) {