<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.2">Jekyll</generator><link href="https://www.azio.me/feed.xml" rel="self" type="application/atom+xml" /><link href="https://www.azio.me/" rel="alternate" type="text/html" /><updated>2023-10-27T00:18:08+08:00</updated><id>https://www.azio.me/feed.xml</id><title type="html">阿舟哦</title><subtitle>记录我的赚美刀之路</subtitle><entry><title type="html">换了新的blog系统，不用wp了</title><link href="https://www.azio.me/new-jekyll-blog/" rel="alternate" type="text/html" title="换了新的blog系统，不用wp了" /><published>2023-10-26T23:58:23+08:00</published><updated>2023-10-26T23:58:23+08:00</updated><id>https://www.azio.me/new-jekyll-blog</id><content type="html" xml:base="https://www.azio.me/new-jekyll-blog/"><![CDATA[<p>用不起wp里，数据库还挺占资源的。</p>

<p>用jekyll吧，纯静态，随便搞个站点就能用了。✌️</p>]]></content><author><name>Azio</name></author><category term="未分类" /><category term="jekyll" /><category term="blog" /><summary type="html"><![CDATA[用不起wp里，数据库还挺占资源的。]]></summary></entry><entry><title type="html">如何给NGINX安装ngx_http_geoip2_module模块</title><link href="https://www.azio.me/how-to-install-ngx_http_geoip2_module/" rel="alternate" type="text/html" title="如何给NGINX安装ngx_http_geoip2_module模块" /><published>2018-08-30T03:34:36+08:00</published><updated>2018-08-30T03:34:36+08:00</updated><id>https://www.azio.me/how-to-install-ngx_http_geoip2_module</id><content type="html" xml:base="https://www.azio.me/how-to-install-ngx_http_geoip2_module/"><![CDATA[<p>现在需要给NGINX安装 ngx_http_geoip2_module 模块，以方便做adsense的过滤ip和isp的操作。安装ngx_http_geoip2_module模块有以下几个步骤：</p>

<ol>
  <li><em>安装libmaxminddb模块</em></li>
  <li><em>编译安装ngx_http_geoip2_module模块</em></li>
  <li><em>配置NGINX的ngx_http_geoip2_module模块</em></li>
</ol>

<p><span style="color: #ff0000;"><strong>开始之前，我们需要确保服务器已经拥有gcc编译环境，如果你的系统还没有安装，可以先安装好编译环境再继续。</strong></span></p>

<p>如果你是使用宝塔面板，那么编译环境是已经准备好的，可以直接进行下一步操作。</p>

<p>如果你是使用ubuntu系统，可以用过apt直接安装编译环境：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>apt update
<span class="nv">$ </span><span class="nb">sudo </span>apt <span class="nb">install </span>build-essential <span class="nt">-y</span>
</code></pre></div></div>

<p>准备好编译环境，我们就可以正式开始了。</p>

<h1 id="1-安装libmaxminddb模块">1. 安装libmaxminddb模块</h1>

<p>安装libmaxminddb有两种方法，一种是通过源码编译安装，一种是直接通过apt安装，如果大家使用ubuntu，就可以简单的使用apt直接安装了。我先介绍一下通过apt安装。</p>

<h2 id="a-通过apt安装libmaxminddb模块">a. 通过apt安装libmaxminddb模块</h2>

<p>此方法在Ubuntu 18.04.1 LTS测试通过。首先给APT添加PPA软件源：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>add-apt-repository ppa:maxmind/ppa
</code></pre></div></div>

<p>接下来安装相关软件包：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>apt update
<span class="nv">$ </span><span class="nb">sudo </span>apt <span class="nb">install </span>libmaxminddb0 libmaxminddb-dev mmdb-bin
</code></pre></div></div>

<h2 id="b-通过源码编译安装">b. 通过源码编译安装</h2>

<p>一般通过编译安装可以通过git clone在github上的最新的源码，也可以通过release页面下载最新发行版tar包。</p>

<h3 id="通过git-clone在github上最新的源码">通过git clone在github上最新的源码：</h3>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>git clone <span class="nt">--recursive</span> https://github.com/maxmind/libmaxminddb
<span class="nv">$ </span><span class="nb">cd </span>libmaxminddb
<span class="nv">$ </span>./bootstrap 
</code></pre></div></div>

<p>此时源码已保存在当前路径的libmaxminddb文件夹中。</p>

<h3 id="通过release页面下载最新发行版tar包">通过release页面下载最新发行版tar包：</h3>

<p>我们打开https://github.com/maxmind/libmaxminddb/releases页面查看最新的发行版tar包地址为：https://github.com/maxmind/libmaxminddb/releases/download/1.3.2/libmaxminddb-1.3.2.tar.gz</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>wget https://github.com/maxmind/libmaxminddb/releases/download/1.3.2/libmaxminddb-1.3.2.tar.gz
<span class="nv">$ </span><span class="nb">tar </span>xzvf libmaxminddb-1.3.2.tar.gz
<span class="nv">$ </span><span class="nb">cd </span>libmaxminddb-1.3.2
</code></pre></div></div>

<p>此时源码已保存在当前路径的libmaxminddb-1.3.2文件夹中。</p>

<h3 id="编译安装libmaxminddb">编译安装libmaxminddb：</h3>

<p>上一步我们已经切换到源码文件夹中，我们直接开始输入编译命令即可。</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>./configure
<span class="nv">$ </span>make
<span class="nv">$ </span>make check
<span class="nv">$ </span><span class="nb">sudo </span>make <span class="nb">install</span>
<span class="nv">$ </span><span class="nb">sudo </span>ldconfig
</code></pre></div></div>

<p>这时如果以上的步骤没有出错，我们的libmaxminddb就安装好了。我们可以输入mmdblookup看看是否安装成功。</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>mmdblookup <span class="nt">--version</span>

  mmdblookup version 1.3.2

</code></pre></div></div>

<p>出现这个表示安装成功了。</p>

<h1 id="2编译安装ngx_http_geoip2_module模块">2.编译安装ngx_http_geoip2_module模块</h1>

<p>我在安装ngx_http_geoip2_module模块的时候碰到好多坑，如果看这么文章的读者对nginx编译不太熟悉的话，请严格按照我的步骤进行。</p>

<h2 id="首先我们要下载ngx_http_geoip2_module的源码">首先，我们要下载ngx_http_geoip2_module的源码</h2>

<p>一样我们可以通过github直接clone源码或者下在release包再解压出源码，我现在使用release包解压的方法进行操作。</p>

<p>打开ngx_http_geoip2_module的release页面https://github.com/leev/ngx_http_geoip2_module/releases，我们下载最新的3.0版本：https://github.com/leev/ngx_http_geoip2_module/archive/3.0.tar.gz</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>wget https://github.com/leev/ngx_http_geoip2_module/archive/3.0.tar.gz
<span class="nv">$ </span><span class="nb">tar </span>xzvf 3.0.tar.gz
</code></pre></div></div>

<p>这时候源码已经保存当前路径的ngx_http_geoip2_module-3.0文件夹中。</p>

<h2 id="然后我们需要获得与当前nginx版本相同的源码">然后，我们需要获得与当前nginx版本相同的源码</h2>

<p>这是我这边也分两种情况，一种是自己通过apt安装的nginx，一种是通过bt.cn宝塔面板编译安装的nginx。</p>

<p>如果是通过宝塔面板编译安装的nginx，这种情况就简单一些，根据宝塔默认的安装路径，nginx的源码保存在/www/server/nginx/src，我们只用切换到这个路径进行下一步操作就好了。</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">cd</span> /www/server/nginx/src
</code></pre></div></div>

<p><span style="color: #ff0000;">这时候不要再下载nginx源码，因为宝塔的nginx编译参数都是需要在这个目录中执行的，防止意外情况发生，我们就在这个目录操作就好了。</span></p>

<p>———-</p>

<p>现在我讲讲在ubuntu上通过apt安装的nginx怎么找源码。首选需要保证源码的版本和当前运行nginx的版本要一致。运行一下命令查看nginx的版本号：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>nginx <span class="nt">-v</span>
nginx version: nginx/1.14.0 <span class="o">(</span>Ubuntu<span class="o">)</span>
</code></pre></div></div>

