擦点护手霜 發表於 2024-6-21 15:26:00

Nginx 反向代理 (泛域名->泛域名,https,静态文件)

<h1 id="nginx-反向代理配置指南-泛域名---泛域名-https-静态文件">Nginx 反向代理配置指南 (泛域名 -&gt; 泛域名, 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]
查看完整版本: Nginx 反向代理 (泛域名->泛域名,https,静态文件)