姝岩 發表於 2019-7-15 20:59:00

Nginx 配置 HTTPS(多域名)

<p>平常开发要求比较低, 依然在用 HTTP, 但到了微信小程序就不行了, 腾讯和苹果都对 API 提出了 HTTPS 的要求. 尤其是苹果, 不仅要求 HTTPS, 还要求 <code>TLS</code> 协议版本要在 1.2 以上, 这又被称为 App Transport Security(ATS).</p>
<p>关于自己的标准是否满足 ATS, 可以使用此工具检测: ATS(App Transport Security)检测.</p>
<p><img src="https://img2018.cnblogs.com/blog/1173046/201907/1173046-20190715205829157-558501159.jpg" alt="-w769" loading="lazy"></p>
<h2 id="服务器配置">服务器配置</h2>
<p>使用 Nginx 进行 HTTPS 配置, 服务器几乎不用做改动, 依旧是祖传的 8080 端口, 以我所使用的 Spring Boot 为例, 仅仅是在 <code>application.yml</code> 中增加了两行配置而已.</p>
<pre><code class="language-yml">server:
    port: 8080
    tomcat:
      protocol_header: x-forwarded-proto
    use-forward-headers: true
    address: 127.0.0.1
</code></pre>
<h2 id="证书申请购买">证书申请/购买</h2>
<p>在域名的基本信息页, 点击免费开启 SSL 证书, 输入相应的域名, 点击「申请」即可申请免费的 DV SSL 证书, 还需要做一些简单的信息补全等, 即可提交申请. 如果备案信息都齐全的话, 很快就可以验证成功, 在证书管理页面即可查看证书.<br>
<img src="https://img2018.cnblogs.com/blog/1173046/201907/1173046-20190715205831180-1097279302.jpg" alt="-w1026" loading="lazy"></p>
<p><img src="https://img2018.cnblogs.com/blog/1173046/201907/1173046-20190715205831268-818519447.jpg" alt="-w1174" loading="lazy"></p>
<p>选择下载证书for Nginx, 证书一式两份, 后缀分别为 <code>pem</code> 和 <code>key</code>, 下载完上传到服务器.</p>
<h2 id="域名映射">域名映射</h2>
<p>我选择为两个子域名申请证书, 同时将这两个域名映射到同一个IP.</p>
<p><img src="https://img2018.cnblogs.com/blog/1173046/201907/1173046-20190715205828543-198227705.jpg" alt="-w1181" loading="lazy"></p>
<h2 id="nginx-配置">Nginx 配置</h2>
<p>首先, 需要把 http 都转发到 https, 需要使用 <code>rewrite</code>, 这样, 当访问 <code>http://example.cn</code> 会自动转发到 <code>https://example.cn</code>.</p>
<pre><code class="language-ini">        server {
                   listen 80; # redirect to 443
                  server_name AAA.example.cn www.AAA.example.cn;
                  rewrite ^(.*)$https://$host$1 permanent;
        }

      server {
                listen 80; # redirect to 443
                server_name BBB.example.cn www.BBB.example.cn;
                rewrite ^(.*)$https://$host$1 permanent;
      }
</code></pre>
<p>然后就是真正的 https 部分了, 虽然域名不同, 但都监听 443 端口, 但有着不同的 <code>server_name</code>, 这样当收到请求时就可以根据请求的 <code>server_name</code> 不同来转发到不同的服务.</p>
<p>而服务自身像往常一样只要继续监听 <code>8090</code>、<code>8091</code> 即可.</p>
<pre><code class="language-ini">        server {
                    listen 443 ssl;
                    server_name AAA.example.cn www.AAA.example.cn;   

                    ssl_certificate "/home/yushan/demontf/2076603_AAA.example.cn.pem";   
                    ssl_certificate_key "/home/yushan/demontf/2076603_AAA.example.cn.key";   
            
                    location / {
                                        proxy_pass http://127.0.0.1:8090;
                                        proxy_set_header X-Real-IP $remote_addr;
                                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                                        proxy_set_header Host $http_host;
                                        proxy_set_header X-NginX-Proxy true;
                                        proxy_redirect default;
                }
        }


        server {
                    listen 443 ssl; # redirect to https
                    server_name BBB.example.cn www.BBB.example.cn;
                   
                    ssl_certificate "/home/yushan/demontf/2005538_BBB.example.cn.pem";
                    ssl_certificate_key "/home/yushan/demontf/2005538_BBB.example.cn.key";
                   
                    location / {
                                  proxy_pass http://127.0.0.1:8091;
                                  proxy_set_header X-Real-IP $remote_addr;
                                  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                                  proxy_set_header Host $http_host;
                                  proxy_set_header X-NginX-Proxy true;
                                  proxy_redirect default;
                    }
        }
</code></pre>
<p>配置修改好之后, 需要重启 Nginx.</p>
<h2 id="参考">参考</h2>
<p>Nginx 配置 HTTPS 服务器 | Aotu.io「凹凸实验室」<br>
阿里云+Https+Nginx+SpringBoot | tt_study</p><br><br>
来源:https://www.cnblogs.com/imzhizi/p/https-server-using-nginx.html
頁: [1]
查看完整版本: Nginx 配置 HTTPS(多域名)