Site updated: 2023-05-30 17:39:15
This commit is contained in:
1 parent
9f8985fdef
commit
ad9c16d2c3
165 files changed
+255
-269
No files matched your search
@@ -10,8 +10,8 @@
|
||||
</author>
|
||||
<description>天生我材必有用</description>
|
||||
<language>zh-CN</language>
|
||||
<pubDate>Thu, 25 May 2023 18:25:00 +0800</pubDate>
|
||||
<lastBuildDate>Thu, 25 May 2023 18:25:00 +0800</lastBuildDate>
|
||||
<pubDate>Tue, 30 May 2023 17:20:00 +0800</pubDate>
|
||||
<lastBuildDate>Tue, 30 May 2023 17:20:00 +0800</lastBuildDate>
|
||||
<category term="hito" />
|
||||
<category term="無言" />
|
||||
<category term="博客" />
|
||||
@@ -20,6 +20,41 @@
|
||||
<category term="心得体会" />
|
||||
<category term="技术分享" />
|
||||
<category term="踩坑" />
|
||||
<item>
|
||||
<guid isPermalink="true">https://hitoli.com/2023/05/30/http%E8%AF%B7%E6%B1%82%E4%B9%8BrestTemplate%E9%85%8D%E7%BD%AE%E8%B6%85%E6%97%B6%E6%97%B6%E9%97%B4/</guid>
|
||||
<title>http请求之restTemplate配置超时时间</title>
|
||||
<link>https://hitoli.com/2023/05/30/http%E8%AF%B7%E6%B1%82%E4%B9%8BrestTemplate%E9%85%8D%E7%BD%AE%E8%B6%85%E6%97%B6%E6%97%B6%E9%97%B4/</link>
|
||||
<category term="工作" scheme="https://hitoli.com/categories/%E5%B7%A5%E4%BD%9C/" />
|
||||
<category term="解决问题" scheme="https://hitoli.com/categories/%E5%B7%A5%E4%BD%9C/%E8%A7%A3%E5%86%B3%E9%97%AE%E9%A2%98/" />
|
||||
<category term="RestTemplate" scheme="https://hitoli.com/tags/RestTemplate/" />
|
||||
<pubDate>Tue, 30 May 2023 17:20:00 +0800</pubDate>
|
||||
<description><![CDATA[ <h4 id="问题"><a class="anchor" href="#问题">#</a> 问题</h4>
|
||||
<p>http 请求发起后接收不到返回数据!!!【测试环境没出问题,发到正式环境就有问题】</p>
|
||||
<p>项目中通过 restTemplate 发起请求:</p>
|
||||
<figure class="highlight java"><figcaption data-lang="java"></figcaption><table><tr><td data-num="1"></td><td><pre>log<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"请求入参:&#123;&#125;"</span><span class="token punctuation">,</span><span class="token constant">JSON</span><span class="token punctuation">.</span><span class="token function">toJSONString</span><span class="token punctuation">(</span>request<span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token comment">// 打印日志 1</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token comment">// 配置 http 请求的连接超时时间和读取超时时间</span></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token class-name">HttpsClientRequestFactory</span> factory <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HttpsClientRequestFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="4"></td><td><pre>factory<span class="token punctuation">.</span><span class="token function">setConnectTimeout</span><span class="token punctuation">(</span><span class="token number">60</span> <span class="token operator">*</span> <span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="5"></td><td><pre>factory<span class="token punctuation">.</span><span class="token function">setReadTimeout</span><span class="token punctuation">(</span><span class="token number">5</span> <span class="token operator">*</span> <span class="token number">60</span> <span class="token operator">*</span> <span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token class-name">RestTemplate</span> restTemplate <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RestTemplate</span><span class="token punctuation">(</span>factory<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="7"></td><td><pre><span class="token class-name">Result</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">InventoryResult</span><span class="token punctuation">></span></span> result <span class="token operator">=</span> restTemplate<span class="token punctuation">.</span><span class="token function">postForObject</span><span class="token punctuation">(</span>address<span class="token punctuation">.</span><span class="token function">concat</span><span class="token punctuation">(</span>inventoryUrl<span class="token punctuation">)</span><span class="token punctuation">,</span> request<span class="token punctuation">,</span> <span class="token class-name">Result</span><span class="token punctuation">.</span><span class="token keyword">class</span><spanLine truncated
|
||||
<li>打印日志 1 内容为:</li>
|
||||
</ul>
|
||||
<p>http 请求入参:{data=[{ productStatus=10,skuCode=null}], messageId=ewpfpr1t6ey5r6qj0su0w1h6rt73hr,token=vgvU5EJKuZbuHii7WH6pTINp40ZRicaqLz4dq5P7L6pDzWir8EEGZhCKPucQjljsw69EHasEy+iJfdTofDg==}</p>
|
||||
<ul>
|
||||
<li>
|
||||
<p>打印日志 2 内容为:没有打印内容!!!</p>
|
||||
</li>
|
||||
<li>
|
||||
<p>最后发现是因为测试环境中数据量较小,http 请求后,很快能得到相应,而正式环境数据量较大,没有及时得到响应,连接或者读取超时!!!</p>
|
||||
</li>
|
||||
</ul>
|
||||
<h4 id="解决方式"><a class="anchor" href="#解决方式">#</a> 解决方式</h4>
|
||||
<h6 id="第一种"><a class="anchor" href="#第一种">#</a> 第一种</h6>
|
||||
<ol>
|
||||
<li>添加 HttpsClientRequestFactory 类,并继承 SimpleClientHttpRequestFactory</li>
|
||||
</ol>
|
||||
<figure class="highlight java"><figcaption data-lang="java"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">/**</pre></td></tr><tr><td data-num="2"></td><td><pre> * 兼容调 Https 接口</pre></td></tr><tr><td data-num="3"></td><td><pre> */</span></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">HttpsClientRequestFactory</span> <span class="token keyword">extends</span> <span class="token class-name">SimpleClientHttpRequestFactory</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="5"></td><td><pre> </pre></td></tr><tr><td data-num="6"></td><td><pre> <span class="token annotation punctuation">@Override</span></pre></td></tr><tr><td data-num="7"></td><td><pre> <span class="token keyword">protected</span> <span class="token keyword">void</span> <span class="token function">prepareConnection</span><span class="token punctuation">(</span><span class="token class-name">HttpURLConnection</span> connection<span class="token punctuation">,</span> <span class="token class-name">String</span> httpMethod<span class="token punctuation">)</span></pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token keyword">throws</span> <span class="token class-name">IOException</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token keyword">if</span> <span class="token punctuation">(</span>connection <span class="token keyword">instanceof</span> <span class="token class-name">HttpsURLConnection</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="10"></td><td><pre> <span class="token function">prepareHttpsConnection</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token class-name">HttpsURLConnection</span><span class="token punctuation">)</span> connection<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="11"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token keyword">super</span><span class="token punctuation">.</span><span class="token function">prepareConnection</span><span class="token punctuation">(</span>connection<span class="token punctuation">,</span> httpMethod<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="14"></td><td><pre> </pre></td></tr><tr><td data-num="15"></td><td><pre> <span class="token keyword">private</span> <span class="token keyword">void</span> <span class="token function">prepareHttpsConnection</span><span class="token punctuation">(</span><span class="token class-name">HttpsURLConnection</span> connection<span class="token punctuation">)</span> <span class="token punctuatiLine truncated
|
||||
<li>使用 restTemplate 发起请求前先设置连接和超时时间或者通过容器加载配置类然后设置超时时间</li>
|
||||
</ol>
|
||||
<figure class="highlight java"><figcaption data-lang="java"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">// 配置 http 请求的连接超时时间和读取超时时间</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token class-name">HttpsClientRequestFactory</span> factory <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">HttpsClientRequestFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="3"></td><td><pre>factory<span class="token punctuation">.</span><span class="token function">setConnectTimeout</span><span class="token punctuation">(</span><span class="token number">60</span> <span class="token operator">*</span> <span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="4"></td><td><pre>factory<span class="token punctuation">.</span><span class="token function">setReadTimeout</span><span class="token punctuation">(</span><span class="token number">5</span> <span class="token operator">*</span> <span class="token number">60</span> <span class="token operator">*</span> <span class="token number">1000</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token class-name">RestTemplate</span> restTemplate <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">RestTemplate</span><span class="token punctuation">(</span>factory<span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token class-name">BaseResult</span><span class="token generics"><span class="token punctuation">&lt;</span><span class="token class-name">QueryInventoryResult</span><span class="token punctuation">></span></span> result <span class="token operator">=</span> restTemplate<span class="token punctuation">.</span><span class="token function">postForObject</span><span class="token punctuation">(</span>address<span class="token punctuation">.</span><span class="token function">concat</span><span class="token punctuation">(</span>inventoryUrl<span class="token punctuation">)</span><span class="token punctuation">,</span> request<span class="token punctuation">,</span> <span class="token class-name">Result</span><span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr></table></figure><figure class="highlight java"><figcaption data-lang="java"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token annotation punctuation">@Configuration</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">RestConfig</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="3"></td><td><pre> </pre></Line truncated
|
||||
<figure class="highlight java"><figcaption data-lang="java"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token annotation punctuation">@Configuration</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">RestConfig</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="3"></td><td><pre> </pre></td></tr><tr><td data-num="4"></td><td><pre> <span class="token comment">//60 * 1000</span></pre></td></tr><tr><td data-num="5"></td><td><pre> <span class="token annotation punctuation">@Value</span><span class="token punctuation">(</span><span class="token string">"$&#123;rest.connectTimeout:60000&#125;"</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="6"></td><td><pre> <span class="token keyword">private</span> <span class="token keyword">int</span> connectTimeout<span class="token punctuation">;</span></pre></td></tr><tr><td data-num="7"></td><td><pre> </pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token comment">//5 * 60 * 1000</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token annotation punctuation">@Value</span><span class="token punctuation">(</span><span class="token string">"$&#123;rest.readTimeout:300000&#125;"</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="10"></td><td><pre> <span class="token keyword">private</span> <span class="token keyword">int</span> readTimeout<span class="token punctuation">;</span> </pre></td></tr><tr><td data-num="11"></td><td><pre> </pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token annotation punctuation">@Value</span><span class="token punctuation">(</span><span class="token string">"$&#123;rest.connectionRequestTimeout:300000&#125;"</span><span class="token punctuation">)</span></pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token keyword">private</span> <span class="token keyword">int</span> connectionRequestTimeout<span class="token punctuation">;</span> </pre></td></tr><tr><td data-num="14"></td><td><pre> </pre></td></tr><tr><td data-num="15"></td><td><pre> <span class="token comment">/**</pre></td></tr><tr><td data-num="16"></td><td><pre> * 使用 HttpComponentsClientHttpRequestFactory 创建 http 请求(推荐)</pre></td></tr><tr><td data-num="17"></td><td><pre> */</span></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token annotation punctuation">@Bean</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token keyword">public</span> <span class="token class-name">RestTemplate</span> <span class="token function">restTemplate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="20"></td><td><pre> <span class="token class-name">HttpComponentsClientHttpRequestFactory<Line truncated
|
||||
<figure class="highlight java"><figcaption data-lang="java"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token annotation punctuation">@Configuration</span></pre></td></tr><tr><td data-num="2"></td><td><pre><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">RestConfig</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="3"></td><td><pre> </pre></td></tr><tr><td data-num="4"></td><td><pre> </pre></td></tr><tr><td data-num="5"></td><td><pre> <span class="token comment">/**</pre></td></tr><tr><td data-num="6"></td><td><pre> * 高并发采用 HttpClient 连接池</pre></td></tr><tr><td data-num="7"></td><td><pre> */</span></pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token annotation punctuation">@Bean</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token keyword">public</span> <span class="token class-name">RestTemplate</span> <span class="token function">restTemplate</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="10"></td><td><pre> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">RestTemplate</span><span class="token punctuation">(</span><span class="token function">httpRequestFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="11"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="12"></td><td><pre> </pre></td></tr><tr><td data-num="13"></td><td><pre> </pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token annotation punctuation">@Bean</span></pre></td></tr><tr><td data-num="15"></td><td><pre> <span class="token keyword">public</span> <span class="token class-name">ClientHttpRequestFactory</span> <span class="token function">httpRequestFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="16"></td><td><pre> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">HttpComponentsClientHttpRequestFactory</span><span class="token punctuation">(</span><span class="token function">httpClient</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span></pre></td></tr><tr><td data-num="17"></td><td><pre> <span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="18"></td><td><pre> </pre></td></tr><tr><td data-num="19"></td><td><pre> </pre></td></tr><tr><td data-num="20"></td><td><pre> <span class=Line truncated
|
||||
</item>
|
||||
<item>
|
||||
<guid isPermalink="true">https://hitoli.com/2023/05/25/%E8%A7%A3%E5%86%B3MySQL%E6%8A%A5only-full-group-by%E9%94%99%E8%AF%AF/</guid>
|
||||
<title>解决MySQL报only_full_group_by错误</title>
|
||||
@@ -397,8 +432,8 @@
|
||||
<category term="服务" scheme="https://hitoli.com/categories/Linux/%E6%9C%8D%E5%8A%A1/" />
|
||||
<category term="Nginx" scheme="https://hitoli.com/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" />
|
||||
<category term="Nginx" scheme="https://hitoli.com/tags/Nginx/" />
|
||||
<category term="动态域名解析" scheme="https://hitoli.com/tags/%E5%8A%A8%E6%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/" />
|
||||
<category term="Tengine" scheme="https://hitoli.com/tags/Tengine/" />
|
||||
<category term="动态域名解析" scheme="https://hitoli.com/tags/%E5%8A%A8%E6%80%81%E5%9F%9F%E5%90%8D%E8%A7%A3%E6%9E%90/" />
|
||||
<pubDate>Wed, 30 Nov 2022 16:35:00 +0800</pubDate>
|
||||
<description><![CDATA[ <h4 id="应用场景"><a class="anchor" href="#应用场景">#</a> 应用场景:</h4>
|
||||
<p>由于有时候 nginx 代理的时候,第三方域名对应的 ip 可能发生变化,然而没有提前通知,然而如果不配置什么,nginx 又不能智能解析,因此 nginx 动态解析域名就比较重要。</p>
|
||||
@@ -431,8 +466,8 @@
|
||||
<category term="服务" scheme="https://hitoli.com/categories/Linux/%E6%9C%8D%E5%8A%A1/" />
|
||||
<category term="Nginx" scheme="https://hitoli.com/categories/Linux/%E6%9C%8D%E5%8A%A1/Nginx/" />
|
||||
<category term="Nginx" scheme="https://hitoli.com/tags/Nginx/" />
|
||||
<category term="Tengine" scheme="https://hitoli.com/tags/Tengine/" />
|
||||
<category term="stream" scheme="https://hitoli.com/tags/stream/" />
|
||||
<category term="Tengine" scheme="https://hitoli.com/tags/Tengine/" />
|
||||
<pubDate>Wed, 30 Nov 2022 16:09:00 +0800</pubDate>
|
||||
<description><![CDATA[ <h4 id="引言"><a class="anchor" href="#引言">#</a> 引言</h4>
|
||||
<p>stream 模块一般用于 TCP/UDP 数据流的代理和负载均衡,可以通过 stream 模块代理转发 TCP 消息。我是用来转发 mysql、gitee 等连接的,有天 ip 发生了变动导致连接不上。前期试过配置<span class="blue"> resolver 114.114.114.114 valid=60s;</span> 来动态解析域名,结果 stream 模块不支持 set 函数,这就导致 ip 变动后必须手动重启或者 reload 一下 nginx 才能正常连接。后面经过搜索发现有人说用 Tengine 替代 nginx 可以实现就试了试,结果发现<span class="red"> Tengine 只能实现 http 下的动态域名解析</span>,至此问题依旧。没办法,我只能通过定时任务加脚本判断 ip 是否变动,如果变动就 reload 一下 nginx。</p>
|
||||
@@ -647,47 +682,5 @@
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token key atrule">情景1</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="2"></td><td><pre>proxy_pass后有/ </pre></td></tr><tr><td data-num="3"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/WCP.Service/wcp/modeladapter/download/asc.shtml</pre></td></tr><tr><td data-num="4"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//10.194.171.7<span class="token punctuation">:</span>13082/modeladapter/download/asc.shtml</pre></td></tr><tr><td data-num="5"></td><td><pre>location /WCP.Service/wcp/modeladapter/download/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="6"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//10.194.171.7<span class="token punctuation">:</span>13082/modeladapter/download/;</pre></td></tr><tr><td data-num="7"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="8"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="9"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/model/asc.shtml</pre></td></tr><tr><td data-num="10"></td><td><pre>location /model/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="11"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/model/;</pre></td></tr><tr><td data-num="12"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="13"></td><td><pre></pre></td></tr><tr><td data-num="14"></td><td><pre><span class="token key atrule">情景2</span><span class="token punctuation">:</span></pre></td></tr><tr><td data-num="15"></td><td><pre>proxy_pass后有/</pre></td></tr><tr><td data-num="16"></td><td><pre>访问地址:http<span class="token punctuation">:</span>//localhost<span class="token punctuation">:</span>8081/model/asc.shtml</pre></td></tr><tr><td data-num="17"></td><td><pre>最终代理:http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/asc.shtml</pre></td></tr><tr><td data-num="18"></td><td><pre>location /model/ <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="19"></td><td><pre> proxy_pass http<span class="token punctuation">:</span>//127.0.0.1<span class="token punctuation">:</span>8082/;</pre></td></tr><tr><td data-num="20"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="21"></td><td><pre></pre></td></tr><tr><td data-num="22"></td><td><pre>情景3:</pre></td></tr><tr><td data-num="23"></td><td><pre>proxy_pass后没有/ </pre></td></tr><tr><td data-num=&#Line truncated
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token comment">#user nobody;</span></pre></td></tr><tr><td data-num="2"></td><td><pre>worker_processes 1;</pre></td></tr><tr><td data-num="3"></td><td><pre></pre></td></tr><tr><td data-num="4"></td><td><pre><span class="token comment">#error_log logs/error.log;</span></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token comment">#error_log logs/error.log notice;</span></pre></td></tr><tr><td data-num="6"></td><td><pre><span class="token comment">#error_log logs/error.log info;</span></pre></td></tr><tr><td data-num="7"></td><td><pre></pre></td></tr><tr><td data-num="8"></td><td><pre><span class="token comment">#pid logs/nginx.pid;</span></pre></td></tr><tr><td data-num="9"></td><td><pre></pre></td></tr><tr><td data-num="10"></td><td><pre>events <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="11"></td><td><pre> worker_connections 1024;</pre></td></tr><tr><td data-num="12"></td><td><pre><span class="token punctuation">&#125;</span></pre></td></tr><tr><td data-num="13"></td><td><pre></pre></td></tr><tr><td data-num="14"></td><td><pre>http <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="15"></td><td><pre> include mime.types;</pre></td></tr><tr><td data-num="16"></td><td><pre> default_type application/octet<span class="token punctuation">-</span>stream;</pre></td></tr><tr><td data-num="17"></td><td><pre></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token comment">#log_format main '$remote_addr - $remote_user [$time_local] "$request" '</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token comment"># '$status $body_bytes_sent "$http_referer" '</span></pre></td></tr><tr><td data-num="20"></td><td><pre> <span class="token comment"># '"$http_user_agent" "$http_x_forwarded_for"';</span></pre></td></tr><tr><td data-num="21"></td><td><pre></pre></td></tr><tr><td data-num="22"></td><td><pre> <span class="token comment">#access_log logs/access.log main;</span></pre></td></tr><tr><td data-num="23"></td><td><pre></pre></td></tr><tr><td data-num="24"></td><td><pre> sendfile on;</pre></td></tr><tr><td data-num="25"></td><td><pre> <span class="token comment">#tcp_nopush on;</span></pre></td></tr><tr><td data-num="26"></td><td><pre></pre></td></tr><tr><td data-num="27"></td><td><pre> <span class="token comment">#keepalive_timeout 0;</span></pre></td></tr><tr><td data-num="28"></td><td><pre> keepalive_timeout 65;</pre></td></tr><tr><td data-num="29"></td><td><pre></pre></td></tr><tr><td data-num="30"></td><td><pre> <span class="token comment">#gzip on;</span></pre></td></tr><tr><td data-num="31&Line truncated
|
||||
</item>
|
||||
<item>
|
||||
<guid isPermalink="true">https://hitoli.com/2022/11/04/%E8%AE%B0%E4%B8%80%E6%AC%A1Vue%E9%A1%B9%E7%9B%AE%E7%9A%84%E9%83%A8%E7%BD%B2/</guid>
|
||||
<title>记一次Vue项目的部署</title>
|
||||
<link>https://hitoli.com/2022/11/04/%E8%AE%B0%E4%B8%80%E6%AC%A1Vue%E9%A1%B9%E7%9B%AE%E7%9A%84%E9%83%A8%E7%BD%B2/</link>
|
||||
<category term="工作" scheme="https://hitoli.com/categories/%E5%B7%A5%E4%BD%9C/" />
|
||||
<category term="Vue" scheme="https://hitoli.com/categories/%E5%B7%A5%E4%BD%9C/Vue/" />
|
||||
<category term="vue" scheme="https://hitoli.com/tags/vue/" />
|
||||
<category term="NodeJS" scheme="https://hitoli.com/tags/NodeJS/" />
|
||||
<category term="yarn" scheme="https://hitoli.com/tags/yarn/" />
|
||||
<pubDate>Fri, 04 Nov 2022 15:21:00 +0800</pubDate>
|
||||
<description><![CDATA[ <h4 id="描述"><a class="anchor" href="#描述">#</a> 描述</h4>
|
||||
<ul>
|
||||
<li>今天需要把一个 web 项目部署到 ubuntu 服务器上,结果直接使用 apt install nodejs 安装的 nodejs 版本过低,导致编译失败。最后通过查看官网文档获取到了 ubuntu 最新 nodejs 的安装命令。</li>
|
||||
</ul>
|
||||
<h4 id="过程"><a class="anchor" href="#过程">#</a> 过程</h4>
|
||||
<ul>
|
||||
<li>卸载旧的 nodejs(此命令会卸载掉相关依赖包)</li>
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">sudo</span> <span class="token function">apt</span> autoremove <span class="token parameter variable">--purge</span> nodejs</pre></td></tr></table></figure><ul>
|
||||
<li>安装 NodeJS</li>
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">curl</span> <span class="token parameter variable">-fsSL</span> https://deb.nodesource.com/setup_16.x <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token parameter variable">-E</span> <span class="token function">bash</span> - <span class="token operator">&amp;&amp;</span> <span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token function">install</span> <span class="token parameter variable">-y</span> nodejs</pre></td></tr></table></figure><ul>
|
||||
<li>安装 yarn</li>
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">curl</span> <span class="token parameter variable">-sL</span> https://dl.yarnpkg.com/debian/pubkey.gpg <span class="token operator">|</span> gpg <span class="token parameter variable">--dearmor</span> <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token function">tee</span> /usr/share/keyrings/yarnkey.gpg <span class="token operator">></span>/dev/null</pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token builtin class-name">echo</span> <span class="token string">"deb [signed-by=/usr/share/keyrings/yarnkey.gpg] https://dl.yarnpkg.com/debian stable main"</span> <span class="token operator">|</span> <span class="token function">sudo</span> <span class="token function">tee</span> /etc/apt/sources.list.d/yarn.list</pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre><span class="token function">sudo</span> <span class="token function">apt-get</span> update <span class="token operator">&amp;&amp;</span> <span class="token function">sudo</span> <span class="token function">apt-get</span> <span class="token function">install</span> <span class="token function">yarn</span></pre></td></tr></table></figure><ul>
|
||||
<li>初始化 (到项目根目录执行)</li>
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">yarn</span> <span class="token function">install</span></pre></td></tr></table></figure><ul>
|
||||
<li>编译(到项目根目录执行,完成后会生成 dist 目录)</li>
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">yarn</span> build</pre></td></tr></table></figure><ul>
|
||||
<li>安装 nginx</li>
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">apt</span> <span class="token function">install</span> nginx</pre></td></tr></table></figure><ul>
|
||||
<li>配置 nginx (编译 /etc/nginx/sites-available/default)</li>
|
||||
</ul>
|
||||
<figure class="highlight yaml"><figcaption data-lang="YAML"></figcaption><table><tr><td data-num="1"></td><td><pre>server <span class="token punctuation">&#123;</span></pre></td></tr><tr><td data-num="2"></td><td><pre> listen 80 default_server;</pre></td></tr><tr><td data-num="3"></td><td><pre> listen <span class="token punctuation">[</span><span class="token punctuation">:</span><span class="token punctuation">:</span><span class="token punctuation">]</span><span class="token punctuation">:</span>80 default_server;</pre></td></tr><tr><td data-num="4"></td><td><pre></pre></td></tr><tr><td data-num="5"></td><td><pre> <span class="token comment"># SSL configuration</span></pre></td></tr><tr><td data-num="6"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="7"></td><td><pre> <span class="token comment"># listen 443 ssl default_server;</span></pre></td></tr><tr><td data-num="8"></td><td><pre> <span class="token comment"># listen [::]:443 ssl default_server;</span></pre></td></tr><tr><td data-num="9"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="10"></td><td><pre> <span class="token comment"># Note: You should disable gzip for SSL traffic.</span></pre></td></tr><tr><td data-num="11"></td><td><pre> <span class="token comment"># See: https://bugs.debian.org/773332</span></pre></td></tr><tr><td data-num="12"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="13"></td><td><pre> <span class="token comment"># Read up on ssl_ciphers to ensure a secure configuration.</span></pre></td></tr><tr><td data-num="14"></td><td><pre> <span class="token comment"># See: https://bugs.debian.org/765782</span></pre></td></tr><tr><td data-num="15"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="16"></td><td><pre> <span class="token comment"># Self signed certs generated by the ssl-cert package</span></pre></td></tr><tr><td data-num="17"></td><td><pre> <span class="token comment"># Don't use them in a production server!</span></pre></td></tr><tr><td data-num="18"></td><td><pre> <span class="token comment">#</span></pre></td></tr><tr><td data-num="19"></td><td><pre> <span class="token comment"># include snippets/snakeoil.conf;</span></pre></td></tr><tr><td data-num="20"></td><td><pre></pre></td></tr><tr><td data-num="21"></td><td><pre> root /var/www/html;</pre></td></tr><tr><td data-num="22"></td><td><pre></pre></td></tr><tr><td data-num="23"></td><td><pre> <span class="token comment"># Add index.php to the list if you are using PHP</span></pre></td></tr><tr><td data-num="24"></td><td><pre> index index.html index.htm index.nginx<span class="token punctuation">-</span>debian.html;</pre></td></tr><tr><td data-num="25"></td><td><pre></pre></td></tr><tr><td data-num="26"></td><td><pre> server_name _;</pre></td></tr><tr>&lLine truncated
|
||||
<ul>
|
||||
<li>重新编译前需要先删除 dist 目录</li>
|
||||
</ul>
|
||||
<figure class="highlight bash"><figcaption data-lang="bash"></figcaption><table><tr><td data-num="1"></td><td><pre><span class="token function">rm</span> dist <span class="token parameter variable">-fr</span></pre></td></tr><tr><td data-num="2"></td><td><pre></pre></td></tr><tr><td data-num="3"></td><td><pre><span class="token function">yarn</span> build</pre></td></tr></table></figure> ]]></description>
|
||||
</item>
|
||||
</channel>
|
||||
</rss>
|
||||
Reference in new issue
Block a user