<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>服务器运维 on Foam 的博客</title>
    <link>https://blog.foamzou.com/categories/%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%90%E7%BB%B4/</link>
    <description>Recent content in 服务器运维 on Foam 的博客</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Sun, 21 Nov 2021 00:46:45 +0800</lastBuildDate>
    <atom:link href="https://blog.foamzou.com/categories/%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%BF%90%E7%BB%B4/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>用 CDN 加速 WordPress</title>
      <link>https://blog.foamzou.com/posts/upyun-cdn-wordpress/</link>
      <pubDate>Sun, 21 Nov 2021 00:46:45 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/upyun-cdn-wordpress/</guid>
      <description>&lt;h2 id=&#34;写在前面&#34;&gt;写在前面&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;如果你觉得这篇文章对你有所帮助，并且想要使用又拍云，可以通过我这个 -&amp;gt; &lt;a href=&#34;https://console.upyun.com/register/?invite=SJpItuU_K&#34;&gt;链接&lt;/a&gt; &amp;lt;- 注册，你我都能得到 &lt;code&gt;不要白不要的&lt;/code&gt; 奖励。（注意，又拍云绑定的域名需要是备案过的）&lt;/li&gt;
&lt;li&gt;如果你已经有 CDN ，可以跳过 又拍云 部分，直接看插件配置部分。&lt;/li&gt;
&lt;li&gt;本篇文章对所有 CDN 都适用，这里以 又拍云 为例子作说明&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id=&#34;又拍云更香&#34;&gt;又拍云更香？&lt;/h2&gt;
&lt;p&gt;上周在 V 站 发了个帖，安利了我写的一个 Alfred 插件，该插件可以方便地将图片上传到七牛云，顺便向大家安利了七牛。马上有 V 友跳出来说又拍云更香，免费流量比七牛云多 5 G，HTTPs CDN 流量也是算在免费套餐里边的。&lt;/p&gt;
&lt;p&gt;趁着周末有点时间，去白嫖下又拍云。&lt;/p&gt;
&lt;h2 id=&#34;又拍云联盟&#34;&gt;又拍云联盟&lt;/h2&gt;
&lt;p&gt;没错。小标题 是 又拍云对开发者的白嫖活动的名字。我们加入这个联盟就能获得：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;10 GB 免费存储&lt;/li&gt;
&lt;li&gt;每个月 15 GB 免费 CDN 流量（HTTP[s] 都可以）&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;流程很简单。注册账号、在你的网站页脚添加又拍云的链接；填申请表。我是周六申请的，1个小时左右就收到了审核通过的通知。&lt;/p&gt;
&lt;p&gt;Update(2022/12/02): 大家要留意一年的到期时间，快到期的时候去 &lt;a href=&#34;https://www.upyun.com/league&#34;&gt;联盟页面&lt;/a&gt; 申请续期。否则欠费就不好了，我就迟了几天，欠费 2 分钱 :)&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.foamzou.com/posts/upyun-cdn-wordpress/image-3-1024x551.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;审核通过后，会发放一年份的代金券给你，到期再次申请即可。&lt;/p&gt;
&lt;h2 id=&#34;cdn-配置&#34;&gt;CDN 配置&lt;/h2&gt;
&lt;h3 id=&#34;系统设计&#34;&gt;系统设计&lt;/h3&gt;
&lt;p&gt;不想看我啰嗦的同学，可以跳过系统设计这部分。配置部分以 又拍云 为例子叙述&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.foamzou.com/posts/upyun-cdn-wordpress/image-12-1024x585.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;从上图的设计可以看出，我把文件分为三类：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;动态接口/文件&lt;/strong&gt;：例如 WordPress 中的 php 接口。这类请求是动态的，不适合放到 CDN 缓存中（一直回源，没有意义）。域名使用 foamzou.com ，该域名解析到我的服务器里，执行 WordPress 程序&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;适合短期缓存的文件&lt;/strong&gt;：指的是短时间不会发生变化，但仍然有可能变化的文件。例如 WordPress 的系统库文件
&lt;ul&gt;
&lt;li&gt;域名使用：cdn.foamzou.com，该域名做个 cname 解析到 CDN 服务&lt;/li&gt;
&lt;li&gt;当 CDN 未命中资源，则回源到 cdn.foamzou.com ( IP: 回源设置的 IP )&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;适合长期缓存的文件&lt;/strong&gt;：指的是几乎不会发生变化的资源文件。例如图片、第三方 css、js资源
&lt;ul&gt;
&lt;li&gt;域名配置同 2&lt;/li&gt;
&lt;li&gt;给 CDN 配置一个对象存储桶
&lt;ul&gt;
&lt;li&gt;配置指定的路径从桶里取资源，没取到再回源到服务器&lt;/li&gt;
&lt;li&gt;从服务器取到数据，存储到桶里&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;好处有 2 点
&lt;ol&gt;
&lt;li&gt;减少回源次数（毕竟对于同一个文件只会回源 1 次），节省服务器带宽&lt;/li&gt;
&lt;li&gt;回源速度快（我在又拍云创建了个对象存储桶，CDN 和 存储 在同一个区域，速度当然比跨个公网访问我服务器快）&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;创建-cdn-服务&#34;&gt;创建 CDN 服务&lt;/h3&gt;
&lt;p&gt;到 &lt;a href=&#34;https://console.upyun.com/services/create/cdn/&#34;&gt;创建页面&lt;/a&gt; ：&lt;/p&gt;</description>
    </item>
    <item>
      <title>用七牛云作图床并配置 SSL</title>
      <link>https://blog.foamzou.com/posts/image-hosted-service-qiniu/</link>
      <pubDate>Sun, 14 Nov 2021 17:31:58 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/image-hosted-service-qiniu/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;一年前我写过&lt;a href=&#34;https://blog.foamzou.com/posts/use-cloudflare-as-free-ssl/&#34;&gt;《使用 CloudFlare/百度云加速做免费SSL》&lt;/a&gt;，里面提到了：因为 Chrome 的最新安全限制， https 站点无法正常加载 http 的图片和其他静态资源，这使得我不得不给我的图床加上 SSL。&lt;/p&gt;