<p>可以看到我的nginx是1.14.0版本，在NGINX官网找到这个版本的下载店址：http://nginx.org/download/nginx-1.14.0.tar.gz</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>wget http://nginx.org/download/nginx-1.14.0.tar.gz
<span class="nv">$ </span><span class="nb">tar </span>xzvf nginx-1.14.0.tar.gz
<span class="nv">$ </span><span class="nb">cd </span>nginx-1.14.0
</code></pre></div></div>

<p>这是便下载好了nginx源码并切换到了nginx的源码文件夹中。</p>

<h2 id="接下来我们开始编译ngx_http_geoip2_module模块">接下来，我们开始编译ngx_http_geoip2_module模块</h2>

<p>其实之前的步骤都还比较简单的，我之前操作过都没遇到啥坑。但是到了这一步，我就碰到编译出来的模块死活用不了，一度放弃这个模块的地步。后来查了好多资料，才解决这个问题，就是要保持运行的nginx编译时的参数需要和编译模块的参数保持一致才行。真是搞死个人。</p>

<h3 id="所以我们先查看当前nginx的编译参数">所以，我们先查看当前nginx的编译参数：</h3>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>nginx <span class="nt">-V</span>
nginx version: nginx/1.14.0 <span class="o">(</span>Ubuntu<span class="o">)</span>
built with OpenSSL 1.1.0g  2 Nov 2017
TLS SNI support enabled
configure arguments: <span class="nt">--with-cc-opt</span><span class="o">=</span><span class="s1">'-g -O2 -fdebug-prefix-map=/build/nginx-mcUg8N/nginx-1.14.0=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2'</span> <span class="nt">--with-ld-opt</span><span class="o">=</span><span class="s1">'-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC'</span> <span class="nt">--prefix</span><span class="o">=</span>/usr/share/nginx <span class="nt">--conf-path</span><span class="o">=</span>/etc/nginx/nginx.conf <span class="nt">--http-log-path</span><span class="o">=</span>/var/log/nginx/access.log <span class="nt">--error-log-path</span><span class="o">=</span>/var/log/nginx/error.log <span class="nt">--lock-path</span><span class="o">=</span>/var/lock/nginx.lock <span class="nt">--pid-path</span><span class="o">=</span>/run/nginx.pid <span class="nt">--modules-path</span><span class="o">=</span>/usr/lib/nginx/modules <span class="nt">--http-client-body-temp-path</span><span class="o">=</span>/var/lib/nginx/body <span class="nt">--http-fastcgi-temp-path</span><span class="o">=</span>/var/lib/nginx/fastcgi <span class="nt">--http-proxy-temp-path</span><span class="o">=</span>/var/lib/nginx/proxy <span class="nt">--http-scgi-temp-path</span><span class="o">=</span>/var/lib/nginx/scgi <span class="nt">--http-uwsgi-temp-path</span><span class="o">=</span>/var/lib/nginx/uwsgi <span class="nt">--with-debug</span> <span class="nt">--with-pcre-jit</span> <span class="nt">--with-http_ssl_module</span> <span class="nt">--with-http_stub_status_module</span> <span class="nt">--with-http_realip_module</span> <span class="nt">--with-http_auth_request_module</span> <span class="nt">--with-http_v2_module</span> <span class="nt">--with-http_dav_module</span> <span class="nt">--with-http_slice_module</span> <span class="nt">--with-threads</span> <span class="nt">--with-http_addition_module</span> <span class="nt">--with-http_geoip_module</span><span class="o">=</span>dynamic <span class="nt">--with-http_gunzip_module</span> <span class="nt">--with-http_gzip_static_module</span> <span class="nt">--with-http_image_filter_module</span><span class="o">=</span>dynamic <span class="nt">--with-http_sub_module</span> <span class="nt">--with-http_xslt_module</span><span class="o">=</span>dynamic <span class="nt">--with-stream</span><span class="o">=</span>dynamic <span class="nt">--with-stream_ssl_module</span> <span class="nt">--with-mail</span><span class="o">=</span>dynamic <span class="nt">--with-mail_ssl_module</span>
</code></pre></div></div>

<p>可以看到configure arguments:后面一串，便是编译参数(<span style="color: #ff0000;">注意：可能你的服务器上nignx的编译参数和我不一样，所以请以实际情况位准，我只给出一个参考</span>)，我们先复制下来，然后在最后面加上一个编译ngx_http_geoip2_module模块的参数</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nt">--add-dynamic-module</span><span class="o">=</span>/root/dev/ngx_http_geoip2_module-3.0
</code></pre></div></div>

<p>其中“/root/dev/ngx_http_geoip2_module-3.0”是上一个操作中我保存了ngx_http_geoip2_module-3.0源码的地址。根据你们自己保存源码的位置做适当调成即可。注意在添加的参数前需要加上空格。我这里完整的参数为：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nt">--with-cc-opt</span><span class="o">=</span><span class="s1">'-g -O2 -fdebug-prefix-map=/build/nginx-mcUg8N/nginx-1.14.0=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2'</span> <span class="nt">--with-ld-opt</span><span class="o">=</span><span class="s1">'-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC'</span> <span class="nt">--prefix</span><span class="o">=</span>/usr/share/nginx <span class="nt">--conf-path</span><span class="o">=</span>/etc/nginx/nginx.conf <span class="nt">--http-log-path</span><span class="o">=</span>/var/log/nginx/access.log <span class="nt">--error-log-path</span><span class="o">=</span>/var/log/nginx/error.log <span class="nt">--lock-path</span><span class="o">=</span>/var/lock/nginx.lock <span class="nt">--pid-path</span><span class="o">=</span>/run/nginx.pid <span class="nt">--modules-path</span><span class="o">=</span>/usr/lib/nginx/modules <span class="nt">--http-client-body-temp-path</span><span class="o">=</span>/var/lib/nginx/body <span class="nt">--http-fastcgi-temp-path</span><span class="o">=</span>/var/lib/nginx/fastcgi <span class="nt">--http-proxy-temp-path</span><span class="o">=</span>/var/lib/nginx/proxy <span class="nt">--http-scgi-temp-path</span><span class="o">=</span>/var/lib/nginx/scgi <span class="nt">--http-uwsgi-temp-path</span><span class="o">=</span>/var/lib/nginx/uwsgi <span class="nt">--with-debug</span> <span class="nt">--with-pcre-jit</span> <span class="nt">--with-http_ssl_module</span> <span class="nt">--with-http_stub_status_module</span> <span class="nt">--with-http_realip_module</span> <span class="nt">--with-http_auth_request_module</span> <span class="nt">--with-http_v2_module</span> <span class="nt">--with-http_dav_module</span> <span class="nt">--with-http_slice_module</span> <span class="nt">--with-threads</span> <span class="nt">--with-http_addition_module</span> <span class="nt">--with-http_geoip_module</span><span class="o">=</span>dynamic <span class="nt">--with-http_gunzip_module</span> <span class="nt">--with-http_gzip_static_module</span> <span class="nt">--with-http_image_filter_module</span><span class="o">=</span>dynamic <span class="nt">--with-http_sub_module</span> <span class="nt">--with-http_xslt_module</span><span class="o">=</span>dynamic <span class="nt">--with-stream</span><span class="o">=</span>dynamic <span class="nt">--with-stream_ssl_module</span> <span class="nt">--with-mail</span><span class="o">=</span>dynamic <span class="nt">--with-mail_ssl_module</span> <span class="nt">--add-dynamic-module</span><span class="o">=</span>/root/dev/ngx_http_geoip2_module-3.0 
</code></pre></div></div>

<h3 id="接下来开始编译ngx_http_geoip2_module模块">接下来开始编译ngx_http_geoip2_module模块</h3>

<p>开始之前，根据我之前使用configure检查的结果，在ubuntu 18.04.1版本下的nginx编译前需要先安装以下依赖：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>apt update
<span class="nv">$ </span><span class="nb">sudo </span>apt <span class="nb">install </span>libpcre3-dev libssl-dev zlib1g-dev libxml2-dev libxslt1-dev libgd-dev libgeoip-dev <span class="nt">-y</span>
</code></pre></div></div>

