Nginx 反向代理 (泛域名->泛域名,https,静态文件)
<h1 id="nginx-反向代理配置指南-泛域名---泛域名-https-静态文件">Nginx 反向代理配置指南 (泛域名 -> 泛域名, HTTPS, 静态文件)</h1><h2 id="完整版">完整版</h2>
<pre><code class="language-nginx">server
{
# 监听80端口
listen 80;
listen 443 ssl http2;;
# ......
# 泛域名
server_name *.{fromName}.com;
# 获取 "*" 参数
set $subdm '';
if ($host ~* "(.*)\.{fromName}\.com") {
set $subdm $1;
}
location / {
# DNS
resolver 114.114.114.114;
# 设置请求头
proxy_set_header Host $subdm.{toName}.cn;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass_header X-Accel-Buffering;
# 跳转
proxy_pass https://$subdm.{toName}.cn;
# 带入ssl信息
proxy_ssl_server_name on;
proxy_ssl_name $subdm.{toName}.cn;
# 超时设置
proxy_read_timeout 1800s;
}
}
</code></pre>
<h2 id="1-泛域名配置">1. 泛域名配置</h2>
<p>在 Nginx 的 <code>server</code> 块中使用 <code>server_name</code> 参数和 <code>*</code> 通配符来配置泛域名。例如,<code>server_name *.{fromName}.com</code> 表示 {fromName}.com 的所有二级域名。</p>
<h2 id="2-获取二级域名变量">2. 获取二级域名变量</h2>
<p>可以使用正则表达式和变量来获取二级域名:</p>
<pre><code class="language-nginx">if ($host ~* "(.*).{fromName}.com") {
set $subdomain $1; # 其中 $1 表示匹配的二级域名
}
location / {
proxy_pass https://$subdomain.{toName}.cn;
}
</code></pre>
<h2 id="3-解决指向-https-时的-502-错误问题">3. 解决指向 HTTPS 时的 502 错误问题</h2>
<h3 id="31-dns-解析问题">3.1 DNS 解析问题</h3>
<p>当跳转路径为域名时,确保两边的 Nginx 都配置了相同的 DNS。示例如下:</p>
<pre><code class="language-nginx">resolver 144.144.144.144;
</code></pre>
<h3 id="32-ssl-问题">3.2 SSL 问题</h3>
<h4 id="321-跳转路径为-ip-时">3.2.1 跳转路径为 IP 时</h4>
<p>添加以下配置以传递本服务器的 SSL 信息到跳转的域名:</p>
<pre><code class="language-nginx">proxy_ssl_server_name on;
</code></pre>
<h4 id="322-跳转路径为域名时">3.2.2 跳转路径为域名时</h4>
<p>添加以下配置:</p>
<pre><code class="language-nginx">proxy_ssl_name $subdomain.{toName}.cn;
proxy_set_header Host $subdomain.{toName}.cn;
</code></pre>
<h2 id="4-静态文件处理">4. 静态文件处理</h2>
<p>确保静态文件不会被提前捕获处理,避免影响反向代理的正常工作。</p>
<h3 id="匹配优先级">匹配优先级</h3>
<ol>
<li><strong>精确匹配</strong>:如果有精确匹配的 <code>location</code>,Nginx 将优先使用它。</li>
<li><strong>正则匹配</strong>:如果没有精确匹配,Nginx 会按照配置文件中的顺序检查正则表达式的 <code>location</code>,第一个匹配的正则表达式会被使用。</li>
<li><strong>普通匹配</strong>:如果没有正则匹配,Nginx 会使用最长匹配的普通 <code>location</code>。</li>
</ol>
<h3 id="示例配置">示例配置</h3>
<h4 id="处理图片等静态资源">处理图片等静态资源</h4>
<pre><code class="language-nginx">location ~* .(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
error_log off;
access_log off;
}
</code></pre>
<h4 id="处理-js-和-css-文件">处理 JS 和 CSS 文件</h4>
<pre><code class="language-nginx">location ~* .(js|css)?$ {
expires 12h;
error_log off;
access_log off;
}
</code></pre>
<h2 id="参考">参考</h2>
<p>域名反向代理<br>
nginx https 502 DNS相关<br>
nginx https 502</p>
<h2 id="扩展">扩展</h2>
<p>proxy介绍<br>
expires介绍</p><br><br>
来源:https://www.cnblogs.com/cyamazing/p/18152564
頁:
[1]