&lt;p&gt;前几天发现我的博客里的图片无法被正常加载，观察控制台后发现 图床的 SSL 证书出问题了。到百度云加速控制台看，才发现上次申请的一年 SSL 证书已经到期了，并且需要付费才能继续申请证书。好吧，白嫖的快乐没有了。&lt;/p&gt;
&lt;p&gt;那就不用百度云加速了，SSL CDN 也用七牛云的吧。&lt;/p&gt;
&lt;h2 id=&#34;七牛云&#34;&gt;七牛云&lt;/h2&gt;
&lt;p&gt;前提：你需要有一个已备案的域名，否则只能使用七牛的临时测试域名，是有有效期的&lt;/p&gt;
&lt;h3 id=&#34;免费套餐&#34;&gt;免费套餐&lt;/h3&gt;
&lt;p&gt;从 2016 年白嫖七牛云存储至今，本文就当做给七牛打回广告吧。&lt;/p&gt;
&lt;p&gt;先说结论：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;如果你只用 http 访问文件，每个月不超过 10G 流量的话，那么用七牛云相当于白嫖，一分钱都不用花&lt;/li&gt;
&lt;li&gt;如果需要使用 https 则需要花费一些费用（0.28 元/GB），一般博客小站，每个月最多不超过 1 块钱吧。等过段时间，我有了一定数据再回来更新这个数值。&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;对于个人用户来说，有 10G 的免费存储，每个月 10G 的流量已经非常足够了。具体的资费可以参看 &lt;a href=&#34;https://www.qiniu.com/prices/kodo&#34;&gt;官网价格&lt;/a&gt; 。PS. 从价格表会看到 外网流出流量 会被收费，这点不用担心，我专门查了下官方说明：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;如果使用了七牛测试域名或者融合 CDN 域名访问资源，是&lt;strong&gt;不会计算&lt;/strong&gt;外网流出流量的&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;也就是说，你绑定一个域名回源到七牛云的对象存储，每个月不超过 10G 则不收费。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.foamzou.com/posts/image-hosted-service-qiniu/1a6c9eaa-29ba-4825-83a1-3f84b1ab2af5.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;创建一个-bucket&#34;&gt;创建一个 bucket&lt;/h3&gt;
&lt;p&gt;在七牛云对象存储 &lt;a href=&#34;https://portal.qiniu.com/kodo/bucket&#34;&gt;管理后台&lt;/a&gt;，创建一个bucket:&lt;/p&gt;
&lt;p&gt;存储区域选国内的都行；访问控制设置为公开，毕竟我们要将其用作图床&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.foamzou.com/posts/image-hosted-service-qiniu/0709db48-91dc-4281-931a-8150a13ed532.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;绑定域名&#34;&gt;绑定域名&lt;/h3&gt;
&lt;p&gt;创建成功后，会提示你绑定一个域名。该域名将作为 CDN 域名，通过该域名访问你的文件时，会尝试在 CDN 节点找缓存；缓存未命中再回源到你上边创建的 bucket。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.foamzou.com/posts/image-hosted-service-qiniu/7dee1fc0-919a-4437-9418-7580674b6ad8.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;我们添加一个域名，该域名必须是经过备案的。&lt;/p&gt;
&lt;p&gt;通信协议：如果你不需要 HTTPS，那么选择 HTTP 就足够了&lt;/p&gt;</description>
    </item>
    <item>
      <title>npm包leveldown安装之升级Glibc</title>
      <link>https://blog.foamzou.com/posts/npm-install-leveldown-and-upgrade-glibc/</link>
      <pubDate>Mon, 07 Dec 2020 22:31:15 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/npm-install-leveldown-and-upgrade-glibc/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;今天安装某个npm库，但是安装失败了。日志里看看到是安装leveldown包失败了，于是单独安装leveldown进行测试。&lt;/p&gt;