<p>由于我们已经在nginx的源代码目录中，我们开始执行编译命令</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>./configure <span class="nt">--with-cc-opt</span><span class="o">=</span><span class="s1">'-g -O2 -fdebug-prefix-map=/build/nginx-mcUg8N/nginx-1.14.0=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -Wdate-time -D_FORTIFY_SOURCE=2'</span> <span class="nt">--with-ld-opt</span><span class="o">=</span><span class="s1">'-Wl,-Bsymbolic-functions -Wl,-z,relro -Wl,-z,now -fPIC'</span> <span class="nt">--prefix</span><span class="o">=</span>/usr/share/nginx <span class="nt">--conf-path</span><span class="o">=</span>/etc/nginx/nginx.conf <span class="nt">--http-log-path</span><span class="o">=</span>/var/log/nginx/access.log <span class="nt">--error-log-path</span><span class="o">=</span>/var/log/nginx/error.log <span class="nt">--lock-path</span><span class="o">=</span>/var/lock/nginx.lock <span class="nt">--pid-path</span><span class="o">=</span>/run/nginx.pid <span class="nt">--modules-path</span><span class="o">=</span>/usr/lib/nginx/modules <span class="nt">--http-client-body-temp-path</span><span class="o">=</span>/var/lib/nginx/body <span class="nt">--http-fastcgi-temp-path</span><span class="o">=</span>/var/lib/nginx/fastcgi <span class="nt">--http-proxy-temp-path</span><span class="o">=</span>/var/lib/nginx/proxy <span class="nt">--http-scgi-temp-path</span><span class="o">=</span>/var/lib/nginx/scgi <span class="nt">--http-uwsgi-temp-path</span><span class="o">=</span>/var/lib/nginx/uwsgi <span class="nt">--with-debug</span> <span class="nt">--with-pcre-jit</span> <span class="nt">--with-http_ssl_module</span> <span class="nt">--with-http_stub_status_module</span> <span class="nt">--with-http_realip_module</span> <span class="nt">--with-http_auth_request_module</span> <span class="nt">--with-http_v2_module</span> <span class="nt">--with-http_dav_module</span> <span class="nt">--with-http_slice_module</span> <span class="nt">--with-threads</span> <span class="nt">--with-http_addition_module</span> <span class="nt">--with-http_geoip_module</span><span class="o">=</span>dynamic <span class="nt">--with-http_gunzip_module</span> <span class="nt">--with-http_gzip_static_module</span> <span class="nt">--with-http_image_filter_module</span><span class="o">=</span>dynamic <span class="nt">--with-http_sub_module</span> <span class="nt">--with-http_xslt_module</span><span class="o">=</span>dynamic <span class="nt">--with-stream</span><span class="o">=</span>dynamic <span class="nt">--with-stream_ssl_module</span> <span class="nt">--with-mail</span><span class="o">=</span>dynamic <span class="nt">--with-mail_ssl_module</span> <span class="nt">--add-dynamic-module</span><span class="o">=</span>/root/dev/ngx_http_geoip2_module-3.0
<span class="nv">$ </span>make
<span class="nv">$ </span>make modules
</code></pre></div></div>

<p>如果在configure的时候发生错误，请根据提示补装相应的依赖关系。</p>

<p>编译完成后，我们切换到objs目录，可以看到我们想要的两个库文件：</p>

<blockquote>
  <p>ngx_http_geoip2_module.so</p>

  <p>ngx_stream_geoip2_module.so</p>
</blockquote>

<p>接下来我们把这两个文件移动到/usr/lib/nginx/modules路径下，方便下一步的操作。</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">cd </span>objs
<span class="nv">$ </span><span class="nb">mv </span>ngx_http_geoip2_module.so /usr/lib/nginx/modules
<span class="nv">$ </span><span class="nb">mv </span>ngx_stream_geoip2_module.so /usr/lib/nginx/modules
</code></pre></div></div>

<h1 id="3-配置nginx的ngx_http_geoip2_module模块">3. 配置NGINX的ngx_http_geoip2_module模块</h1>

<p>配置nginx的ngx_http_geoip2_module相关参数前，我们从<a href="https://dev.maxmind.com/geoip/geoip2/geolite2/">maxmind的官网</a>上下载<a href="http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz">GeoLite2 City的数据库</a>。</p>

<p>土豪可以购买付费库以获得更多更精确的信息。我们这里使用lite版的city库就够了，另外我还使用了付费的isp库，这个库来之不易，有兴趣可以留言联系我领取。</p>

<p>下载好GeoLite2 City库，我们可以把他放到/var/geoipo2/下方便使用。</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">mkdir</span> /var/geoip2
<span class="nv">$ </span>wget http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.tar.gz
<span class="nv">$ </span><span class="nb">tar </span>xzvf GeoLite2-City.tar.gz
<span class="nv">$ </span><span class="nb">mv </span>GeoLite2-City_20180807/GeoLite2-City.mmdb /var/geoip2/
</code></pre></div></div>

<p>使用mmdblookup命令在库中搜索试试：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>mmdblookup <span class="nt">-f</span> /var/geoip2/GeoLite2-City.mmdb <span class="nt">-i</span> 27.18.29.164

  <span class="o">{</span>
    <span class="s2">"city"</span>:
      <span class="o">{</span>
        <span class="s2">"geoname_id"</span>:
          1791247 &amp;lt<span class="p">;</span>uint32&amp;gt<span class="p">;</span>
        <span class="s2">"names"</span>:
          <span class="o">{</span>
            <span class="s2">"de"</span>:
              <span class="s2">"Wuhan"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"en"</span>:
              <span class="s2">"Wuhan"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"es"</span>:
              <span class="s2">"Wuhan"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"fr"</span>:
              <span class="s2">"Wuhan"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"ja"</span>:
              <span class="s2">"武漢市"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"pt-BR"</span>:
              <span class="s2">"Wuhan"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"ru"</span>:
              <span class="s2">"Ухань"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"zh-CN"</span>:
              <span class="s2">"武汉"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
          <span class="o">}</span>
      <span class="o">}</span>
    <span class="s2">"continent"</span>:
      <span class="o">{</span>
        <span class="s2">"code"</span>:
          <span class="s2">"AS"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
        <span class="s2">"geoname_id"</span>:
          6255147 &amp;lt<span class="p">;</span>uint32&amp;gt<span class="p">;</span>
        <span class="s2">"names"</span>:
          <span class="o">{</span>
            <span class="s2">"de"</span>:
              <span class="s2">"Asien"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"en"</span>:
              <span class="s2">"Asia"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"es"</span>:
              <span class="s2">"Asia"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"fr"</span>:
              <span class="s2">"Asie"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"ja"</span>:
              <span class="s2">"アジア"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"pt-BR"</span>:
              <span class="s2">"Ásia"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"ru"</span>:
              <span class="s2">"Азия"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"zh-CN"</span>:
              <span class="s2">"亚洲"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
          <span class="o">}</span>
      <span class="o">}</span>
    <span class="s2">"country"</span>:
      <span class="o">{</span>
        <span class="s2">"geoname_id"</span>:
          1814991 &amp;lt<span class="p">;</span>uint32&amp;gt<span class="p">;</span>
        <span class="s2">"iso_code"</span>:
          <span class="s2">"CN"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
        <span class="s2">"names"</span>:
          <span class="o">{</span>
            <span class="s2">"de"</span>:
              <span class="s2">"China"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"en"</span>:
              <span class="s2">"China"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"es"</span>:
              <span class="s2">"China"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"fr"</span>:
              <span class="s2">"Chine"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"ja"</span>:
              <span class="s2">"中国"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"pt-BR"</span>:
              <span class="s2">"China"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"ru"</span>:
              <span class="s2">"Китай"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"zh-CN"</span>:
              <span class="s2">"中国"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
          <span class="o">}</span>
      <span class="o">}</span>
    <span class="s2">"location"</span>:
      <span class="o">{</span>
        <span class="s2">"accuracy_radius"</span>:
          1 &amp;lt<span class="p">;</span>uint16&amp;gt<span class="p">;</span>
        <span class="s2">"latitude"</span>:
          30.580100 &amp;lt<span class="p">;</span>double&amp;gt<span class="p">;</span>
        <span class="s2">"longitude"</span>:
          114.273400 &amp;lt<span class="p">;</span>double&amp;gt<span class="p">;</span>
        <span class="s2">"time_zone"</span>:
          <span class="s2">"Asia/Shanghai"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
      <span class="o">}</span>
    <span class="s2">"registered_country"</span>:
      <span class="o">{</span>
        <span class="s2">"geoname_id"</span>:
          1814991 &amp;lt<span class="p">;</span>uint32&amp;gt<span class="p">;</span>
        <span class="s2">"iso_code"</span>:
          <span class="s2">"CN"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
        <span class="s2">"names"</span>:
          <span class="o">{</span>
            <span class="s2">"de"</span>:
              <span class="s2">"China"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"en"</span>:
              <span class="s2">"China"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"es"</span>:
              <span class="s2">"China"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"fr"</span>:
              <span class="s2">"Chine"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"ja"</span>:
              <span class="s2">"中国"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"pt-BR"</span>:
              <span class="s2">"China"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"ru"</span>:
              <span class="s2">"Китай"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="s2">"zh-CN"</span>:
              <span class="s2">"中国"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
          <span class="o">}</span>
      <span class="o">}</span>
    <span class="s2">"subdivisions"</span>:
      <span class="o">[</span>
        <span class="o">{</span>
          <span class="s2">"geoname_id"</span>:
            1806949 &amp;lt<span class="p">;</span>uint32&amp;gt<span class="p">;</span>
          <span class="s2">"iso_code"</span>:
            <span class="s2">"HB"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
          <span class="s2">"names"</span>:
            <span class="o">{</span>
              <span class="s2">"de"</span>:
                <span class="s2">"Hubei"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
              <span class="s2">"en"</span>:
                <span class="s2">"Hubei"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
              <span class="s2">"es"</span>:
                <span class="s2">"Hubei"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
              <span class="s2">"fr"</span>:
                <span class="s2">"Province de Hubei"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
              <span class="s2">"ja"</span>:
                <span class="s2">"湖北省"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
              <span class="s2">"pt-BR"</span>:
                <span class="s2">"Hubei"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
              <span class="s2">"ru"</span>:
                <span class="s2">"Хубэй"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
              <span class="s2">"zh-CN"</span>:
                <span class="s2">"湖北省"</span> &amp;lt<span class="p">;</span>utf8_string&amp;gt<span class="p">;</span>
            <span class="o">}</span>
        <span class="o">}</span>
      <span class="o">]</span>
  <span class="o">}</span>
