PageSourceSearch

https://www.yimo.link/assets/devops_nginx_install_use.html-CdK3rHib.js

js yimo.link collected 2026-10-08 04:52:28 UTC 68,966 bytes, 300 lines download raw bytes

1import{_ as n}from"./plugin-vue_export-helper-DlAUqK2U.js";import{c as a,g as e,o as i}from"./app-6RIE0gzA.js";const l="/assets/662652-20231101191634640-1926230649-Bv4rU5gA.png",p="/assets/662652-20231101191634617-224049270-CC3fRPz1.png",d="/assets/662652-20231101191634540-1060068344-BXIe0yr1.png",r="/assets/662652-20231101191634517-1520098231-DHL2JD0C.png",c="/assets/662652-20231101191634524-851084188-0LKI2GCs.png",t="/assets/662652-20231101191634574-1810896466-C0QjhnpJ.png",o="/assets/662652-20231101191634646-121914024-OH6noi0i.png",v="/assets/662652-20231101191634521-1619701347-BNzsjeB-.png",h="/assets/662652-20231101191634516-634155082-CMMEfaAo.png",m="/assets/662652-20231101191634453-1642657879-B5CMyHPx.png",u={};function b(g,s){return i(),a("div",null,s[0]||(s[0]=[e(`<h2 id="前言" tabindex="-1"><a class="header-anchor" href="#前言"><span>前言</span></a></h2><blockquote><p>nginx 是一个高性能的开源反向代理服务器和 web 服务器,一般用来搭建静态资源服务器、负载均衡器、反向代理,本文将分享其在 Windows/docker 中的使用,使用 nssm 部署成服务的方案脚本,局域网中自定义域名解决https提示不安全的解决方案,以及一路踩过的坑。</p></blockquote><h3 id="特点" tabindex="-1"><a class="header-anchor" href="#特点"><span>特点</span></a></h3><ul><li>高性能:事件驱动的异步架构,能够处理大量并发连接</li><li>静态资源服务器:部署前端静态页面及静态资源</li><li>反向代理服务器:接收客户端请求,并将请求转发到后端服务,可以实现负载均衡、请求分发和缓存等功能</li><li>支持 HTTPS</li></ul><h3 id="使用情况" tabindex="-1"><a class="header-anchor" href="#使用情况"><span>使用情况</span></a></h3><ul><li><p>配置域名转发到项目服务</p></li><li><p>外网穿透请求转发到局域网服务器</p></li><li><p>测试环境项目的 https 配置</p></li><li><p>需要明白 nginx 默认启动后会发生什么?</p><ul><li>监听指定端口(默认 80)</li><li>拦截本机访问 80 端口的请求到 nginx 来进行处理</li><li>可以添加配置监听不同的端口</li><li>同样监听 80,但是可以通过 server_name 来指定不同的域名使用不同的规则</li><li>本地测试可以通过修改 hosts 文件(C:\\Windows\\System32\\drivers\\etc\\hosts)来将域名请求转发到本机</li><li>
1服务器需要解析域名到服务器 IP,不同的云商还需要注意其安全组,防火墙是否开启或需要设置规则</li></ul></li><li><p>Windows 中路径需要使用 / 或者 \\,如路径 <code>D:\\Software\\nginx-1.24.0\\ssl</code> nginx.conf 需要配置为 <code>D:/Software/nginx-1.24.0/ssl/</code> 或 <code>D:\\Software\\nginx-1.24.0\\ssl\\</code></p></li></ul><h2 id="实践" tabindex="-1"><a class="header-anchor" href="#实践"><span>实践</span></a></h2><h3 id="准备" tabindex="-1"><a class="header-anchor" href="#准备"><span>准备</span></a></h3><ul><li><p>本文版本:v1.24.0</p></li><li><p>使用端口:80 443</p></li><li><p>最基本组成:一个 server 节点一个域名配置,要添加其他配置添加 server 节点即可</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span> worker_processes  1;</span></span>
2<span class="line"><span> events {</span></span>
3<span class="line"><span>     worker_connections  1024;</span></span>
4<span class="line"><span> }</span></span>
5<span class="line"><span> http {</span></span>
6<span class="line"><span>     server {</span></span>
7<span class="line"><span>         listen       80;</span></span>
8<span class="line"><span>         server_name  localhost;</span></span>
9<span class="line"><span>         error_page   500 502 503 504  /50x.html;</span></span>
10<span class="line"><span>         location = /50x.html {</span></span>
11<span class="line"><span>             root   html;</span></span>
12<span class="line"><span>         }</span></span>
13<span class="line"><span>     }</span></span>
14<span class="line"><span> }</span></span>
15<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li></ul><h3 id="windows-安装使用-nginx" tabindex="-1"><a class="header-anchor" href="#windows-安装使用-nginx"><span>Windows 安装使用 nginx</span></a></h3><h4 id="安装运行" tabindex="-1"><a class="header-anchor" href="#安装运行"><span>安装运行</span></a></h4><ul><li><p>直接官网下载即可 <a href="http://nginx.org/download/nginx-1.24.0.zip" target="_blank" rel="noopener noreferrer">v1.24.0</a></p></li><li><p>下载后解压到:D:\\Software\\nginx-1.24.0</p></li><li><p>在目录输入框打开 cmd 并运行:<code>start nginx</code>运行 nginx,如果端口没有被占用的话访问 localhost 即可出现 welcome 页面</p><p><img src="`+l+'" alt="" loading="lazy"><img src="'+p+'" alt="" loading="lazy"></p></li><li><p>尝试修改配置:D:\\Software\\nginx-1.24.0\\confi\\nginx.conf 添加一个文本返回</p><figure><img src="'+d+`" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure></li><li><p>添加的文本及 json 返回</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span> #server{....</span></span>
16<span class="line"><span> #返回文本</span></span>
17<span class="line"><span> location /text {</span></span>
18<span class="line"><span>     add_header Content-Type text/plain;</span></span>
19<span class="line"><span>     return 200 &#39;This is a plain text response.&#39;;</span></span>
20<span class="line"><span> }       </span></span>
21<span class="line"><span> #返回json </span></span>
22<span class="line"><span> location /json {</span></span>
23<span class="line"><span>     add_header Content-Type application/json;</span></span>
24<span class="line"><span>     return 200 &#39;{&quot;message&quot;: &quot;This is a JSON response.233&quot;}&#39;;</span></span>
25<span class="line"><span> }</span></span>
26<span class="line"><span></span></span>
27<span class="line"><span> #默认配置</span></span>
28<span class="line"><span> location / {</span></span>
29<span class="line"><span>     root   html;</span></span>
30<span class="line"><span>     index  index.html index.htm;</span></span>
31<span class="line"><span> }</span></span>
32<span class="line"><span> #...}</span></span>
33<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li></ul><h4 id="域名配置" tabindex="-1"><a class="header-anchor" href="#域名配置"><span>域名配置</span></a></h4><ul><li><p>因在本地测试,所以需要使用域名访问到 nginx,需要配置 hosts(服务器外网域名配置就将域名解析
33到服务器)</p></li><li><p>添加一条记录:<code> 127.0.0.1 \`\`nginx.devops.test.com</code> 现在默认就访问<code>nginx.devops.test.com</code> 的时候就请求到了 nginx 的默认配置了,nginx 默认监听了 localhost:80 使其返回我们指定的内容</p><figure><img src="`+r+`" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure></li><li><p>添加 server 配置节点,重载配置后访问,即可看到访问显示了配置中的内容</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>    server {</span></span>
34<span class="line"><span>            listen       80;</span></span>
35<span class="line"><span>            server_name  nginx.devops.test.com;</span></span>
36<span class="line"><span>           location / {</span></span>
37<span class="line"><span>                add_header Content-Type text/plain;</span></span>
38<span class="line"><span>                return 200 &#39;nginx.devops.test.com&#39;;</span></span>
39<span class="line"><span>            }</span></span>
40<span class="line"><span>        }</span></span>
41<span class="line"><span>    \`\`\`</span></span>
42<span class="line"><span> ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e62a40257ae548b29b9fab8389027ad5~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=359&amp;h=23&amp;s=1371&amp;e=png&amp;b=0c0c0c)</span></span>
43<span class="line"><span></span></span>
44<span class="line"><span> ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d33c2a30c4e14bd68faacd92ac8330d8~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=410&amp;h=122&amp;s=6676&amp;e=png&amp;b=fcfcfc)</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>因为浏览器的一些机制,可能会自己默认跳转到 https,然后还看不到协议,此时就需要手动改下</p></li></ul><h4 id="ssl-证书申请" tabindex="-1"><a class="header-anchor" href="#ssl-证书申请"><span>SSL 证书申请</span></a></h4><p>为了给网站加把锁(数据传输的私密性),一般个人项目用免费的就行,不过有限制,比如通配符、有效期、安全性等,企业一般会使用付费证书,自行购买即可,一般云商也会提供免费证书,其他免费的目前使用过的就下面两种</p><ul><li>在线网站申请:可以在 <a href="https://freessl.cn/" target="_blank" rel="noopener noreferrer">freessl</a> 根据需要申请免费/付费证书,其还包含有证书管理和到期提醒等服务</li><li>win-acme:一个免费的开源工具,用于 Windows 上的 Let&#39;s Encrypt 证书的自动化获取和续订</li></ul><p>如果本地也需要使用 https 的话,也可以通过 nginx 来配置证书,为应用加把锁。服务器的证书配置使用上面两种生成,参考下面配置即可</p><h4 id="nginx-本地配置-https" tabindex="-1"><a class="header-anchor" href="#nginx-本地配置-https"><span>nginx 本地配置 https</span></a></h4><ul><li>使用 openssl 生成自签证书(会提示不安全,下一步解决)</li></ul><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>#依次执行,输入信息,我这里都输入了 ym</span></span>
45<span class="line"><span>openssl genrsa -out server.key 1024</span></span>
46<span class="line"><span>openssl req -new -key server.key -out server.csr</span></span>
47<span class="line"><span>openssl genrsa -out ca.key 1024</span></span>
48<span class="line"><span>openssl req -new -key ca.key -out ca.csr</span></span>
49<span class="line"><span>openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt</span></span>
50<span class="line"><span>openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt</sp
50an></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><figure><img src="`+c+'" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure><ul><li>从图里面可以看到都加上 https 了,怎么还是不安全,甚至第一次还被拦截了,这个是浏览器机制问题,找了一晚上,终于找到了<a href="https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/" target="_blank" rel="noopener noreferrer">解决方案</a> 思路来源 <a href="https://stackoverflow.com/questions/7580508/getting-chrome-to-accept-self-signed-localhost-certificate#answer-60516812" target="_blank" rel="noopener noreferrer">stackoverflow</a>,下面详细说明步骤</li></ul><ol><li><p>生成 CA 证书(所在目录:D:/Software/nginx-1.24.0/ssl)</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>   winpty openssl genrsa -des3 -out myCA.key 2048</span></span>\n<span class="line"><span>   winpty openssl req -x509 -new -nodes -key myCA.key -sha256 -days 1825 -out myCA.pem</span></span>\n<span class="line"><span>   ```</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>导入 myCA.pem 证书到受信任的根证书颁发机构(Win+R 打开:<code>certlm.msc</code>)</p><figure><img src="'+t+`" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure></li><li><p>创建 CA 签名证书(不同域名创建不同的证书)</p></li></ol><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>winpty openssl genrsa -out nginx.devops.test.com.key 2048</span></span>
51<span class="line"><span>winpty openssl req -new -key nginx.devops.test.com.key -out nginx.devops.test.com.csr</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><ol start="4"><li><p>创建 X509 V3 证书扩展配置文件 nginx.devops.test.com。ext</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>  authorityKeyIdentifier=keyid,issuer</span></span>
52<span class="line"><span>  basicConstraints=CA:FALSE</span></span>
53<span class="line"><span>  keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment</span></span>
54<span class="line"><span>  subjectAltName = @alt_names</span></span>
55<span class="line"><span></span></span>
56<span class="line"><span>  [alt_names]</span></span>
57<span class="line"><span>  DNS.1 = nginx.devops.test.com</span></span>
58<span class="line"><span>  \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>生成证书</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>  winpty openssl x509 -req -in nginx.devops.test.com.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out nginx.devops.test.com.crt -days 825 -sha256 -extfile nginx.devops.test.com.ext</span></span>
59<span class="line"><span>  \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>配置 nginx</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>      server {</span></span>
60<span class="line"><span>         listen       80;</span></span>
61<span class="line"><span>         listen       443 ssl;</span></span>
62<span class="line"><span>         server_name  nginx.devops.test.com;</span></span>
63<span class="line"><span></span></span>
64<span class="line"><span>         ssl_certificate      D:/Software/nginx-1.24.0/ssl/nginx.devops.test.com.crt;</span></span>
65<span class="line"><span>         ssl_certificate_key  D:/Software/nginx-1.24.0/ssl/nginx.devops.test.com.key;
65</span></span>
66<span class="line"><span></span></span>
67<span class="line"><span>         ssl_session_cache    shared:SSL:1m;</span></span>
68<span class="line"><span>         ssl_session_timeout  5m;</span></span>
69<span class="line"><span></span></span>
70<span class="line"><span>         ssl_ciphers  HIGH:!aNULL:!MD5;</span></span>
71<span class="line"><span>         ssl_prefer_server_ciphers  on;</span></span>
72<span class="line"><span>         location / {</span></span>
73<span class="line"><span>              add_header Content-Type text/plain;</span></span>
74<span class="line"><span>              return 200 &#39;nginx.devops.test.com666&#39;;</span></span>
75<span class="line"><span>          }</span></span>
76<span class="line"><span>      }</span></span>
77<span class="line"><span>  \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>成功,没有不安全字样了</p><figure><img src="`+o+`" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure></li><li><p>如果要在局域网其他机器访问,也需要执行第 2 步操作导入 myCA.pem 证书,并配置对应的 hosts</p></li></ol><h4 id="使用-nssm-创建-nginx-服务" tabindex="-1"><a class="header-anchor" href="#使用-nssm-创建-nginx-服务"><span>使用 nssm 创建 nginx 服务</span></a></h4><ul><li><p>每次改完配置还要敲命令重启,开机还要启动,那很明显是不太方便的,所以部署 nginx 服务就很有必要了</p></li><li><p>和 Windows 计划任务设置开机启动相比,我更倾向和习惯于使用 <a href="https://nssm.cc/download" target="_blank" rel="noopener noreferrer">nssm </a>(一个服务封装程序,它可以方便的将程序封装成 windows 服务运行)来为应用创建一个服务进行管理。</p></li><li><p>下面分享两个快速创建服务的脚本及使用。通过这两个脚本,只需修改对应路径,就可以为应用创建服务并做到开机自启了</p></li><li><p>添加一个启动 nginx 的脚本 start.bat</p><ul><li>放在 nginx 目录中(D:\\Software\\nginx-1.24.0\\start.bat ) ,以<strong>管理员</strong> <strong>身份运行</strong>即可删除 nginx 进程并重新启动</li><li>删除进程并重启,<strong>测试环境使用,生产环境不建议直接使用</strong></li><li><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>@echo off</span></span>
78<span class="line"><span>cd  /d %~dp0</span></span>
79<span class="line"><span>echo kill nginx</span></span>
80<span class="line"><span>taskkill /fi &quot;imagename eq nginx.EXE&quot; /f</span></span>
81<span class="line"><span>echo start nginx</span></span>
82<span class="line"><span>start nginx</span></span>
83<span class="line"><span>echo start nginx success</span></span>
84<span class="line"><span>pause</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li></ul></li><li><p>将 start.bat 脚本使用 nssm 的方式设置为服务 <a href="https://nssm.cc/release/nssm-2.24.zip" target="_blank" rel="noopener noreferrer">nssm v2.24 下载</a></p><ul><li><p>下载后解压:D:\\Software\\nssm\\nssm-2.24\\win64</p></li><li><p>在目录添加 Nginx-service.bat,以快速创建并启动 nginx 服务,根据需要修改服务名和 nginx 启动脚本的路径即可</p><ul><li><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>@echo off</span></span>
85<span class="line"><span>cd  /d %~dp0</span></span>
86<span class="line"><span>nssm stop Nginx-service</span></span>
87<span class="line"><span>nssm remove Nginx-service confirm</span></span>
88<span class="line"><span>nssm install Nginx-service D:\\Software\\nginx-1.24.0\\start.bat</span></span>
89<span class="line"><span>sc start Nginx-service</span></span>
90<span class="line"><span>pause</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li></ul></li><li><p>以<strong>管理员</strong> <strong>身份运行</strong>,即可创建并启动服务,</p><ul><li><img src="`+v+'" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></li></ul></li><li><p>至此,电脑重启服务也将自启,并且还可以通过服务的重新启动来重启应用</p></li></ul></li></ul><h4 id="常用命令" tabindex="-1"><a class="header-anchor" href="#常用命令"><span>常用命令</span></a></h4><ul><li><p>启动:<code>start nginx</code></p></li><li><p>重载配置:<code>nginx -s reload</code>
90 如果出错会回滚到上一次正确配置文件保持正常运行,可能会存在缓存,Ctrl+F5 刷新浏览器</p></li><li><p>停止 nginx(删除 nginx 进程):<code>taskkill /fi &quot;imagename eq nginx.EXE&quot; /f</code></p><ul><li>windows 下使用 nginx 一直有个问题就是重载配置后,不管有没有问题都可能会启动多个 nginx 进程,最后重载配置无效,就只能删除进程后再启动了</li></ul></li></ul><h3 id="使用-docker-compose-安装-nginx" tabindex="-1"><a class="header-anchor" href="#使用-docker-compose-安装-nginx"><span>使用 Docker Compose 安装 nginx</span></a></h3><blockquote><p>本篇文章基于 Docker V24 及 Docker Compose V2,安装可以参考之前的<a href="https://juejin.cn/post/7283873796977197108" target="_blank" rel="noopener noreferrer">文章</a></p></blockquote><h4 id="配置说明" tabindex="-1"><a class="header-anchor" href="#配置说明"><span>配置说明</span></a></h4><ul><li><p>镜像版本:<code>nginx:1.24.0</code></p></li><li><p>指定端口:80 443</p></li><li><p>指定时区:<code>TZ : &#39;Asia/Shanghai&#39;</code>,让日志文件显示北京时间</p></li><li><p>指定挂载目录</p><ul><li><code>./config/nginx.conf:/etc/nginx/nginx.conf</code>:默认配置文件,会加载 conf.d 下的所有配置</li><li><code>./config/conf.d:/etc/nginx/conf.d</code>:自定义配置文件</li><li><code>./html:/usr/share/nginx/html</code>:默认的静态文件目录</li><li><code>./logs:/var/log/nginx</code>:默认的日志目录</li><li><code>./ssl:/ssl</code>:证书目录,配置中使用 /ssl/xxx 指定</li></ul></li><li><p>配置重载:<code>docker exec nginx_1_24 nginx -s reload</code></p></li><li><p>指定网络:devopsnetwork (<code>docker network create devopsnetwork</code>)</p></li><li><p>目录结构</p><figure><img src="'+h+`" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure></li></ul><h4 id="配置文件-compose-yml" tabindex="-1"><a class="header-anchor" href="#配置文件-compose-yml"><span>配置文件 compose.yml</span></a></h4><ul><li>将准备好的 compose.yml config ssl html 拷贝到服务器</li><li>然后运行<code>docker compose up -d</code>即可</li></ul><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>version: &#39;3.1&#39;</span></span>
91<span class="line"><span>services:</span></span>
92<span class="line"><span>  nginx:</span></span>
93<span class="line"><span>    image: nginx:1.24.0</span></span>
94<span class="line"><span>    container_name: nginx_1_24</span></span>
95<span class="line"><span>    restart: always</span></span>
96<span class="line"><span>    environment:</span></span>
97<span class="line"><span>      TZ : &#39;Asia/Shanghai&#39;</span></span>
98<span class="line"><span>    ports:</span></span>
99<span class="line"><span>      - &quot;80:80&quot;</span></span>
100<span class="line"><span>      - &quot;443:443&quot;</span></span>
101<span class="line"><span>    volumes:</span></span>
102<span class="line"><span>      - ./config/nginx.conf:/etc/nginx/nginx.conf</span></span>
103<span class="line"><span>      - ./config/conf.d:/etc/nginx/conf.d</span></span>
104<span class="line"><span>      - ./html:/usr/share/nginx/html</span></span>
105<span class="line"><span>      - ./logs:/var/log/nginx</span></span>
106<span class="line"><span>      - ./ssl:/ssl</span></span>
107<span class="line"><span>      </span></span>
108<span class="line"><span>    networks:</span></span>
109<span class="line"><span>      - devopsnetwork</span></span>
110<span class="line"><span></span></span>
111<span class="line"><span>networks:</span></span>
112<span class="line"><span>  devopsnetwork:</span></span>
113<span class="line"><span>    external: true</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="默认的-nginx-conf-v1-24" tabindex="-1"><a class="header-anchor" href="#默认的-nginx-conf-v1-24"><span>默认的 nginx.conf v1.24</span></a></h4><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>user  nginx;</span></span>
114<span class="line"><span>worker_processes  auto;</span></span>
115<span class="line"><span></span></span>
116<span class="line"><span>error_log  /var/log/nginx/error.log notice;</span></span>
117<span class="line"><span>pid        /var/run/nginx.pid;</span></span>
118<span class="line"><span></span></span>
119<span class="line"><span>events {</span></span>
120<span class="line"><span>    worker_connections  1024;</span></span>
121<span class="line"><span>}</span></span>
122<span class="line"><span></span></span>
123<span class="line"><span>http {</span></span>
124<span class="line"><span>    include       /etc/nginx/mime.types;</span></span>
125<span class="line"><span>
125    default_type  application/octet-stream;</span></span>
126<span class="line"><span></span></span>
127<span class="line"><span>    log_format  main  &#39;$remote_addr - $remote_user [$time_local] &quot;$request&quot; &#39;</span></span>
128<span class="line"><span>                      &#39;$status $body_bytes_sent &quot;$http_referer&quot; &#39;</span></span>
129<span class="line"><span>                      &#39;&quot;$http_user_agent&quot; &quot;$http_x_forwarded_for&quot;&#39;;</span></span>
130<span class="line"><span></span></span>
131<span class="line"><span>    access_log  /var/log/nginx/access.log  main;</span></span>
132<span class="line"><span></span></span>
133<span class="line"><span>    sendfile        on;</span></span>
134<span class="line"><span>    #tcp_nopush     on;</span></span>
135<span class="line"><span></span></span>
136<span class="line"><span>    keepalive_timeout  65;</span></span>
137<span class="line"><span></span></span>
138<span class="line"><span>    #gzip  on;</span></span>
139<span class="line"><span></span></span>
140<span class="line"><span>    include /etc/nginx/conf.d/*.conf;</span></span>
141<span class="line"><span>}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="自定义配置-conf-d-default-conf" tabindex="-1"><a class="header-anchor" href="#自定义配置-conf-d-default-conf"><span>自定义配置 conf.d/default.conf</span></a></h4><p>将前文 Windows 的配置部分修改到 default.conf 如下所示</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>server {</span></span>
142<span class="line"><span>  listen       80;</span></span>
143<span class="line"><span>  listen       443 ssl;</span></span>
144<span class="line"><span>  server_name  nginx.devops.test.com;</span></span>
145<span class="line"><span></span></span>
146<span class="line"><span>  ssl_certificate      /ssl/nginx.devops.test.com.crt;</span></span>
147<span class="line"><span>  ssl_certificate_key  /ssl/nginx.devops.test.com.key;</span></span>
148<span class="line"><span></span></span>
149<span class="line"><span>  ssl_session_cache    shared:SSL:1m;</span></span>
150<span class="line"><span>  ssl_session_timeout  5m;</span></span>
151<span class="line"><span></span></span>
152<span class="line"><span>  ssl_ciphers  HIGH:!aNULL:!MD5;</span></span>
153<span class="line"><span>  ssl_prefer_server_ciphers  on;</span></span>
154<span class="line"><span>  location / {</span></span>
155<span class="line"><span>      add_header Content-Type text/plain;</span></span>
156<span class="line"><span>      return 200 &#39;nginx.devops.test.com 001&#39;;</span></span>
157<span class="line"><span>  }</span></span>
158<span class="line"><span>}</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div><h4 id="创建证书-ssl-目录" tabindex="-1"><a class="header-anchor" href="#创建证书-ssl-目录"><span>创建证书 ssl 目录</span></a></h4><p>上传生成的 ssl 证书或者在 linux 中使用上面 openssl 的方式重新生成域名证书,然后本地添加 pem 证书,即可使用 https</p><h3 id="nginx-的应用" tabindex="-1"><a class="header-anchor" href="#nginx-的应用"><span>Nginx 的应用</span></a></h3><ul><li>前面文章我们安装了 Apollo,RabbitMQ 及各种常用数据库,下面将通过 nginx 给之前文章中的应用配置域名转发</li><li>通过域名访问到各自应用中,而无需再使用 IP+端口来访问应用,这样就算后面部署方式/IP、端口发送变化,只需要修改 nginx 的转发配置即可</li></ul><h4 id="本地使用域名前的配置" tabindex="-1"><a class="header-anchor" href="#本地使用域名前的配置"><span>本地使用域名前的配置</span></a></h4><p>要想在局域网使用自定义的域名访问应用,需要先配置 hosts 文件,这里使用 hosts 将域名请求指向目标服务器 192.168.123.214</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>192.168.123.214 apollo.devops.test.com</span></span>
159<span class="line"><span>192.168.123.214 rabbitmq.devops.test.com</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div></div></div><p>还可以搭建一个 dns 服务,设置本机的 dns,即可将域名请求交友 dns 解析到对应服务,并且能够实现泛解析</p><h4 id="apollo-的转发配置" tabindex="-1"><a class="header-anchor" href="#apollo-的转发配置"><span>Apollo 的转发配置</span></a></h4><ul><li><p>Apollo 面板地址:http://192.168.123.214:8070/</p></li><li><p>设定域名:apollo.devops.test.com</p></li><li><p>对应 server 配置,因为同属一个网络,所以使用容器名加端口访问即可</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span> server {</span></span>
160<span class="line"><span>       listen       80;</span></span>
161<span class="line"><span>       server_name  apollo.devops.test.com;</span></span>
162<span class="line"><span>       location / {</span></span>
163<span class="line"><span>         proxy_pass   http://apollo_portal_2_1:8070/;</span></span>
164<span class="line"><span>         #上游主机名</span></span>
165<span class="line"><span>         proxy_set_header Host $host;</span></span>
166<span class="line"><span>         # 客户端发送的原始主机名</span></span>
167<span class="line"><span>         #proxy_set_header host $http_host; </span></span>
168<span class="line"><span>         proxy_set_header X-Real-IP $remote_addr;</span></span>
169<span class="line"><span>         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span></span>
170<span class="line"><span>         proxy_set_header X-Forwarded-Proto $scheme;</span></span>
171<span class="line"><span>       }</span></span>
172<span class="line"><span>   }</span></span>
173<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>Apollo 配置 https,并重定向 http 到 https</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span> server {</span></span>
174<span class="line"><span>     listen       80;</span></span>
175<span class="line"><span>     server_name  apollo.devops.test.com;</span></span>
176<span class="line"><span>     return 301 https://$host$request_uri;
176</span></span>
177<span class="line"><span> }</span></span>
178<span class="line"><span> server {</span></span>
179<span class="line"><span>     listen       443 ssl;</span></span>
180<span class="line"><span>     server_name  apollo.devops.test.com;</span></span>
181<span class="line"><span></span></span>
182<span class="line"><span>     ssl_certificate      /certs/apollo.devops.test.com/server.crt;</span></span>
183<span class="line"><span>     ssl_certificate_key  /certs/apollo.devops.test.com/server.key;</span></span>
184<span class="line"><span>     ssl_session_cache    shared:SSL:1m;</span></span>
185<span class="line"><span>     ssl_session_timeout  5m;</span></span>
186<span class="line"><span>     ssl_ciphers  HIGH:!aNULL:!MD5;</span></span>
187<span class="line"><span>     ssl_prefer_server_ciphers  on;</span></span>
188<span class="line"><span></span></span>
189<span class="line"><span>     location / {</span></span>
190<span class="line"><span>       proxy_pass   http://apollo_portal_2_1:8070/;</span></span>
191<span class="line"><span>       proxy_set_header host $http_host;</span></span>
192<span class="line"><span>       proxy_set_header x-real-ip $remote_addr;</span></span>
193<span class="line"><span>       proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;</span></span>
194<span class="line"><span>       proxy_set_header x-forwarded-proto $scheme;</span></span>
195<span class="line"><span>     }</span></span>
196<span class="line"><span> }</span></span>
197<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li></ul><h4 id="rabbitmq-的转发配置" tabindex="-1"><a class="header-anchor" href="#rabbitmq-的转发配置"><span>RabbitMQ 的转发配置</span></a></h4><ul><li><p>RabbitMQ 面板地址:http://192.168.123.214:15672/#/</p></li><li><p>设定域名:rabbitmq.devops.test.com</p></li><li><p>对应 server 配置,因为同属一个网络,所以使用容器名加端口访问即可</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span> server {</span></span>
198<span class="line"><span>     listen       80;</span></span>
199<span class="line"><span>     server_name  rabbitmq.devops.test.com;</span></span>
200<span class="line"><span></span></span>
201<span class="line"><span>     location / {</span></span>
202<span class="line"><span>       proxy_pass   http://rabbitmq_3_12:15672/;</span></span>
203<span class="line"><span>       proxy_set_header Host $host;</span></span>
204<span class="line"><span>       proxy_set_header X-Real-IP $remote_addr;</span></span>
205<span class="line"><span>       proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;</span></span>
206<span class="line"><span>       proxy_set_header X-Forwarded-Proto $scheme;</span></span>
207<span class="line"><span>     }</span></span>
208<span class="line"><span> }</span></span>
209<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>RabbitMQ 配置 https,并重定向 http 到 https</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span> server {</span></span>
210<span class="line"><span>     listen       80;</span></span>
211<span class="line"><span>     server_name  rabbitmq.devops.test.com;</span></span>
212<span class="line"><span>     return 301 https://$host$request_uri;
212</span></span>
213<span class="line"><span> }</span></span>
214<span class="line"><span> server {</span></span>
215<span class="line"><span>     listen       443 ssl;</span></span>
216<span class="line"><span>     server_name  apollo.devops.test.com;</span></span>
217<span class="line"><span></span></span>
218<span class="line"><span>     ssl_certificate      /certs/apollo.devops.test.com/server.crt;</span></span>
219<span class="line"><span>     ssl_certificate_key  /certs/apollo.devops.test.com/server.key;</span></span>
220<span class="line"><span>     ssl_session_cache    shared:SSL:1m;</span></span>
221<span class="line"><span>     ssl_session_timeout  5m;</span></span>
222<span class="line"><span>     ssl_ciphers  HIGH:!aNULL:!MD5;</span></span>
223<span class="line"><span>     ssl_prefer_server_ciphers  on;</span></span>
224<span class="line"><span></span></span>
225<span class="line"><span>     location / {</span></span>
226<span class="line"><span>       proxy_pass   http://apollo_portal_2_1:8070/;</span></span>
227<span class="line"><span>       proxy_set_header host $http_host;</span></span>
228<span class="line"><span>       proxy_set_header x-real-ip $remote_addr;</span></span>
229<span class="line"><span>       proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for;</span></span>
230<span class="line"><span>       proxy_set_header x-forwarded-proto $scheme;</span></span>
231<span class="line"><span>     }</span></span>
232<span class="line"><span> }</span></span>
233<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li></ul><h4 id="相关脚本汇总" tabindex="-1"><a class="header-anchor" href="#相关脚本汇总"><span>相关脚本汇总</span></a></h4><ul><li><p>脚本本地目录预览,添加了系统判断 linux,执行需要给要执行的脚本添加执行权限:<code>chmod +x ./01.build-pem.sh</code></p><figure><img src="`+m+`" alt="" tabindex="0" loading="lazy"><figcaption></figcaption></figure></li><li><p>nginx-start.bat :删除 nginx 进程并启动 nginx 服务</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span> @echo off</span></span>
234<span class="line"><span> cd  /d %~dp0</span></span>
235<span class="line"><span> echo kill nginx</span></span>
236<span class="line"><span> taskkill /fi &quot;imagename eq nginx.EXE&quot; /f</span></span>
237<span class="line"><span> echo start nginx</span></span>
238<span class="line"><span> start nginx</span></span>
239<span class="line"><span> echo start nginx success</span></span>
240<span class="line"><span> pause</span></span>
241<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>nginx-nssm-service.bat 创建 nginx 服务脚本</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span> @echo off</span></span>
242<span class="line"><span> cd  /d %~dp0</span></span>
243<span class="line"><span> nssm stop Nginx-service</span></span>
244<span class="line"><span> nssm remove Nginx-service confirm</span></span>
245<span class="line"><span> nssm install Nginx-service D:\\Software\\nginx-1.24.0\\start.bat</span></span>
246<span class="line"><span> sc start Nginx-service</span></span>
247<span class="line"><span> pause</span></span>
248<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>01.build-pem.sh 创建自签证书</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span> #!/bin/sh</span></span>
249<span class="line"><span> # 生成根证书,访问客户端需要安装导入 myCA.pem,根据myCA.key,myCA.pem再生成nginx需要的证书</sp
249an></span>
250<span class="line"><span> if uname | grep -q &quot;MINGW&quot;; then</span></span>
251<span class="line"><span>   winpty openssl genrsa -out myCA.key 2048</span></span>
252<span class="line"><span>   winpty openssl req -x509 -new -nodes -key myCA.key -days 1825 -out myCA.pem</span></span>
253<span class="line"><span> else</span></span>
254<span class="line"><span>   openssl genrsa -out myCA.key 2048</span></span>
255<span class="line"><span>   openssl req -x509 -new -nodes -key myCA.key -days 1825 -out myCA.pem</span></span>
256<span class="line"><span> fi</span></span>
257<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>02.build-ssl.sh 创建域名证书</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span> #!/bin/bash</span></span>
258<span class="line"><span></span></span>
259<span class="line"><span> if [ &quot;$#&quot; -ne 1 ]; then</span></span>
260<span class="line"><span>   echo &quot;Usage: Must supply a domain&quot;</span></span>
261<span class="line"><span>   exit 1</span></span>
262<span class="line"><span> fi</span></span>
263<span class="line"><span></span></span>
264<span class="line"><span> DOMAIN=$1</span></span>
265<span class="line"><span></span></span>
266<span class="line"><span> mkdir $DOMAIN</span></span>
267<span class="line"><span> #!/bin/sh</span></span>
268<span class="line"><span> if uname | grep -q &quot;MINGW&quot;; then</span></span>
269<span class="line"><span>   winpty openssl genrsa -out $DOMAIN/server.key 2048</span></span>
270<span class="line"><span>   winpty openssl req -new -key $DOMAIN/server.key -out $DOMAIN/server.csr</span></span>
271<span class="line"><span> else</span></span>
272<span class="line"><span>   openssl genrsa -out $DOMAIN/server.key 2048</span></span>
273<span class="line"><span>   openssl req -new -key $DOMAIN/server.key -out $DOMAIN/server.csr</span></span>
274<span class="line"><span> fi</span></span>
275<span class="line"><span></span></span>
276<span class="line"><span> cat &gt;$DOMAIN/server.ext &lt;&lt;EOF</span></span>
277<span class="line"><span> authorityKeyIdentifier=keyid,issuer</span></span>
278<span class="line"><span> basicConstraints=CA:FALSE</span></span>
279<span class="line"><span> keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment</span></span>
280<span class="line"><span> subjectAltName = @alt_names</span></span>
281<span class="line"><span> [alt_names]</span></span>
282<span class="line"><span> DNS.1 = $DOMAIN</span></span>
283<span class="line"><span> EOF</span></span>
284<span class="line"><span></span></span>
285<span class="line"><span> if uname | grep -q &quot;MINGW&quot;; then</span></span>
286<span class="line"><span>   winpty openssl x509 -req -in $DOMAIN/server.csr -CA ./myCA.pem -CAkey ./myCA.key -CAcreateserial -out $DOMAIN/server.crt -days 36500 -extfile $DOMAIN/server.ext</span></span>
287<span class="line"><span> else</span></span>
288<span class="line"><span>   openssl x509 -req -in $DOMAIN/server.csr -CA ./myCA.pem -CAkey ./myCA.key -CAcreateserial -out $DOMAIN/server.crt -days 36500 -extfile $DOMAIN/server.ext</span></span>
289<span class="line"><span> fi</span></span>
290<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li><li><p>03.gen.sh 先创建自签证书,再执行 gen.sh 生成需要的域名证书,配置到 nginx 即可</p><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span></span></span>
291<span class="line"><span> #!/bin/bash</span></span>
292<span class="line"><span> # 获取当前脚本所在目录</span></span>
293<span class="line"><span> script_dir=$(dirname &quot;$0&quot;)</span></span>
294<span class="line"><span></span></span>
295<span class="line"><span> sh $script_dir/02.build-ssl.sh nginx.devops.test.com</span></span>
296<span class="line"><span></span></span>
297<span class="line"><span> sh $script_dir/02.build-ssl.sh apollo.devops.test.com</span></span>
298<span class="line"><span></span></span>
299<span class="line"><span> sh $script_dir/02.build-ssl.sh rabbitmq.devops.test.com</span></span>
300<span class="line"><span> \`\`\`</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div><div class="line-number"></div></div></div></li></ul><h3 id="踩过的坑" tabindex="-1"><a class="header-anchor" href="#踩过的坑"><span>
300踩过的坑</span></a></h3><h4 id="windows-环境-nginx-s-reload-后多个-nginx-进程" tabindex="-1"><a class="header-anchor" href="#windows-环境-nginx-s-reload-后多个-nginx-进程"><span>Windows 环境 nginx -s reload 后多个 nginx 进程</span></a></h4><p>目前只能通过<code>taskkill /fi &quot;imagename eq nginx.EXE&quot; /f</code>删除进程再启动</p><h4 id="windows-中使用-openssl-需要添加前缀-winpty-openssl" tabindex="-1"><a class="header-anchor" href="#windows-中使用-openssl-需要添加前缀-winpty-openssl"><span>Windows 中使用 openssl 需要添加前缀 <code>winpty openssl</code></span></a></h4><p>一开始是执行 <code>openssl genrsa -out server.key 2048</code>命令卡死</p><p>后面找到一篇<a href="https://xautshuanglong.github.io/2019/02/22/Libraries/OpenSSL%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/" target="_blank" rel="noopener noreferrer">文章</a>说是 git bash 密码的问题,加了密码参数确实可以了:<code>openssl genrsa -des3 -out myCA.key -passout pass:mima 2048</code>但是后续使用 <code>openssl req</code>还是卡死,</p><p>最后解决自签证书授信的时候才发现是需要加上 winpty 使用才是正解</p><h4 id="本地自签证书配置-https-浏览器依旧提示不安全" tabindex="-1"><a class="header-anchor" href="#本地自签证书配置-https-浏览器依旧提示不安全"><span>本地自签证书配置 https 浏览器依旧提示不安全</span></a></h4><p>生产对应域名的证书,并在客户端安装证书,找到的 <a href="https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/" target="_blank" rel="noopener noreferrer">解决方案</a> ,以及思路来源 <a href="https://stackoverflow.com/questions/7580508/getting-chrome-to-accept-self-signed-localhost-certificate#answer-60516812" target="_blank" rel="noopener noreferrer">stackoverflow</a></p><h4 id="容器中-nginx-conf-默认配置问题" tabindex="-1"><a class="header-anchor" href="#容器中-nginx-conf-默认配置问题"><span>容器中 nginx.conf 默认配置问题</span></a></h4><p>不同的版本可能默认配置不一样,可以先不挂载配置把容器的默认配置文件复制出来,在默认配置基础上进行修改,可少走弯路。尤其如果是将 Windows 上面 的配置修改到容器中,需要注意路径问题。</p><p>比如 windows 中配置静态站点根目录:<code>root html;</code>,在容器中则需要配置为<code>root /usr/share/nginx/html;</code>才生效</p><h4 id="容器中重载配置" tabindex="-1"><a class="header-anchor" href="#容器中重载配置"><span>容器中重载配置</span></a></h4><div class="language- line-numbers-mode" data-highlighter="shiki" data-ext="" data-title="" style="--shiki-light:#383A42;--shiki-dark:#abb2bf;--shiki-light-bg:#FAFAFA;--shiki-dark-bg:#282c34;"><pre class="shiki shiki-themes one-light one-dark-pro vp-code"><code><span class="line"><span>docker exec nginx_1_24 nginx -s reload</span></span></code></pre><div class="line-numbers" aria-hidden="true" style="counter-reset:line-number 0;"><div class="line-number"></div></div></div><h3 id="相关文档" tabindex="-1"><a class="header-anchor" href="#相关文档"><span>相关文档</span></a></h3><ul><li><a href="https://nginx.org/en/download.html" target="_blank" rel="noopener noreferrer">Nginx 下载页</a></li><li><a href="https://nssm.cc/download" target="_blank" rel="noopener noreferrer">nssm 下载页</a></li><li><a href="https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/" target="_blank" rel="noopener noreferrer">局域网配置 https 参考</a></li></ul><h2 id="后语" tabindex="-1"><a class="header-anchor" href="#后语"><span>后语</span></a></h2><blockquote><p>一直都是用到了就搜索,此番整理,加深使用,以备后用 最深刻的是本篇对局域网自定义域名不安全https提示问题的解决,简直赏心悦目。</p></blockquote>`,74)]))}const f=n(u,[["render",b],["__file","devops_nginx_install_use.html.vue"]]),y=JSON.parse('{"path":"/posts/web/devops_nginx_install_use.html","title":"前后端都用得上的 Nginx 日常使用经验","lang":"zh-CN","frontmatter":{"title":"前后端都用得上的 Nginx 日常使用经验","date":"2023-11-03T08:31:00.000Z","category":["Web"],"tag":["devops","docker","nginx"],"description":"前言 nginx 是一个高性能的开源反向代理服务器和 web 服务器,一般用来搭建静态资源服务器、负载均衡器、反向代理,本文将分享其在 Windows/docker 中的使用,使用 nssm 部署成服务的方案脚本ï¼
300Œå±€åŸŸç½‘中自定义域名解决https提示不安全的解决方案,以及一路踩过的坑。 特点 高性能:事件驱动的异步架构,能够处理大量并发连接 静态资源服...","head":[["meta",{"property":"og:url","content":"https://www.yimo.link/posts/web/devops_nginx_install_use.html"}],["meta",{"property":"og:site_name","content":"易墨网"}],["meta",{"property":"og:title","content":"前后端都用得上的 Nginx 日常使用经验"}],["meta",{"property":"og:description","content":"前言 nginx 是一个高性能的开源反向代理服务器和 web 服务器,一般用来搭建静态资源服务器、负载均衡器、反向代理,本文将分享其在 Windows/docker 中的使用,使用 nssm 部署成服务的方案脚本,局域网中自定义域名解决https提示不安全的解决方案,以及一路踩过的坑。 特点 高性能:事件驱动的异步架构,能够处理大量并发连接 静态资源服..."}],["meta",{"property":"og:type","content":"article"}],["meta",{"property":"og:image","content":"https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e62a40257ae548b29b9fab8389027ad5~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=359&h=23&s=1371&e=png&b=0c0c0c"}],["meta",{"property":"og:locale","content":"zh-CN"}],["meta",{"property":"og:updated_time","content":"2024-11-08T03:32:14.000Z"}],["meta",{"property":"article:tag","content":"devops"}],["meta",{"property":"article:tag","content":"docker"}],["meta",{"property":"article:tag","content":"nginx"}],["meta",{"property":"article:published_time","content":"2023-11-03T08:31:00.000Z"}],["meta",{"property":"article:modified_time","content":"2024-11-08T03:32:14.000Z"}],["script",{"type":"application/ld+json"},"{\\"@context\\":\\"https://schema.org\\",\\"@type\\":\\"Article\\",\\"headline\\":\\"前后端都用得上的 Nginx 日常使用经验\\",\\"image\\":[\\"https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e62a40257ae548b29b9fab8389027ad5~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=359&h=23&s=1371&e=png&b=0c0c0c\\",\\"https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/d33c2a30c4e14bd68faacd92ac8330d8~tplv-k3u1fbpfcp-jj-mark:0:0:0:0:q75.image#?w=410&h=122&s=6676&e=png&b=fcfcfc\\"],\\"datePublished\\":\\"2023-11-03T08:31:00.000Z\\",\\"dateModified\\":\\"2024-11-08T03:32:14.000Z\\",\\"author\\":[{\\"@type\\":\\"Person\\",\\"name\\":\\"易墨\\",\\"url\\":\\"https://www.yimo.link\\"}]}"]]},"headers":[{"level":2,"title":"前言","slug":"前言","link":"#前言","children":[{"level":3,"title":"特点","slug":"特点","link":"#特点","children":[]},{"level":3,"title":"使用情况","slug":"使用情况","link":"#使用情况","children":[]}]},{"level":2,"title":"实践","slug":"实践","link":"#实践","children":[{"level":3,"title":"准备","slug":"准备","link":"#准备","children":[]},{"level":3,"title":"Windows 安装使用 nginx","slug":"windows-安装使用-nginx","link":"#windows-安装使用-nginx","children":[{"level":4,"title":"安装运行","slug":"安装运行","link":"#安装运行","children":[]},{"level":4,"title":"域名配置","slug":"域名配置","link":"#域名配置","children":[]},{"level":4,"title":"SSL 证书申请","slug":"ssl-证书申请","link":"#ssl-证书申请","children":[]},{"level":4,"title":"nginx 本地配置 https","slug":"nginx-本地配置-https","link":"#nginx-本地配置-https","children":[]},{"level":4,"title":"使用 nssm 创建 nginx 服务","slug":"使用-nssm-创建-nginx-服务","link":"#使用-nssm-创建-nginx-服务","children":[]},{"level":4,"title":"常用命令","slug":"常用命令","link":"#常用命令","children":[]}]},{"level":3,"title":"使用 Docker Compose 安装 nginx","slug":"使用-docker-compose-安装-nginx","link":"#使用-docker-compose-安装-nginx","children":[{"level":4,"title":"配置说明","slug":"配置说明","link":"#配置说明","children":[]},{"level":4,"title":"配置文件 compose.yml","slug":"配置文件-compose-yml","link":"#配置文件-compose-yml","children":[]},{"level":4,"title":"默认的 nginx.conf v1.24","slug":"默认的-nginx-conf-v1-24","link":"#默认的-nginx-conf-v1-24","children":[]},{"level":4,"title":"自定义配置 conf.d/default.conf","slug":"自定义配置-conf-d-default-conf","link":"#自定义配置-conf-d-default-conf","children":[]},{"level":4,"title":"创建证书 ssl 目录","slug":"创建证书-ssl-目录","link":"#创建证书-ssl-目录","children":[]}]},{"level":3,"title":"Nginx 的应用","slug":"nginx-的应用","link":"#nginx-的应用","children":[{"level":4,"title":"本地使用域名前的配置","slug":"本地使用域名前的配置","link":"#本地使用域名前的配置","children":[]},{"level":4,"title":"Apollo 的转发配置","slug":"apollo-的转发配置","link":"#apollo-的转发配置","children":[]},{"level":4,"title":"RabbitMQ 的转发配置","slug":"rabbitmq-的转发配置","link":"#rabbitmq-的转发配置","children":[]},{"level":4,"title":"相关脚本汇总","slug":"相关脚本汇总","link":"#相关脚本汇总","children":[]}]},{"level":3,"title":"踩过的坑","slug":"踩过的坑","link":"#踩过的坑","children":[{"level":4,"title":"Windows 环境 nginx -s reload 后多个 nginx 进程","slug":"windows-环境-nginx-s-reload-后多个-nginx-进程","link":"#windows-环境-nginx-s-reload-后多个-nginx-进程","children":[]},{"level":4,"title":"Windows 中使用 openssl 需要添加前缀 winpty openssl","slug":"windows-中使用-openssl-需要添加前缀-winpty-openssl","link":"#windows-中使用-openssl-需要添加前缀-winpty-openssl","children":[]},{"level":4,"title":"本地自签证书配置 https 浏览器依旧提示不安全","slug":"本地自签证书配置-https-浏览器依旧提示不安全","link":"#本地自签证书配置-https-浏览器依旧提示不安全","children":[]},{"level":4,"title":"容器中 nginx.conf 默认配置问题","slug":"容器中-nginx-conf-默认配置问题","link":"#容器中-nginx-conf-默认配置问题","children":[]},{"level":4,"title":"容器中重载配置","slug":"容器中重载配置","link":"#容器中重载配置","children":[]}]},{"level":3,"title":"相关文档","slug":"相关文档","link":"#相关文档","children":[]}]},{"level":2,"title":"后语","slug":"后语","link":"#后语","children":[]}
300],"git":{"createdTime":1731036734000,"updatedTime":1731036734000,"contributors":[{"name":"yimo","email":"[email protected]","commits":1}]},"readingTime":{"minutes":12.57,"words":3771},"filePathRelative":"posts/web/devops_nginx_install_use.md","localizedDate":"2023å¹´11月3日","excerpt":"<h2>前言</h2>\\n<blockquote>\\n<p>nginx 是一个高性能的开源反向代理服务器和 web 服务器,一般用来搭建静态资源服务器、负载均衡器、反向代理,本文将分享其在 Windows/docker 中的使用,使用 nssm 部署成服务的方案脚本,局域网中自定义域名解决https提示不安全的解决方案,以及一路踩过的坑。</p>\\n</blockquote>\\n<h3>特点</h3>\\n<ul>\\n<li>高性能:事件驱动的异步架构,能够处理大量并发连接</li>\\n<li>静态资源服务器:部署前端静态页面及静态资源</li>\\n<li>反向代理服务器:接收客户端请求,并将请求转发到后端服务,可以实现负载均衡、请求分发和缓存等功能</li>\\n<li>支持 HTTPS</li>\\n</ul>","autoDesc":true}');export{f as comp,y as data};

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.