&lt;h2 id=&#34;问题排查&#34;&gt;问题排查&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;[duser@hy-docker02 tmp]$ npm i leveldown
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt; leveldown@5.6.0 install /tmp/node_modules/leveldown
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;gt; node-gyp-build
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make: Entering directory `/tmp/node_modules/leveldown/build&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  CXX(target) Release/obj.target/leveldb/deps/leveldb/leveldb-1.20/db/builder.o
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cc1plus: error: unrecognized command line option &amp;#34;-std=gnu++1y&amp;#34;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make: *** [Release/obj.target/leveldb/deps/leveldb/leveldb-1.20/db/builder.o] Error 1
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make: Leaving directory `/tmp/node_modules/leveldown/build&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;从&lt;code&gt;cc1plus: error: unrecognized command line option &amp;quot;-std=gnu++1y&amp;quot;&lt;/code&gt;可以看出是调用g++编译时使用了不支持的参数。&lt;/p&gt;
&lt;p&gt;因为另外有台机器（机器B）是可以将这个库安装成功的，所以我到那台机器执行 &lt;code&gt;g++ -std=gnu++1y 1.c&lt;/code&gt;，但也是报一样的错误。并且这台机器的g++版本和我失败的那台是一致的，甚至操作系统版本也比较低。为什么机器B能够安装成功呢，一时想不出头绪来。&lt;/p&gt;
&lt;p&gt;到安装成功的node_module/leveldown/里看了下，有个prebuilds目录引起了我的注意，发现里边放了各主流平台的预编译好的文件。再结合README，里边说了，如果预编译好的文件不存在（应该还做了检查）才会 &lt;code&gt;fallback to a compile step&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;这就能够解释为什么同样的g++版本，机器B能够成功安装了。大概就是机器B使用了预编译库，没有触发重新编译。&lt;/p&gt;
&lt;p&gt;从github下载源码，打算跟踪下为什么当前机器没有用预编译好的包。下载后发现package.json文件有个&lt;code&gt;test-prebuild&lt;/code&gt;命令用于测试预编译包。于是先npm install先安装一些包，然后执行&lt;code&gt;download-prebuilds&lt;/code&gt;把编译好的包先下载下来。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-mysql&#34; data-lang=&#34;mysql&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;duser&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;hy&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;docker02&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;foamzou&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;leveldown&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;master&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt;&lt;span class=&#34;err&#34;&gt;$&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prebuild&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;leveldown&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prebuild&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;foamzou&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;leveldown&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;master&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;k&#34;&gt;cross&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;env&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;PREBUILDS_ONLY&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;npm&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;leveldown&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;@&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;5&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;6&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tmp&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;foamzou&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;leveldown&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;master&lt;/span&gt;&lt;span class=&#34;w&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;&amp;gt;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;standard&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;nyc&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tape&lt;/span&gt;&lt;span class=&#34;w&#34;&gt; &lt;/span&gt;&lt;span class=&#34;n&#34;&gt;test&lt;/span&gt;&lt;span class=&#34;cm&#34;&gt;/*-test.js | faucet) &amp;amp;&amp;amp; nyc report
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;standard: Node 10.12.0 or greater is required. `standard` did not run.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;module.js:664
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;  return process.dlopen(module, path._makeLong(filename));
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;                 ^
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;Error: /lib64/libc.so.6: version `GLIBC_2.14&amp;#39; not found (required by /tmp/foamzou/leveldown-master/prebuilds/linux-x64/node.napi.glibc.node)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    at Object.Module._extensions..node (module.js:664:18)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    at Module.load (module.js:554:32)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    at tryModuleLoad (module.js:497:12)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    at Function.Module._load (module.js:489:3)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    at Module.require (module.js:579:17)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    at require (internal/module.js:11:18)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    at load (/tmp/foamzou/leveldown-master/node_modules/node-gyp-build/index.js:21:10)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    at Object.&amp;lt;anonymous&amp;gt; (/tmp/foamzou/leveldown-master/binding.js:2:153)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    at Module._compile (module.js:635:30)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;cm&#34;&gt;    at Module.replacementCompile (/tmp/foamzou/leveldown-master/node_modules/append-transform/index.js:60:13)
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后发现上面这个&lt;code&gt;GLIBC_2.14&#39; not found&lt;/code&gt;，原来是glibc的问题。执行 &lt;code&gt;strings /lib64/libc.so.6|grep GLIBC&lt;/code&gt;查看本机glibc版本，最高到GLIBC_2.12，而机器B是GLIBC_2.17。所以接下来升级glibc即可。由于是测试机器，并且版本更新不大，不是很担心升级后大量软件挂掉的问题。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用CloudFlare/百度云加速做免费SSL</title>
      <link>https://blog.foamzou.com/posts/use-cloudflare-as-free-ssl/</link>
      <pubDate>Wed, 30 Sep 2020 20:37:41 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/use-cloudflare-as-free-ssl/</guid>
      <description>&lt;p&gt;2021-11-14更新：百度云加速过期了，CDN 也直接用七牛云的吧。有兴趣的朋友可以看这篇文章《&lt;a href=&#34;https://blog.foamzou.com/posts/image-hosted-service-qiniu/&#34;&gt;用七牛云作图床并配置 SSL&lt;/a&gt;》&lt;/p&gt;
&lt;p&gt;2020-11-03更新：已将cdn部署到&lt;a href=&#34;https://su.baidu.com/&#34;&gt;百度云加速服务&lt;/a&gt;。国内使用Cloudflare确实不行，最近看到百度云加速有免费套餐，个人博客来说完全够用了。步骤不复杂，就不详细描述了。步骤大概为：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;需要域名备案&lt;/li&gt;
&lt;li&gt;在百度云加速实名认证&lt;/li&gt;
&lt;li&gt;添加网站时，选择CNAME接入方式。（官方推荐的是NS方式，这样可以全称托管，但我目前只希望托管我的cdn域名）&lt;/li&gt;
&lt;li&gt;证书管理-证书申请可以免费申请ssl证书&lt;/li&gt;
&lt;li&gt;安全功能-HTTPS，选择半程加密。这样源站可以不支持SSL&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;p&gt;以下为原文：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;注意一下，由于众所周知的原因，在国内访问CloudFlare会很慢，我只是用于个人博客的部分图片使用，所以容忍度会比较高。&lt;strong&gt;有高要求的同学，不建议在国内使用。&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;对于经常科学上网，尤其是自己搭建科学上网的同学来说，CloudFlare一定再熟悉不过了。经常有同学将它套在国外机子上，用来加速流量。因为CF本身就是一个CDN服务，可以用于加速各种服务。&lt;/p&gt;
&lt;p&gt;今天我选择用它做我图床的cdn服务。&lt;/p&gt;
&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;起因是这样的，这两天发现我博客的背景图加载不出来了，查看网络请求后发现我的图床域名&lt;code&gt;https://cdn.foamzou.com/legacy&lt;/code&gt;被强制使用&lt;code&gt;https&lt;/code&gt;发起请求了。这是因为我的html页面是https的，chrome很不喜欢https页面包含了http请求，认为这很不安全。所以它强制在发起请求的时候在http header加了&lt;code&gt;upgrade-insecure-requests: 1&lt;/code&gt;。该头部会告知服务端，客户端支持将http升级为https。在接下来的http请求中，浏览器会将其替换为https再发起请求。(但我将&lt;code&gt;upgrade-insecure-requests: 1&lt;/code&gt;改为0，还是会替换为https，不确定是不是该头部的原因，也可能是chrome最近自升级加的特性。其它浏览器例如Safari就正常访问)&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Ok，已经确定是chrome新版本的特性，将混合内容（mixed content）的http改写为https了。在2019年10月份，google就通过博客发布了chrome关于内容安全的更新时间表：
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- v79 [2019年12月发布到稳定渠道]：将mixed的脚本文件、iframe升级到https
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- v80 [2020年1月发布到试用渠道]：将mixed的音视频文件升级到https。虽然允许mixed的图片文件加载，但该站点会在地址栏被标记不安全
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;- v81 [2020年2月发布到试用渠道]：将mixed的图片文件升级到https
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;按计划是2月份发布到early release渠道，估计也是前段时间才被更新到稳定渠道，然后自更新导致我的图片挂掉
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;问题来了，我的图床域名并不支持https，导致ssl握手失败，我的图裂开了！如果要支持的话，我需要在七牛支付一定的费用（https流量没有免费额度），而且需要配置一个ssl证书，可以购买（几千块一年，好贵），也可以上传自定义证书（也略麻烦）。&lt;/p&gt;
&lt;p&gt;突然想起我可以把CF套在域名上，CF有免费套餐，一般的需求足够了，ssl证书还不用自己配置。&lt;/p&gt;
&lt;h2 id=&#34;开干&#34;&gt;开干&lt;/h2&gt;
&lt;p&gt;说干就干，打开&lt;a href=&#34;https://dash.cloudflare.com/&#34;&gt;官网&lt;/a&gt;，没有账号的话注册一个。&lt;/p&gt;
&lt;h3 id=&#34;添加站点&#34;&gt;添加站点&lt;/h3&gt;
&lt;p&gt;注意，这里只能填写根域，不支持单独加速子域名。但我只想加速某个子域名怎么办？没事，后面步骤可以配置。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.foamzou.com/posts/use-cloudflare-as-free-ssl/image.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;添加站点&lt;/p&gt;
&lt;h3 id=&#34;选择套餐&#34;&gt;选择套餐&lt;/h3&gt;
&lt;p&gt;选择免费的就可以啦&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.foamzou.com/posts/use-cloudflare-as-free-ssl/image-1-1024x780.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;选择套餐&lt;/p&gt;
&lt;h3 id=&#34;修改代理状态&#34;&gt;修改代理状态&lt;/h3&gt;
&lt;p&gt;选择完套餐后，CF会将你域名的解析记录带出来，如下图&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.foamzou.com/posts/use-cloudflare-as-free-ssl/image-2-1024x501.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;dns记录&lt;/p&gt;
&lt;p&gt;在代理状态那列点击小图标可以切换状态。现在有两个状态可以切换，&lt;code&gt;已代理&lt;/code&gt;和&lt;code&gt;仅限DNS&lt;/code&gt;。注意，对于你不希望走CF的域名，请设置为&lt;code&gt;仅限DNS&lt;/code&gt;，这样CF只会帮你将域名解析到你的源ip，而代理则解析到CDN节点，再帮你回源。&lt;/p&gt;
&lt;p&gt;由于CF在国内的网络情况并没有阿里云这些本地的厂商好，所以博客域名我没有走CF，只是代理了&lt;code&gt;file.zoufeng.net&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;好，点击继续。&lt;/p&gt;
&lt;h3 id=&#34;修改域名的dns服务器&#34;&gt;修改域名的DNS服务器&lt;/h3&gt;
&lt;p&gt;这一步需要到你的域名管理台(在哪买的域名就去哪)，将原来的DNS服务器删除，换成CF自己的。完成之后点击蓝色按钮。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.foamzou.com/posts/use-cloudflare-as-free-ssl/image-3-793x1024.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;设置ssl&#34;&gt;设置ssl&lt;/h3&gt;
&lt;p&gt;点击SSL/TLS按钮，将选项修改为&lt;code&gt;灵活&lt;/code&gt;，这样CF节点支持ssl，而源服务器不需要ssl。&lt;code&gt;完全&lt;/code&gt;的话，源服务器就需要支持ssl了。我的七牛图床域名不支持ssl，所以选择了灵活。这也是本篇文章的最开始的目的。&lt;/p&gt;
&lt;p&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://blog.foamzou.com/posts/use-cloudflare-as-free-ssl/image-4-1024x649.png&#34;&gt;&lt;/p&gt;
&lt;h3 id=&#34;等待生效&#34;&gt;等待生效&lt;/h3&gt;
&lt;p&gt;等吧。修改DNS服务器那一步耗费的时间可能会长一些。你可以通过ping命令检查是否已经解析到CF的ip了。&lt;/p&gt;
&lt;h2 id=&#34;其它&#34;&gt;其它&lt;/h2&gt;
&lt;p&gt;你可能看到上一张图有很多菜单：缓存、防火墙、worker等。CF挺多功能的，有兴趣的话，注册一个玩玩吧。worker就是serverless那东西，类似AWS CloudFront的lambda@edge&lt;/p&gt;</description>
    </item>
    <item>
      <title>nginx proxy_pass后gzip不生效</title>
      <link>https://blog.foamzou.com/posts/gzip-not-work-after-proxy_pass/</link>
      <pubDate>Fri, 26 Jul 2019 14:02:23 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/gzip-not-work-after-proxy_pass/</guid>
      <description>&lt;p&gt;有一台服务器只能对外开80端口，但该服务器有几个项目同时共用。因此做了一个方案，使用不同的url前缀，proxy_pass到对应项目监听的端口。 如default.conf配置如下&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	listen       &lt;span class=&#34;m&#34;&gt;80&lt;/span&gt; default_server&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	location /a/ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           rewrite ^/a/&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;$ /&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; break&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;# 剥掉 /a 这一层&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           proxy_pass http://127.0.0.1:8083&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	location /b/ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           rewrite ^/b/&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;$ /&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; break&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           proxy_pass http://127.0.0.1:8084&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;	location /c/ &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           rewrite ^/c/&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;.*&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;$ /&lt;span class=&#34;nv&#34;&gt;$1&lt;/span&gt; break&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;           proxy_pass http://127.0.0.1:8085&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;a项目配置里开启了gzip&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;server &lt;span class=&#34;o&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    listen 8083&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    root /path/to/a&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    gzip on&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    gzip_comp_level 3&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    ....
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但发现gzip未生效。 后面把gzip配置放到default.conf的location部分就正常运行了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>centos6升级python到2.7版本</title>
      <link>https://blog.foamzou.com/posts/upgrade-python-to-2-7-in-centos/</link>
      <pubDate>Tue, 09 Apr 2019 17:36:08 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/upgrade-python-to-2-7-in-centos/</guid>
      <description>&lt;p&gt;有些软件需要安装python2.7，但centos6默认安装的是2.6版本。但yum依赖2.6，所以不能覆盖安装。需要保留两者&lt;/p&gt;
&lt;h2 id=&#34;编译安装python27&#34;&gt;编译安装python2.7&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget https://www.python.org/ftp/python/2.7.14/Python-2.7.14.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar xvf Python-2.7.14.tgz
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo mkdir /usr/local/python2.7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; Python-2.7.14
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/python2.7 --enable-shared
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;验证&#34;&gt;验证&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; /usr/local/python2.7/bin
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./python
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;报错：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./python: error &lt;span class=&#34;k&#34;&gt;while&lt;/span&gt; loading shared libraries: libpython2.7.so.1.0: cannot open shared object file: No such file or directory
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将python2.7的动态链接库加入到系统会读取的配置中&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /etc/ld.so.conf  &lt;span class=&#34;c1&#34;&gt;# 在该配置文件追加一行：/usr/local/python2.7/lib&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ldconfig
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;备份原有的python&#34;&gt;备份原有的python&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;which python
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/bin/python&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;myhost tmp&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;$ md5sum /usr/bin/python /usr/bin/python2.6
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;8505ca7b24f60f8dca8d6d2622ed0563  /usr/bin/python
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;8505ca7b24f60f8dca8d6d2622ed0563  /usr/bin/python2.6
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 发现已经有python2.6，且与python的md5一致，那就不用备份直接删除了&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo rm /usr/bin/python
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;编辑yum的执行程序&#34;&gt;编辑yum的执行程序&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo vim /usr/bin/yum
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 将#!/usr/bin/python 中的python改为python2.6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 即 #!/usr/bin/python2.6&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;执行yum验证下，没有报错就ok了&lt;/p&gt;</description>
    </item>
    <item>
      <title>根据pid查找进程所在的执行文件</title>
      <link>https://blog.foamzou.com/posts/get-absolute-path-of-a-running-process/</link>
      <pubDate>Mon, 08 Apr 2019 16:52:43 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/get-absolute-path-of-a-running-process/</guid>
      <description>&lt;ul&gt;
&lt;li&gt;查看执行进程的文件&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo ls -l /proc/&amp;lt;pid&amp;gt;/exe
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例如，可以看到node这个可执行程序的绝对路径&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@iZ94qht95zsZ ~# ps -ef &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep node
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root     &lt;span class=&#34;m&#34;&gt;17078&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;16750&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;88&lt;/span&gt; 16:47 pts/0    00:00:00 node index.js
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@iZ94qht95zsZ ~# sudo ls -l /proc/17078/exe
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lrwxrwxrwx &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root root &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt; 4月   &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; 16:47 /proc/17078/exe -&amp;gt; /usr/local/node-v10.4.0-linux-x64/bin/node
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;查看进程的工作目录&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;上面ps只能看到相对路径的index.js。我们要查看绝对路径可用以下命令&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pwdx &amp;lt;pid&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;例如，该index.js文件的工作目录为/root/test&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root@iZ94qht95zsZ ~# pwdx &lt;span class=&#34;m&#34;&gt;17078&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;17078: /root/test
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>编译安装php7.3</title>
      <link>https://blog.foamzou.com/posts/install-php7/</link>
      <pubDate>Thu, 28 Mar 2019 20:59:43 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/install-php7/</guid>
      <description>&lt;p&gt;最近在一台CentOS6.2的机器上部署php7.3，系统有点旧，稍微折腾点。&lt;/p&gt;
&lt;h2 id=&#34;安装需要的依赖&#34;&gt;安装需要的依赖&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libjpeg libpng freetype libjpeg-devel libpng-devel freetype-devel gmp-devel readline-devel libxslt-devel libmemcached  libmemcached-devel -y
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;编译安装&#34;&gt;编译安装&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;到&lt;a href=&#34;https://www.php.net/downloads.php&#34;&gt;官网&lt;/a&gt;下载最新的稳定版本&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;注意用户组最好与nginx的保持一致，例如我这里设置与nginx一致的nobody&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php7 --with-config-file-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/php7/etc --enable-fpm --with-fpm-user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nobody --with-fpm-group&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nobody --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-soap --with-libxml-dir --with-xmlrpc --with-openssl --with-mhash --with-pcre-regex --with-sqlite3 --with-zlib --enable-bcmath --with-iconv --with-bz2 --enable-calendar --with-curl&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/include/curl/ --with-cdb --enable-dom --enable-exif --enable-fileinfo --enable-filter --with-pcre-dir --enable-ftp --with-gd --with-openssl-dir --with-jpeg-dir --with-png-dir --with-zlib-dir --with-freetype-dir --enable-gd-jis-conv --with-gettext --with-gmp --with-mhash --enable-json --enable-mbstring --enable-mbregex --enable-mbregex-backtrack --with-onig --enable-pdo --with-mysqli&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysqlnd --with-pdo-mysql&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;mysqlnd --with-zlib-dir --with-pdo-sqlite --with-readline --enable-session --enable-shmop --enable-simplexml --enable-sockets --enable-sysvmsg --enable-sysvsem --enable-sysvshm --enable-wddx --with-libxml-dir --with-xsl --enable-zip --enable-mysqlnd-compression-support --with-pear --enable-opcache
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;编译期间遇到的问题汇总&#34;&gt;编译期间遇到的问题汇总&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;checking for cURL 7.15.5 or greater&amp;hellip; configure: error: cURL version 7.15.5 or later is required to compile php with cURL support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;实际上我本地已经安装了最新的版本。&amp;ndash;with-curl不指定路径的话，会在/usr/include/curl下找头文件。但我本机已有的libcurl貌似没有这些头文件。尝试`yum install curl curl-devel`，报了一个多版本冲突的问题。所以最后还是从curl官网下载了最新的tar包，手动编译安装后，--with-curl指定路径为/usr/local/include/curl/&lt;/p&gt;</description>
    </item>
    <item>
      <title>编译protobuf.so扩展</title>
      <link>https://blog.foamzou.com/posts/install-protobuf-so/</link>
      <pubDate>Thu, 28 Mar 2019 14:02:04 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/install-protobuf-so/</guid>
      <description>&lt;p&gt;在官网下载适合php版本的包。&lt;a href=&#34;https://pecl.php.net/package/protobuf&#34;&gt;pecl官网&lt;/a&gt; 解压&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar zxvf protobuf.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;cd到目录并用phpize生成configure文件&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; protobuf-3.7.1/&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;如果是从github下载的，则cd到protobuf-3.7.1/php/ext/google/protobuf&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;phpize
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;编译三板斧&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --with-php-config&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/local/bin/php-config
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo make install
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;最后会提示你已经装到指定扩展目录了 Installing shared extensions:     /usr/local/php7/lib/php/extensions/no-debug-non-zts-20180731/ 其它扩展编译也是一样的方式：参考 /posts/compiled-php-extension-in-linux/&lt;/p&gt;</description>
    </item>
    <item>
      <title>在mac安装nginx模块</title>
      <link>https://blog.foamzou.com/posts/install-nginx-module-in-mac/</link>
      <pubDate>Sat, 05 Jan 2019 19:49:54 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/install-nginx-module-in-mac/</guid>
      <description>&lt;p&gt;今天有需求需要用到nginx的stream模块，但mac已经安装的nginx默认是不带该扩展的。 我选择了重新安装nginx。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew tap denji/nginx
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew install nginx-full --with-stream
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;#如果已经是最新版本，则会提示nginx版本已安装，可选择重新安装&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew reinstall nginx-full --with-stream
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;若安装nginx时提示，与已有nginx有冲突。需要先断开软链&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew unlink nginx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>排查elasticsearch的cpu居高不下，查询慢的问题</title>
      <link>https://blog.foamzou.com/posts/cpu-of-elasticsearch-high-search-slow/</link>
      <pubDate>Mon, 16 Jul 2018 13:16:26 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/cpu-of-elasticsearch-high-search-slow/</guid>
      <description>&lt;h2 id=&#34;背景&#34;&gt;背景&lt;/h2&gt;
&lt;p&gt;近来es查询很慢，kibana的discover界面偶尔还会因为查询请求超时而无法显示数据。&lt;code&gt;/_cat/indices?v&lt;/code&gt; 等对es的查询也慢的出奇，需要1、2分钟才返回结果。&lt;/p&gt;
&lt;h2 id=&#34;排查&#34;&gt;排查&lt;/h2&gt;
&lt;p&gt;top命令看了es的java进程，发现cpu一直很高，130%左右，一直没有下降过。查看es的日志，发现gc.log中几乎每秒都要触发一次GC &lt;code&gt;Full GC (Allocation Failure)&lt;/code&gt;。内存不够用，又没有内存可回收，所以GC也不断。怪不得CPU这么高，大部分时间都用在gc上面了。&lt;/p&gt;
&lt;h2 id=&#34;处理&#34;&gt;处理&lt;/h2&gt;
&lt;p&gt;调整es可使用的内存大小。编辑&lt;code&gt;config/jvm.options&lt;/code&gt;，调整了Xms和Xmx的大小，由原来默认的1g调整为10g。（官方建议这个值不要超过物理内存的50%，也不要超过32G。详见&lt;a href=&#34;https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html&#34;&gt;官网说明&lt;/a&gt;）接着重启es就好了。观察cpu，虽然偶尔也会彪上130%，但总体来说正常了，查询也变得很快。 ps：es重启后，需要观察logstash是否退出了。如果退出，需要重新把logstash拉起来。 pss：这次是小坑，后面可能还有很多大坑需要踩。后续有cpu高、查询慢的问题也一并归类到该文。&lt;/p&gt;</description>
    </item>
    <item>
      <title>mac卸载和安装java指定版本</title>
      <link>https://blog.foamzou.com/posts/uninstall-and-install-specific-java-version-on-mac/</link>
      <pubDate>Fri, 29 Jun 2018 15:47:35 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/uninstall-and-install-specific-java-version-on-mac/</guid>
      <description>&lt;p&gt;2020-04-02更新： 之前的安装方法已经废弃了，可通过以下方式安装&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew tap AdoptOpenJDK/openjdk
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew cask install &amp;lt;version&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;a href=&#34;https://github.com/AdoptOpenJDK/homebrew-openjdk&#34;&gt;这里&lt;/a&gt;有全部的version列表 例如可以这么安装&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew cask install adoptopenjdk8
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;hr&gt;
&lt;p&gt;之前用brew安装了java9。但我有些软件不兼容，只能降级到java8。这里简单记录下步骤。&lt;/p&gt;
&lt;h2 id=&#34;卸载&#34;&gt;卸载&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew cask uninstall java
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;安装指定版本&#34;&gt;安装指定版本&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;brew tap caskroom/versions
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;foam@foamdeMBP: sens » brew cask search java                                                                                                                                         &lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;15:13:54&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; Exact Match
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nv&#34;&gt;java&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; Partial Matches
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;charles-applejava                     eclipse-javascript                    java6                                 netbeans-java-ee                      yourkit-java-profiler
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;eclipse-java                          java-jdk-javadoc                      java8                                 netbeans-java-se
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;估计我没更新brew的缘故，上面只列出java6和java8。java7呢，有点懵逼。 键入下面命令，然后就会自动下载安装了。可能会有点慢。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;foam@foamdeMBP: sens » brew cask install java8
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Updating Homebrew...
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;^CWarning: Unexpected method &lt;span class=&#34;s1&#34;&gt;&amp;#39;license&amp;#39;&lt;/span&gt; called during caveats on Cask java8.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Follow the instructions here:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  https://github.com/caskroom/homebrew-cask#reporting-bugs
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; Caveats
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;This Cask makes minor modifications to the JRE to prevent issues with
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;packaged applications, as discussed here:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  https://bugs.eclipse.org/bugs/show_bug.cgi?id&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;411361&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;If your Java application still asks &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; JRE installation, you might need
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;to reboot or logout/login.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; Satisfying &lt;span class=&#34;nv&#34;&gt;dependencies&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; Downloading http://download.oracle.com/otn-pub/java/jdk/8u172-b11/a58eab1ec242421181065cdc37240b08/jdk-8u172-macosx-x64.dmg
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;######################################################################## 100.0%&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; Verifying checksum &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; Cask &lt;span class=&#34;nv&#34;&gt;java8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; Installing Cask &lt;span class=&#34;nv&#34;&gt;java8&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; Running installer &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; java8&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; your password may be necessary.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; Package installers may write to any location&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt; options such as --appdir are ignored.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Password:
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; installer: Package name is JDK &lt;span class=&#34;m&#34;&gt;8&lt;/span&gt; Update &lt;span class=&#34;nv&#34;&gt;172&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; installer: Installing at base path /
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;==&lt;/span&gt;&amp;gt; installer: The install was successful.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;🍺  java8 was successfully installed!
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;确认下，ok了。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Squid使用SSLBump正向代理</title>
      <link>https://blog.foamzou.com/posts/squid-proxy-with-ssl-bump/</link>
      <pubDate>Sat, 23 Sep 2017 18:58:39 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/squid-proxy-with-ssl-bump/</guid>
      <description>&lt;p&gt;背景：最近需要使用nodeJs访问一个历史久远的网站，那个网站的服务器证书是错误的，且使用的协议是TLSv1.0。浏览器上不得不使用IE并关闭各种安全设置和设置为兼容模式才能正常访问。Nodejs的新版本已经不支持这种不安全的协议，所以需要搭建一个代理服务进行访问。刚开始使用的是&lt;a href=&#34;https://github.com/mitmproxy/mitmproxy&#34;&gt;mitmproxy&lt;/a&gt; ，当时的最新版本对于SSL错误会报错，所以将源码中校验部分去掉就可以正常使用了。但部署到生产环境，会出现cpu占用过高的情况。所以后面换了Squid。&lt;/p&gt;
&lt;p&gt;部署Squid参考了一篇文章，原文：&lt;a href=&#34;https://smoothnet.org/squid-v3-5-proxy-with-ssl-bump/&#34;&gt;here&lt;/a&gt;，下面是简单翻译。&lt;/p&gt;
&lt;p&gt;  Squid是个很强大的Web代理，它可以应用于无线认证、重定向、用户身份验证、日志记录等。但其在SSL方面一直存在局限性。在3.2版本之前，Squid的策略只是简单地传递SSL加密流量，因为它无法校验受信任的SSL链接。对于每个SSL连接也无法给用户做预警。但3.5版本后允许更多的控制，但要注意仍然无法校验受信任的SSL链接。&lt;/p&gt;
&lt;p&gt;这里不会过多地介绍使用SSL Bump配置Squid以外的知识，对于编译和配置squid的细节你最好看下官方文档。 如果通过代理自动监测，通知浏览器连接到代理服务器，这样是挺简单的。但有些用户可能会试图规避这一点，并尝试直接连接。 在这种情况下，我们需要强制这些用户通过截取流量来使用代理。SSL Bumping的前提是中间人攻击，但由于这是在您的用户清楚所有流量都是检查过的环境中完成的，因此这并不是真正的攻击，这只是一种策略。Squid用于执行SSL Bumping有一些新方法，但是我会总结出最具实战性的方法：Squid收到一个https请求，然后为用户建立安全连接。 远程连接建立后，Squid会重新加密所有流量; 这时候的加密使用的是本地私钥，以及本地证书颁发机构即时创建出来的证书。 所以我们首先要确保的是你已经安装了3.5或更高版本的Squid。尽管3.2，3.3以及3.4版本也能实现，但3.5版本后SSL Bump的指令有了些显著变化。另外，编译Squid时需要带上‘&amp;ndash;with-openssl’参数。 在CentOS我使用以下参数来编译Squid（foam：我带上&amp;ndash;enable-ipf-transparent参数会报错，所以我是去掉再编译的）&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-gdscript3&#34; data-lang=&#34;gdscript3&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;o&#34;&gt;./&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;configure&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;exec&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;includedir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;include&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;datadir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;share&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libdir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib64&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;libexecdir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib64&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;squid&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;localstatedir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sysconfdir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;etc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;squid&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;sharedstatedir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lib&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;logdir&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;squid&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pidfile&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=/&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;var&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;squid&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pid&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;default&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;user&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;squid&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;silent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rules&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;dependency&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tracking&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;with&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;openssl&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;icmp&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;delay&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;pools&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;useragent&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;log&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;esi&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;follow&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;x&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;forwarded&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;ipf&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;transparent&lt;/span&gt; \
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;o&#34;&gt;--&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;auth&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接下来我们需要生成本地的SSL证书，这里我使用的是简单的命令，没有在意怎么去加密。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# Generate Private Key
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;openssl genrsa -out example.com.private 2048  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;然后是创建Certificate Signing Request（CSR），即证书注册请求。&lt;/p&gt;</description>
    </item>
    <item>
      <title>在XAMPP、WAMP等集成环境中配置虚拟站点</title>
      <link>https://blog.foamzou.com/posts/set-vhost-in-xampp-or-wamp/</link>
      <pubDate>Thu, 23 Jul 2015 22:13:58 +0800</pubDate>
      <guid>https://blog.foamzou.com/posts/set-vhost-in-xampp-or-wamp/</guid>
      <description>&lt;p&gt;对于不喜欢折腾运行环境的同学来说，集成环境包绝对是好东西。由于WAMP上php5.6版本有点小坑，现在已转向XAMPP的怀抱。&lt;/p&gt;
&lt;h4 id=&#34;给apache服务器授权&#34;&gt;给apache服务器授权&lt;/h4&gt;
&lt;p&gt;打开Apache的配置文件&lt;strong&gt;httpd.conf&lt;/strong&gt;，找到下面的节点&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-sh&#34; data-lang=&#34;sh&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;DocumentRoot &lt;span class=&#34;s2&#34;&gt;&amp;#34;C:/xampp/htdocs&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;Directory &lt;span class=&#34;s2&#34;&gt;&amp;#34;C:/xampp/htdocs&amp;#34;&lt;/span&gt;&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Possible values for the Options directive are &amp;#34;None&amp;#34;, &amp;#34;All&amp;#34;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# or any combination of:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Note that &amp;#34;MultiViews&amp;#34; must be named *explicitly* --- &amp;#34;Options All&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# doesn&amp;#39;t give it to you.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# The Options directive is both complicated and important.  Please see&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# http://httpd.apache.org/docs/2.4/mod/core.html#options&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# for more information.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Options Indexes FollowSymLinks Includes ExecCGI
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# AllowOverride controls what directives may be placed in .htaccess files.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# It can be &amp;#34;All&amp;#34;, &amp;#34;None&amp;#34;, or any combination of the keywords:&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#   AllowOverride FileInfo AuthConfig Limit&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    AllowOverride All
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;# Controls who can get stuff from this server.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;c1&#34;&gt;#&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    Require all granted
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;/Directory&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以看到已经在&lt;strong&gt;C:/xampp/htdocs&lt;/strong&gt;目录下授权了，你可以把多个项目放在该目录下。我一般习惯在非系统盘放置项目，此时将&lt;strong&gt;C:/xampp/htdocs&lt;/strong&gt;改为自定义目录就可以。 接着查看是否加载了vhost的配置文件。若你的配置文件没有这一行，你可以手动添加上去并在对应目录新建httpd-vhosts.conf配置文件。&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