</code></pre></div></div>

<p>很好很强大，ipv4和ipv6都是可以查寻的。</p>

<p>接下来打开NGINX的配置文件nginx.conf，如果是在ubuntu下通过apt安装，配置文件保存在/etc/nginx/中，如果是通过宝塔面板安装，被指文件保存在/www/server/nginx/conf/中。</p>

<p>在nginx.conf中第一行加入</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>load_module /usr/lib/nginx/modules/ngx_http_geoip2_module.so<span class="p">;</span>
</code></pre></div></div>

<p>用来引用ngx_http_geoip2_module模块，接下来在http代码块中加入以下代码</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    geoip2 /var/geoip2/GeoLite2-City.mmdb <span class="o">{</span>
        <span class="nv">$geoip2_data_city_continent_code</span> continent code<span class="p">;</span>
        <span class="nv">$geoip2_data_city_continent_name</span> continent names zh-CN<span class="p">;</span>
        <span class="nv">$geoip2_data_city_country_code</span> country iso_code<span class="p">;</span>
        <span class="nv">$geoip2_data_city_country_name</span> country names zh-CN<span class="p">;</span>
        <span class="nv">$geoip2_data_city_region_code</span> subdivisions 0 iso_code<span class="p">;</span>
        <span class="nv">$geoip2_data_city_region_name</span> subdivisions 0 names zh-CN<span class="p">;</span>
        <span class="nv">$geoip2_data_city_location_latitude</span> location latitude<span class="p">;</span>
        <span class="nv">$geoip2_data_city_location_longitude</span> location longitude<span class="p">;</span>
        <span class="nv">$geoip2_data_city_postal</span> postal code<span class="p">;</span>
        <span class="nv">$geoip2_data_city_city_name</span> city names en<span class="p">;</span>		
    <span class="o">}</span>
</code></pre></div></div>

<p>表示通过ngx_http_geoip2_module根据访问这个ip获得相应的geo信息。</p>

<p>接下来打开fastcgi.conf文件，在文件末尾添加以下代码：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>fastcgi_param MM_CONTINENT_CODE <span class="nv">$geoip2_data_city_continent_code</span><span class="p">;</span>
fastcgi_param MM_CONTINENT_NAME <span class="nv">$geoip2_data_city_continent_name</span><span class="p">;</span>
fastcgi_param MM_COUNTRY_CODE <span class="nv">$geoip2_data_city_country_code</span><span class="p">;</span>
fastcgi_param MM_COUNTRY_NAME <span class="nv">$geoip2_data_city_country_name</span><span class="p">;</span>
fastcgi_param MM_REGION_CODE <span class="nv">$geoip2_data_city_region_code</span><span class="p">;</span>
fastcgi_param MM_REGION_NAME <span class="nv">$geoip2_data_city_region_name</span><span class="p">;</span>
fastcgi_param MM_LATITUDE <span class="nv">$geoip2_data_city_location_latitude</span><span class="p">;</span>
fastcgi_param MM_LONGITUDE <span class="nv">$geoip2_data_city_location_longitude</span><span class="p">;</span>
fastcgi_param MM_POSTAL_CODE <span class="nv">$geoip2_data_city_postal</span><span class="p">;</span>
fastcgi_param MM_CITY_NAME <span class="nv">$geoip2_data_city_city_name</span><span class="p">;</span>
</code></pre></div></div>

<p>这样就可以将geo信息传递到php上了。</p>

<p>配置好以后重载一下nginx</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>service nginx reload
</code></pre></div></div>

<p>如果不报错就没啥问题了，这是可以写个phpinfo看看效果。</p>

<p><img src="/wp-content/uploads/2018/08/phpinfo-geoip2-1024x423.jpg" alt="phpinfo查看geo信息" /> phpinfo查看geo信息</p>

<p>哈哈，完美。</p>

<h1 id="4-其他">4. 其他</h1>

<h2 id="如果拥有了isp的库">如果拥有了isp的库</h2>

<p>你就可以通过在nginx.conf中添加以下代码</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    geoip2 /var/geoip2/GeoIP2-ISP.mmdb <span class="o">{</span>
        <span class="nv">$geoip2_data_isp_isp</span> isp<span class="p">;</span>
        <span class="nv">$geoip2_data_isp_org</span> organization<span class="p">;</span>
    <span class="o">}</span>
</code></pre></div></div>

<p>并在fastcgi.conf文件中添加以下代码</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>fastcgi_param MM_ISP <span class="nv">$geoip2_data_isp_isp</span><span class="p">;</span>
fastcgi_param MM_ORG <span class="nv">$geoip2_data_isp_org</span><span class="p">;</span>
</code></pre></div></div>

<p>完成isp信息的读取。</p>

<h2 id="如果使用了cloudflare加速你的网站">如果使用了cloudflare加速你的网站</h2>

<p>这是默认获取的ip其实不是客户端ip而是cloudflare的cdn服务器IP，这时候在nginx.conf中的代码需要做调整，将source指定为$HTTP_CF_CONNECTING_IP，完整代码如下：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>    geoip2 /var/geoip2/GeoLite2-City.mmdb <span class="o">{</span>
	auto_reload 60m<span class="p">;</span>
        <span class="nv">$geoip2_data_city_continent_code</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> continent code<span class="p">;</span>
        <span class="nv">$geoip2_data_city_continent_name</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> continent names zh-CN<span class="p">;</span>
        <span class="nv">$geoip2_data_city_country_code</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> country iso_code<span class="p">;</span>
        <span class="nv">$geoip2_data_city_country_name</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> country names zh-CN<span class="p">;</span>
        <span class="nv">$geoip2_data_city_region_code</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> subdivisions 0 iso_code<span class="p">;</span>
        <span class="nv">$geoip2_data_city_region_name</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> subdivisions 0 names zh-CN<span class="p">;</span>
        <span class="nv">$geoip2_data_city_location_latitude</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> location latitude<span class="p">;</span>
        <span class="nv">$geoip2_data_city_location_longitude</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> location longitude<span class="p">;</span>
        <span class="nv">$geoip2_data_city_postal</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> postal code<span class="p">;</span>
        <span class="nv">$geoip2_data_city_city_name</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> city names en<span class="p">;</span>		
    <span class="o">}</span>
	
    geoip2 /var/geoip2/GeoIP2-ISP.mmdb <span class="o">{</span>
        auto_reload 60m<span class="p">;</span>
        <span class="nv">$geoip2_data_isp_isp</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> isp<span class="p">;</span>
        <span class="nv">$geoip2_data_isp_org</span> <span class="nb">source</span><span class="o">=</span><span class="nv">$HTTP_CF_CONNECTING_IP</span> organization<span class="p">;</span>
    <span class="o">}</span>
</code></pre></div></div>

<p>同理，如果用了nginx反向代理，则需要将serouce指定为$HTTP_X_FORWARDED_FOR，这里不再赘述。</p>

<h1 id="参考内容">参考内容</h1>

<ol>
  <li>ngx_http_geoip2_module使用说明：https://github.com/leev/ngx_http_geoip2_module/blob/master/README.md</li>
  <li>libmaxminddb使用说明：https://github.com/maxmind/libmaxminddb/blob/master/README.md</li>
  <li>nginx 添加 ngx_http_geoip2_module 模块：https://my.oschina.net/u/3786005/blog/1858090</li>
</ol>]]></content><author><name>Azio</name></author><category term="知识笔记" /><category term="geoip2" /><category term="maxmind" /><category term="nginx" /><category term="ngx_http_geoip2_module" /><summary type="html"><![CDATA[现在需要给NGINX安装 ngx_http_geoip2_module 模块，以方便做adsense的过滤ip和isp的操作。安装ngx_http_geoip2_module模块有以下几个步骤：]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.azio.me/wp-content/uploads/2018/08/nginx-geoip2-150x83.jpg" /><media:content medium="image" url="https://www.azio.me/wp-content/uploads/2018/08/nginx-geoip2-150x83.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">如何在wordpress中给指定的文章添加js</title><link href="https://www.azio.me/wordpress-article-add-js/" rel="alternate" type="text/html" title="如何在wordpress中给指定的文章添加js" /><published>2018-08-10T17:40:51+08:00</published><updated>2018-08-10T17:40:51+08:00</updated><id>https://www.azio.me/wordpress-article-add-js</id><content type="html" xml:base="https://www.azio.me/wordpress-article-add-js/"><![CDATA[<p>有时候需要在wordpress指定的文章里面添加js，比如做cps的时候需要根据文章的内容植入相应的cookie(cookie stuffing)。废话不多说现在开始操作。</p>

<p>首先，在编辑文章的时候打开顶部的“显示选项”，勾选“自定义栏目”，如下图所示：</p>

<p><img src="/wp-content/uploads/2018/08/wordpress-custom-field-1024x195.jpg" alt="wordpress自定义栏目" />wordpress自定义栏目</p>

<p>这是，文章编辑下方会出现自定义栏目的编辑框，这是我们可以添加一个名称为“head”，值为你需要引入的js，比如我这里测试，填写了“&lt;script&gt;console.log(“head js”)&lt;/script&gt;”，如下图所示</p>

<p><img src="/wp-content/uploads/2018/08/wordpress-custom-field-head-1024x342.jpg" alt="wordpress自定义栏目-添加项目" />wordpress自定义栏目-添加项目</p>

<p>保存一下，你的这篇文章就会绑定一个自定义的head值进去，这时候，我们在来修改wordpress的模板，让个模板根据head值显示js就行了。</p>

<p>这时，我先要进入编辑主题页面，点击“外观”-&gt;“编辑”，在右侧栏目选择head.php，然后在编辑框中的&lt;head&gt;标签里面添加以下php代码：</p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">&lt;?php</span> <span class="k">if</span> <span class="p">(</span><span class="nf">is_single</span><span class="p">()</span> <span class="o">||</span> <span class="nf">is_page</span><span class="p">())</span> <span class="p">{</span> <span class="nv">$head</span> <span class="o">=</span> <span class="nf">get_post_meta</span><span class="p">(</span><span class="nv">$post</span><span class="o">-&gt;</span><span class="no">ID</span><span class="p">,</span> <span class="s1">'head'</span><span class="p">,</span> <span class="kc">true</span><span class="p">);</span> 
    <span class="k">if</span> <span class="p">(</span><span class="o">!</span><span class="k">empty</span><span class="p">(</span><span class="nv">$head</span><span class="p">))</span> <span class="p">{</span> <span class="cp">?&gt;</span> 
        <span class="cp">&lt;?php</span> <span class="k">echo</span> <span class="nv">$head</span><span class="p">;</span> <span class="cp">?&gt;</span> 
<span class="cp">&lt;?php</span> <span class="p">}</span> <span class="p">}</span> <span class="cp">?&gt;</span>
</code></pre></div></div>

<p>效果图如下：</p>

<p><img src="/wp-content/uploads/2018/08/wordpress-modify-theme-1024x669.jpg" alt="wordpress编辑主题" />wordpress编辑主题head文件</p>

<p>这时候就改好了，现在我们可以测试一样效果。</p>

<p>打开添加了head自定义项目的页面，查看文件源代码。</p>

<p><img src="/wp-content/uploads/2018/08/wordpress-view-source.jpg" alt="wordpress查看源码" />wordpress查看源码</p>

<p>这样就改好了，现在大家可以根据自己的cps搞搞cookie stuffing了</p>]]></content><author><name>Azio</name></author><category term="知识笔记" /><category term="javascript" /><category term="js" /><category term="wordpress" /><summary type="html"><![CDATA[有时候需要在wordpress指定的文章里面添加js，比如做cps的时候需要根据文章的内容植入相应的cookie(cookie stuffing)。废话不多说现在开始操作。]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.azio.me/wp-content/uploads/2018/08/wordpress02-150x89.png" /><media:content medium="image" url="https://www.azio.me/wp-content/uploads/2018/08/wordpress02-150x89.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">怎么样用wordpress搭建一个站点之五：使用cloudflare.com加速你的网站</title><link href="https://www.azio.me/how-to-build-a-website-via-wordpress-use-cloudflare/" rel="alternate" type="text/html" title="怎么样用wordpress搭建一个站点之五：使用cloudflare.com加速你的网站" /><published>2018-08-07T21:58:49+08:00</published><updated>2018-08-07T21:58:49+08:00</updated><id>https://www.azio.me/how-to-build-a-website-via-wordpress-use-cloudflare</id><content type="html" xml:base="https://www.azio.me/how-to-build-a-website-via-wordpress-use-cloudflare/"><![CDATA[<p>前面几篇文章，我介绍了一下wordpress网站的搭建方法，今天讲讲怎么用cloudflare.com加速你的wordpress站点。</p>

<p>cloudflare是一家美国公司，提供网站加速的服务。提供的免费服务还挺好用的，可以帮你把你的站点真是ip隐藏起来，以免被攻击。</p>

<p>废话不多说，我们首先要注册cloudflare账号，这个很简单，随便填填就可以了。</p>

<p>接下来我来介绍一下如何配置。</p>

<h2 id="第一步登录cloudflarecom添加站点">第一步，登录cloudflare.com，添加站点。</h2>

<p>访问https://dash.cloudflare.com/，点击右上角+Add site</p>

<p><img src="/wp-content/uploads/2018/08/cloudflare-add-site-1024x613.jpg" alt=" cloudflare add site" />cloudflare 添加站点</p>

<p>接下来把买到的域名填写进去</p>

<p><img src="/wp-content/uploads/2018/08/cloudflare-fill-domain-1024x488.jpg" alt="cloudflare填写域名" />cloudflare填写域名</p>

<p>接下来选择free plan就可以了</p>

<p><img src="/wp-content/uploads/2018/08/cloudflare-select-free-plan-1024x566.jpg" alt="cloudflare 选择free plan" />cloudflare 选择free plan</p>

<p>设置好域名的a记录</p>

<p><img src="/wp-content/uploads/2018/08/cloudflare-config-dns-record-1024x599.jpg" alt="cloudflare 配置dns记录" />cloudflare 配置dns记录</p>

<p>接下来按照提示修改阿里云里面域名的名字服务器：</p>

<p><img src="/wp-content/uploads/2018/08/cloudflare-change-nameservers-1024x640.jpg" alt="cloudflare修改名字服务器" />cloudflare修改名字服务器</p>

<h2 id="第二部登录阿里云修改域名的名字服务器">第二部，登录阿里云修改域名的名字服务器</h2>

<p><img src="/wp-content/uploads/2018/08/aliyun-domain-manage-1024x644.jpg" alt="登录阿里云域名管理" />登录阿里云域名管理</p>

<p>登录域名管理以后，点击需要配置的域名的“管理操作”。</p>

<p>接下来，选择dns修改，在点击右上角的修改dns服务器，修改成刚刚cloudflare的nameserver就ok了</p>

<p><img src="/wp-content/uploads/2018/08/aliyun-modify-nameservers-1024x573.jpg" alt="阿里云，修改名字服务器" />阿里云，修改名字服务器</p>

<p><img src="/wp-content/uploads/2018/08/aliyun-new-nameservers-1024x597.jpg" alt="阿里云，新名字服务器" />阿里云，新名字服务器</p>

<p><img src="/wp-content/uploads/2018/08/aliyun-new-nameservers-ok-1024x430.jpg" alt="阿里云，新名字服务器修改成功" />阿里云，新名字服务器修改成功</p>

<h2 id="第三步回到cloudflare继续配置">第三步，回到cloudflare继续配置。</h2>

<p><img src="/wp-content/uploads/2018/08/cloudflare-success-1024x613.jpg" alt="cloudflare配置成功标志" />cloudflare配置成功标志</p>

<p>返回cloudflare，点击下一步，进入到Overview页面，会有个“recheck nameservers”的按钮 ，按下后，如果出现Status: Active就说明配置成功了。</p>

<p>这样就大功告成拉！</p>

<p>接下来的操作，我们可能根据实际情况在crypto里面配置一下ssl证书，再到speed和caching里面配置一下加速设置和缓存策略，这样我们的cloudflare就配置好啦！</p>]]></content><author><name>Azio</name></author><category term="知识笔记" /><category term="cloudflare" /><category term="阿里云" /><summary type="html"><![CDATA[前面几篇文章，我介绍了一下wordpress网站的搭建方法，今天讲讲怎么用cloudflare.com加速你的wordpress站点。]]></summary></entry><entry><title type="html">FB上来的流量</title><link href="https://www.azio.me/fb-traffic/" rel="alternate" type="text/html" title="FB上来的流量" /><published>2018-08-03T01:47:36+08:00</published><updated>2018-08-03T01:47:36+08:00</updated><id>https://www.azio.me/fb-traffic</id><content type="html" xml:base="https://www.azio.me/fb-traffic/"><![CDATA[<p><img src="/wp-content/uploads/2018/08/facebook-logo.jpg" alt="" /></p>

<p>昨天在fb的主页上发帖，发着发着，发现网站尽然来了流量，心中暗喜，这自然流量也来的太快了，fb果然屌屌屌。</p>

<p><img src="/wp-content/uploads/2018/08/fb-traffic-come-373x1024.jpg" alt="" /></p>

<p>虽然流量不多，但多少有点，还是蛮爽。</p>

<p>晚上有自己看了看流量来源，尼玛，浏览器分辨率是2000 x 2000，我擦，这是森么鬼？</p>

<p><img src="/wp-content/uploads/2018/08/2k-traffic.jpg" alt="" /></p>

<p>看了几个访问记录，都是2k分辨率的，不对啊，难道是统计系统秀逗啦？看了一下别的访客记录，都是正常的啊？</p>

<p>上google搜搜ip，尼玛，原来是fb的检测机器人。搞鸡毛啊！害我空欢喜一场！</p>

<p><img src="/wp-content/uploads/2018/08/fb-ip.jpg" alt="" /></p>]]></content><author><name>Azio</name></author><category term="步步为赢" /><category term="facebook" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.azio.me/wp-content/uploads/2018/08/facebook-logo.jpg" /><media:content medium="image" url="https://www.azio.me/wp-content/uploads/2018/08/facebook-logo.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">新开了一个adsense账号，感觉过审好慢啊</title><link href="https://www.azio.me/adsense-waiting/" rel="alternate" type="text/html" title="新开了一个adsense账号，感觉过审好慢啊" /><published>2018-08-02T23:34:54+08:00</published><updated>2018-08-02T23:34:54+08:00</updated><id>https://www.azio.me/adsense-waiting</id><content type="html" xml:base="https://www.azio.me/adsense-waiting/"><![CDATA[<p>为啥一直在这个界面啊，都一个星期啦，google爸爸快点给我过审吧！</p>

<p><img src="/wp-content/uploads/2018/08/adsense-waiting-1024x292.jpg" alt="" /></p>]]></content><author><name>Azio</name></author><category term="步步为赢" /><category term="adsense" /><category term="google爸爸" /><summary type="html"><![CDATA[为啥一直在这个界面啊，都一个星期啦，google爸爸快点给我过审吧！]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.azio.me/wp-content/uploads/2018/08/adsense.jpg" /><media:content medium="image" url="https://www.azio.me/wp-content/uploads/2018/08/adsense.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">做了一个破站，每天还有十几个点击</title><link href="https://www.azio.me/simple-site/" rel="alternate" type="text/html" title="做了一个破站，每天还有十几个点击" /><published>2018-08-02T10:19:02+08:00</published><updated>2018-08-02T10:19:02+08:00</updated><id>https://www.azio.me/simple-site</id><content type="html" xml:base="https://www.azio.me/simple-site/"><![CDATA[<p>做了一个破站，每天还有十几个点击，还是有点意思<img src="/wp-content/uploads/2018/08/mtcsta.jpg" alt="" /></p>

<p>可以尝试在fb上推一波了，应该还是有点受众的</p>]]></content><author><name>Azio</name></author><category term="步步为赢" /><category term="建站" /><summary type="html"><![CDATA[做了一个破站，每天还有十几个点击，还是有点意思]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.azio.me/wp-content/uploads/2018/08/mtcsta.jpg" /><media:content medium="image" url="https://www.azio.me/wp-content/uploads/2018/08/mtcsta.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">做adsense亏了七百多刀</title><link href="https://www.azio.me/emu-adsense/" rel="alternate" type="text/html" title="做adsense亏了七百多刀" /><published>2018-07-27T15:43:54+08:00</published><updated>2018-07-27T15:43:54+08:00</updated><id>https://www.azio.me/emu-adsense</id><content type="html" xml:base="https://www.azio.me/emu-adsense/"><![CDATA[<p>做了大半个月的google adsense，花钱买exo的流量，结果adsense被k了，真是亏啊！</p>

<p>emu果然还是要谨慎啊！</p>]]></content><author><name>Azio</name></author><category term="步步为赢" /><category term="adsense" /><category term="exoclick" /><summary type="html"><![CDATA[做了大半个月的google adsense，花钱买exo的流量，结果adsense被k了，真是亏啊！]]></summary></entry><entry><title type="html">怎样重设ubuntu18.04系统的mysql的root密码</title><link href="https://www.azio.me/how-to-reset-root-mysql-password-on-ubuntu-18-04/" rel="alternate" type="text/html" title="怎样重设ubuntu18.04系统的mysql的root密码" /><published>2018-06-21T18:18:26+08:00</published><updated>2018-06-21T18:18:26+08:00</updated><id>https://www.azio.me/how-to-reset-root-mysql-password-on-ubuntu-18-04</id><content type="html" xml:base="https://www.azio.me/how-to-reset-root-mysql-password-on-ubuntu-18-04/"><![CDATA[<p><img src="/wp-content/uploads/2018/06/mysql-graphic-1024x606.png" alt="mysql" /></p>

<p>&lt;/div&gt;Ubuntu也是坑，总是变来变去。原来从16.04版升级到17.10版时，域名解析服务换了，直接升级域名解析用不了???，由原来的resolvconf服务变成了systemd-resolved服务。</p>

<p>现在新版的18.04安装mysql也变了，安装过程没有要求设置root密码了，直接静默安装了，安装好后直接可以匿名登录?。直接按常规的改密码的方法改完了还是有个匿名登录，简直了。</p>

<p>所以我之前一个文章《<a href="/how-to-build-a-website-via-wordpress-deploy-wordpress/">怎么样用wordpress搭建一个站点之四：安装wordpress</a>》里面关于mysql安装的部分需要修改修改了?</p>

<p>上google搜了搜，看到了这篇文章《<a href="https://linuxconfig.org/how-to-reset-root-mysql-password-on-ubuntu-18-04-bionic-beaver-linux">How to reset root MySQL password on Ubuntu 18.04 Bionic Beaver Linux</a>》，尝试里面的方法，终于解决了。</p>

<p>这篇文章讲到了两种方法，第一种放我试过没效果，第二种方法才搞定。我记录下来，以便以后能够用到：</p>

<h2 id="方法一通过mysql_secure_installation重设密码">方法一：通过mysql_secure_installation重设密码</h2>

<p>很简单只需执行“mysql_secure_installation”命令安装它的提示往下走就能完成重设密码（虽然我试过没用?）</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>mysql_secure_installation
....
Please <span class="nb">set </span>the password <span class="k">for </span>root here.

New password: 
Re-enter new password:
</code></pre></div></div>

<h2 id="方法二使用skip-grant-tables参数重设密码">方法二：使用–skip-grant-tables参数重设密码</h2>

<p>稍微麻烦一点，如果用方法一失败了可以试试这个方法。</p>

<p>首先我们要停止mysql服务：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>service mysql stop
</code></pre></div></div>

<p>接下来我们创建一个路径 /var/run/mysqld 用来存放mysql进程的socket文件：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo mkdir</span> <span class="nt">-p</span> /var/run/mysqld
<span class="nv">$ </span><span class="nb">sudo chown </span>mysql:mysql /var/run/mysqld
</code></pre></div></div>

<p>然后我们可以带上–skip-grant-tables手动启动mysql进程：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo</span> /usr/sbin/mysqld <span class="nt">--skip-grant-tables</span> <span class="nt">--skip-networking</span> &amp;
<span class="o">[</span>1] 2708
</code></pre></div></div>

<p>现在检查一个mysql是不是正常运行：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">jobs</span>
<span class="o">[</span>1]+  Running     <span class="nb">sudo</span> /usr/sbin/mysqld <span class="nt">--skip-grant-tables</span> <span class="nt">--skip-networking</span> &amp;
</code></pre></div></div>

<p>如果之前的步骤没问题，我们现在就可以用mysql命令不用用户名密码直接登录到数据库：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>mysql <span class="nt">-u</span> root
Welcome to the MySQL monitor.  Commands end with <span class="p">;</span> or <span class="se">\g</span><span class="nb">.</span>
Your MySQL connection <span class="nb">id </span>is 3
Server version: 5.7.20-1ubuntu1 <span class="o">(</span>Ubuntu<span class="o">)</span>

Copyright <span class="o">(</span>c<span class="o">)</span> 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.



Type <span class="s1">'help;'</span> or <span class="s1">'\h'</span> <span class="k">for </span>help. Type <span class="s1">'\c'</span> to clear the current input statement.

mysql&gt;
</code></pre></div></div>

<p>现在mysql客户端的会话中，首先我们先flush privileges：</p>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">mysql</span><span class="o">&gt;</span> <span class="n">FLUSH</span> <span class="k">PRIVILEGES</span><span class="p">;</span>
<span class="n">Query</span> <span class="n">OK</span><span class="p">,</span> <span class="mi">0</span> <span class="k">rows</span> <span class="n">affected</span> <span class="p">(</span><span class="mi">0</span><span class="p">.</span><span class="mi">00</span> <span class="n">sec</span><span class="p">)</span>
</code></pre></div></div>

<p>接下来，我们开始重设密码。下面的命令会把密码重设为“www.azio.me”：</p>

<div class="language-sql highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">mysql</span><span class="o">&gt;</span> <span class="n">USE</span> <span class="n">mysql</span><span class="p">;</span> 
<span class="k">Database</span> <span class="n">changed</span>
<span class="n">mysql</span><span class="o">&gt;</span> <span class="k">UPDATE</span> <span class="k">user</span> <span class="k">SET</span> <span class="n">authentication_string</span><span class="o">=</span><span class="n">PASSWORD</span><span class="p">(</span><span class="nv">"www.azio.me"</span><span class="p">)</span> <span class="k">WHERE</span> <span class="k">User</span><span class="o">=</span><span class="s1">'root'</span><span class="p">;</span>
<span class="n">Query</span> <span class="n">OK</span><span class="p">,</span> <span class="mi">0</span> <span class="k">rows</span> <span class="n">affected</span><span class="p">,</span> <span class="mi">1</span> <span class="n">warning</span> <span class="p">(</span><span class="mi">0</span><span class="p">.</span><span class="mi">00</span> <span class="n">sec</span><span class="p">)</span>
<span class="k">Rows</span> <span class="n">matched</span><span class="p">:</span> <span class="mi">1</span>  <span class="n">Changed</span><span class="p">:</span> <span class="mi">0</span>  <span class="n">Warnings</span><span class="p">:</span> <span class="mi">1</span>

<span class="n">mysql</span><span class="o">&gt;</span> <span class="k">UPDATE</span> <span class="k">user</span> <span class="k">SET</span> <span class="n">plugin</span><span class="o">=</span><span class="nv">"mysql_native_password"</span> <span class="k">WHERE</span> <span class="k">User</span><span class="o">=</span><span class="s1">'root'</span><span class="p">;</span>
<span class="n">Query</span> <span class="n">OK</span><span class="p">,</span> <span class="mi">0</span> <span class="k">rows</span> <span class="n">affected</span> <span class="p">(</span><span class="mi">0</span><span class="p">.</span><span class="mi">00</span> <span class="n">sec</span><span class="p">)</span>
<span class="k">Rows</span> <span class="n">matched</span><span class="p">:</span> <span class="mi">1</span>  <span class="n">Changed</span><span class="p">:</span> <span class="mi">0</span>  <span class="n">Warnings</span><span class="p">:</span> <span class="mi">0</span>
</code></pre></div></div>

<p>接着退出mysql会话：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>mysql&gt; quit                                                                                                                                                                                    
Bye
</code></pre></div></div>

<p>优雅地(原文:Gracefully?)终止当前mysql服务进程:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>pkill mysqld                                                                                                                                                        
<span class="nv">$ </span><span class="nb">jobs</span>                                                                                                                                                                     
<span class="o">[</span>1]+  Done       <span class="nb">sudo</span> /usr/sbin/mysqld <span class="nt">--skip-grant-tables</span> <span class="nt">--skip-networking</span>
</code></pre></div></div>

<p>最后启动mysql数据库服务器就行啦：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span><span class="nb">sudo </span>service mysql start
</code></pre></div></div>

<p>如果配置没问题的话，你现在就可以使用用户名密码登录mysql数据库啦：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">$ </span>mysql <span class="nt">-uroot</span> <span class="nt">-p</span>
Enter password:
Welcome to the MySQL monitor.  Commands end with <span class="p">;</span> or <span class="se">\g</span><span class="nb">.</span>
Your MySQL connection <span class="nb">id </span>is 107
Server version: 5.7.22-0ubuntu18.04.1 <span class="o">(</span>Ubuntu<span class="o">)</span>

Copyright <span class="o">(</span>c<span class="o">)</span> 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type <span class="s1">'help;'</span> or <span class="s1">'\h'</span> <span class="k">for </span>help. Type <span class="s1">'\c'</span> to clear the current input statement.

mysql&gt;
</code></pre></div></div>

<p>最后祝你成功（手动滑稽</p>]]></content><author><name>Azio</name></author><category term="知识笔记" /><category term="mysql" /><category term="ubuntu" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.azio.me/wp-content/uploads/2018/06/mysql-graphic.png" /><media:content medium="image" url="https://www.azio.me/wp-content/uploads/2018/06/mysql-graphic.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">在.net core 2.x环境应该用什么图像处理库</title><link href="https://www.azio.me/net-core-2-x-image-processing/" rel="alternate" type="text/html" title="在.net core 2.x环境应该用什么图像处理库" /><published>2018-06-20T18:36:50+08:00</published><updated>2018-06-20T18:36:50+08:00</updated><id>https://www.azio.me/net-core-2-x-image-processing</id><content type="html" xml:base="https://www.azio.me/net-core-2-x-image-processing/"><![CDATA[<p><img src="/wp-content/uploads/2018/06/netcore-1024x332.jpg" alt="asp.net core" /></p>

<p>用过.net core的都知道，坑还是比较多的，但是为了跨平台，为了牛b的vs2017，还是得用啊?</p>

<p>这不，现在碰到一个坑，就是.net core本身是没有图像处理的库的，于是上网搜搜看看有没有什么还用的第三方库，看到一篇文章写的很详细：《<a href="https://blogs.msdn.microsoft.com/dotnet/2017/01/19/net-core-image-processing/">.NET Core Image Processing</a>》</p>

<p>文章里面推荐了很多第三方的库，仔细有研究了一下，发现有些库我还是不用了啊。文章是17年1月写的，当时的.net core版本还是1.x版，里面记录的库好多都只能支持到1.x版，而我用的是2.0的环境，而且有些库不支持linux环境。选来选去，我最后选择了Magick.NET这个第三方库，他的项目地址在：<a href="https://github.com/dlemstra/Magick.NET">https://github.com/dlemstra/Magick.NET</a></p>

<p>这个第三方库及支持linux环境，又能支持2.0的.net core环境，挺好的！</p>

<p>在nuget里面搜索Magick.NET， 我们可以搜到好多结果，读了magick.net的文档以后，了解到q8,q16和q16-hdri表示的是处理图像的质量，q8图像质量最低但处理速度最快，q16-hdri图像质量最高但处理速度最慢。结合我自己的使用情况，客户对图像的质量要求不高但是要快，对服务器压力要小，所有我选了Magick.NET-Q8-AnyCPU这个版本。</p>

<p>Package Manager下安装：</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Install-Package Magick.NET-Q8-AnyCPU
</code></pre></div></div>

<p>Magick.NET其实也满坑，文档写的太不详细了，特别是关于透明度这一块，我可是花了好长时间才搞定透明度的问题。</p>

<p>接下来记录一下我用到的一些图像的操作吧：</p>

<p>1. 读取一个图像文件，保存图像到文件</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">using</span> <span class="p">(</span><span class="kt">var</span> <span class="n">image</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">MagickImage</span><span class="p">(</span><span class="nf">GetImgPath</span><span class="p">(</span><span class="s">"bg.jpg"</span><span class="p">)))</span>
<span class="p">{</span>
    <span class="c1">// 。。。。 其他图像处理的代码</span>
    
    <span class="c1">// 将图像文件写到指定路径</span>
    <span class="n">image</span><span class="p">.</span><span class="nf">Write</span><span class="p">(</span><span class="n">savepath</span><span class="p">);</span>
<span class="p">}</span>
</code></pre></div></div>

<p>2. 旋转图像</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">image</span><span class="p">.</span><span class="nf">Rotate</span><span class="p">(</span><span class="m">180</span><span class="p">);</span>
</code></pre></div></div>

<p>3. 添加水印图片</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c1">// 读取水印图片</span>
<span class="k">using</span> <span class="p">(</span><span class="kt">var</span> <span class="n">one</span> <span class="p">=</span> <span class="k">new</span> <span class="nf">MagickImage</span><span class="p">(</span><span class="nf">GetImgPath</span><span class="p">(</span><span class="n">img</span><span class="p">.</span><span class="n">ImgUrl</span><span class="p">)))</span>
<span class="p">{</span>
	<span class="c1">// 旋转水印图像</span>
	<span class="n">one</span><span class="p">.</span><span class="nf">Rotate</span><span class="p">(</span><span class="m">180</span><span class="p">);</span>
	<span class="k">if</span> <span class="p">(</span><span class="n">img</span><span class="p">.</span><span class="n">ImgWs</span> <span class="p">!=</span> <span class="m">100</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="c1">// 根据百分比缩放水印图像</span>
		<span class="n">one</span><span class="p">.</span><span class="nf">Resize</span><span class="p">(</span><span class="k">new</span> <span class="nf">Percentage</span><span class="p">(</span><span class="n">img</span><span class="p">.</span><span class="n">ImgWs</span><span class="p">));</span>
	<span class="p">}</span>
	<span class="k">if</span> <span class="p">(</span><span class="n">img</span><span class="p">.</span><span class="n">Dissolve</span> <span class="p">!=</span> <span class="m">100</span><span class="p">)</span>
	<span class="p">{</span>
		<span class="c1">// 根据百分比不透明度的将水印图像画到背景图片上</span>
		<span class="n">image</span><span class="p">.</span><span class="nf">Composite</span><span class="p">(</span><span class="n">one</span><span class="p">,</span> <span class="n">img</span><span class="p">.</span><span class="n">Dx</span><span class="p">,</span> <span class="n">img</span><span class="p">.</span><span class="n">Dy</span><span class="p">,</span> <span class="n">CompositeOperator</span><span class="p">.</span><span class="n">Dissolve</span><span class="p">,</span> <span class="n">img</span><span class="p">.</span><span class="n">Dissolve</span><span class="p">.</span><span class="nf">ToString</span><span class="p">());</span>
	<span class="p">}</span>
	<span class="k">else</span>
	<span class="p">{</span>
		<span class="c1">// 直接将水印图像画到背景图片上</span>
		<span class="n">image</span><span class="p">.</span><span class="nf">Composite</span><span class="p">(</span><span class="n">one</span><span class="p">,</span> <span class="n">img</span><span class="p">.</span><span class="n">Dx</span><span class="p">,</span> <span class="n">img</span><span class="p">.</span><span class="n">Dy</span><span class="p">,</span> <span class="n">CompositeOperator</span><span class="p">.</span><span class="n">Over</span><span class="p">);</span>
	<span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p>4. 添加水印文字</p>

<div class="language-csharp highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">new</span> <span class="nf">Drawables</span><span class="p">()</span>
    <span class="c1">// 设置字体大小，单位：像素</span>
    <span class="p">.</span><span class="nf">FontPointSize</span><span class="p">(</span><span class="n">img</span><span class="p">.</span><span class="n">TextSize</span><span class="p">)</span>
    <span class="c1">// 设置字体，根据字体文件的绝对路径来</span>
    <span class="p">.</span><span class="nf">Font</span><span class="p">(</span><span class="nf">GetStaticPath</span><span class="p">(</span><span class="s">"font/verdana.ttf"</span><span class="p">))</span>
    <span class="c1">// 设置字体的颜色和透明度其中img.TextColor的颜色格式为"#FFFFFF", img.Dissolve表示透明度的百分比</span>
    <span class="p">.</span><span class="nf">FillColor</span><span class="p">(</span><span class="k">new</span> <span class="nf">MagickColor</span><span class="p">(</span><span class="n">img</span><span class="p">.</span><span class="n">TextColor</span> <span class="p">+</span> <span class="p">(</span><span class="m">255</span> <span class="p">*</span> <span class="n">img</span><span class="p">.</span><span class="n">Dissolve</span> <span class="p">/</span> <span class="m">100</span><span class="p">).</span><span class="nf">ToString</span><span class="p">(</span><span class="s">"X2"</span><span class="p">)))</span>
    <span class="c1">// 设置文字对其方式</span>
    <span class="p">.</span><span class="nf">TextAlignment</span><span class="p">(</span><span class="n">TextAlignment</span><span class="p">.</span><span class="n">Center</span><span class="p">)</span>
    <span class="c1">// 设置文字的编码格式</span>
    <span class="p">.</span><span class="nf">TextEncoding</span><span class="p">(</span><span class="n">System</span><span class="p">.</span><span class="n">Text</span><span class="p">.</span><span class="n">Encoding</span><span class="p">.</span><span class="n">UTF8</span><span class="p">)</span>
    <span class="c1">// 设置文字的内容，和坐标</span>
    <span class="p">.</span><span class="nf">Text</span><span class="p">(</span><span class="n">width</span> <span class="p">-</span> <span class="n">img</span><span class="p">.</span><span class="n">Dx</span><span class="p">,</span> <span class="n">height</span> <span class="p">-</span> <span class="n">img</span><span class="p">.</span><span class="n">Dy</span><span class="p">,</span> <span class="n">img</span><span class="p">.</span><span class="n">Text</span><span class="p">)</span>
    <span class="c1">// 将文字画到图像上</span>
    <span class="p">.</span><span class="nf">Draw</span><span class="p">(</span><span class="n">image</span><span class="p">);</span>
</code></pre></div></div>

<p>好啦，这就是我使用Magick.NET的过程啦！</p>]]></content><author><name>Azio</name></author><category term="知识笔记" /><category term="asp.net core" /><category term="Magick.NET" /><category term="图像处理" /><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://www.azio.me/wp-content/uploads/2018/06/netcore.jpg" /><media:content medium="image" url="https://www.azio.me/wp-content/uploads/2018/06/netcore.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>