<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Nginx on Blog</title>
    <link>/tags/nginx/</link>
    <description>Recent content in Nginx on Blog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Tue, 11 Jan 2022 08:43:19 +0000</lastBuildDate>
    <atom:link href="/tags/nginx/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Nginx-limit_req</title>
      <link>/posts/2022-01-11-nginx-limit_req/</link>
      <pubDate>Tue, 11 Jan 2022 08:43:19 +0000</pubDate>
      <guid>/posts/2022-01-11-nginx-limit_req/</guid>
      <description>&lt;p&gt;作为一款应用最为广泛的webserver，Nginx内置了限制请求速率的功能，即可以限制用户在给定时间段发出的请求能够到达应用服务器的数量。&lt;/p&gt;&#xA;&lt;p&gt;该功能常用于安全目的，比如&lt;strong&gt;减缓&lt;/strong&gt;首页登录密码的暴力破解，并且通过将速率限制为典型的真实用户值来防止DDOS攻击。通俗来讲，主要用于保护上游应用程序服务器不被太多的用户请求同时淹没。&lt;/p&gt;&#xA;&lt;h2 id=&#34;工作原理&#34;&gt;工作原理&lt;/h2&gt;&#xA;&lt;p&gt;Nginx限速通过漏桶算法实现，该算法广泛用于分组交换通信网络中，用于处理带宽受限时的突发性。类比是一个桶，水从顶部倒入，从底部漏出；如果倒水的速度超过漏水的速度，水桶就会溢出。在请求处理方面，水代表来自客户端的请求，桶代表一个队列，其中请求根据先进先出 (FIFO) 调度算法等待处理。漏水代表请求退出缓冲区供服务器处理，溢出代表请求被丢弃。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://objects.911723.xyz/wp-content/uploads/2022/01/leaky-bucket-featured-image-300x180-3.jpg&#34; alt=&#34;漏桶算法示意图&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;基本配置&#34;&gt;基本配置&lt;/h2&gt;&#xA;&lt;p&gt;配置速率限制主要有两个指令：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;limit_req_zone&lt;/li&gt;&#xA;&lt;li&gt;limit_req&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;以下是一个简单的配置示例：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;limit_req_zone&lt;/span&gt; $binary_remote_addr &lt;span style=&#34;color:#e6db74&#34;&gt;zone=mylimit:10m&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;rate=10r/s&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;server&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/login/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;limit_req&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;zone=mylimit&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#f92672&#34;&gt;proxy_pass&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;http://my_upstream&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;语法规则如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Syntax:&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;limit_req_zone&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;key&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;zone=name:size&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;rate=rate&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;[sync]&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Default:&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;—&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;Context:&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;http&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;limit_req_zone 在http模块中定义，参数含义如下：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;key&lt;/strong&gt; ： 一般以上述示例的$binary_remote_addr作为限制特征，表示的是限制同一客户端ip地址&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;zone&lt;/strong&gt;: 在这里使用的是 $binary_remote_addr 而不是 $remote_addr。 $binary_remote_addr是$remote_addr的二进制形式，能够有效的减少存储空间。当区的大小为 1M 的时候，大约可以记录 16000个ip信息。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;rate&lt;/strong&gt;: 设置最大请求速率。在示例中，速率不能超过每秒 10 个请求。NGINX 实际上以毫秒为单位跟踪请求，因此此限制对应于每 100 毫秒1 个请求。这意味着如果请求在前一个允许的请求之后不到 100 毫秒到达，则请求将被拒绝。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;漏桶配置&#34;&gt;漏桶配置&lt;/h2&gt;&#xA;&lt;p&gt;如果在100毫秒内收到第二个请求，按照上述配置，直接返回&lt;code&gt;503&lt;/code&gt;错误，这显然是不合适的，通过引入&lt;strong&gt;burst&lt;/strong&gt;配置可以解决上述问题，在http模块配置好&lt;code&gt;limit_req_zone&lt;/code&gt;后，可以按照示例在server上下文中直接引用&lt;code&gt;zone&lt;/code&gt;， burst 表示漏桶的大小，具体配置如下：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Syntax:&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;limit_req&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;zone=name&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;[burst=number]&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;[nodelay&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;|&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;delay=number]&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;Default:&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;—&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;Context:&lt;/span&gt;   &lt;span style=&#34;color:#e6db74&#34;&gt;http,&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;server,&lt;/span&gt;  &lt;span style=&#34;color:#e6db74&#34;&gt;location&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;接下来，更新server配置：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-nginx&#34; data-lang=&#34;nginx&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;location&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;/login/&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;limit_req&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;zone=mylimit&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;burst=20&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;proxy_pass&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;http://my_upstream&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里将burst大小改为20，这意味着如果 21 个请求同时从给定 IP 地址到达，NGINX 会立即将第一个请求转发到上游服务器，并将剩余的 20 个放入队列中。然后它每 100 毫秒转发一个排队的请求，并且当排队的请求数超过 20 时直接返回&lt;code&gt;503&lt;/code&gt;错误。&lt;/p&gt;</description>
    </item>
    <item>
      <title>使用Docker安装WordPress</title>
      <link>/posts/2021-08-29-%E4%BD%BF%E7%94%A8docker%E5%AE%89%E8%A3%85wordpress/</link>
      <pubDate>Sun, 29 Aug 2021 14:43:01 +0000</pubDate>
      <guid>/posts/2021-08-29-%E4%BD%BF%E7%94%A8docker%E5%AE%89%E8%A3%85wordpress/</guid>
      <description>&lt;p&gt;一般而言，如果服务器只需要部署Wordpress服务，采用Docker Compose是比较好的安装方式，写好Yml文件后，直接启动即可，但是如果需要在单台服务器上部署多个服务，并且进行个性化配置，则手动安装配置各个容器是比较好的选择。&lt;/p&gt;&#xA;&lt;h2 id=&#34;一创建网络&#34;&gt;一、创建网络&lt;/h2&gt;&#xA;&lt;p&gt;使用Docker命令创建网络：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker network create my-net&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;使用Docker自带的网络有一个明显的缺点，即无法通过容器名访问其他容器，如果容器网络互联，则要查看具体的IP，有些繁琐。所以，创建好Docker网络是首先要做的。&lt;/p&gt;&#xA;&lt;h2 id=&#34;二安装mysql&#34;&gt;二、安装MySQL&lt;/h2&gt;&#xA;&lt;p&gt;使用Docker安装MYSQL并配置UTF8编码&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run --name mysql -e MYSQL_ROOT_PASSWORD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;password -dp 3306:3306 mysql --net my-net --character-set-server&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;utf8mb4 --collation-server&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;utf8mb4_unicode_ci --skip-character-set-client-handshake&#xA;&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; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;DATABASE&lt;/span&gt; wordpress;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;CREATE&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;USER&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;wordpress&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt; IDENTIFIED &lt;span style=&#34;color:#66d9ef&#34;&gt;BY&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;password&amp;#39;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;GRANT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ALL&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;PRIVILEGES&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;ON&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;wordpress&lt;span style=&#34;color:#f92672&#34;&gt;`&lt;/span&gt;.&lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;TO&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;wordpress&amp;#39;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;@&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;%&amp;#39;&lt;/span&gt;;  &lt;span style=&#34;color:#f92672&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;授权&lt;/span&gt;wordpress用户所有wordpress数据库权限&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;FLUSH &lt;span style=&#34;color:#66d9ef&#34;&gt;PRIVILEGES&lt;/span&gt;;  &lt;span style=&#34;color:#f92672&#34;&gt;#&lt;/span&gt; &lt;span style=&#34;color:#960050;background-color:#1e0010&#34;&gt;刷新权限&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;三安装wordpress&#34;&gt;三、安装WordPress&lt;/h2&gt;&#xA;&lt;p&gt;使用Docker安装Wordpress&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run --name wordpress -d --net my-net -e WORDPRESS_DB_USER&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;wordpress -e WORDPRESS_DB_PASSWORD&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;passowrd&amp;#34;&lt;/span&gt; -e WORDPRESS_DB_NAME&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;wordpress -e WORDPRESS_DB_HOST&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;mysql -v ~/wordpress/html:/var/www/html wordpress:5.8-php7.4-fpm&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;将Wordpress内容映射到～/wordpress/html下，方便Nginx直接访问静态资源文件。&lt;/p&gt;&#xA;&lt;p&gt;这里还需要对Wordpress默认的上传文件大小进行修改，主要涉及两个部分，一个是php配置文件的修改，另一个是Nginx配置的修改。&lt;/p&gt;&#xA;&lt;p&gt;wordpress容器内的php配置修改比较容易，首先在主机目录下新建upload.ini文件，填写上传文件的一系列配置。&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-ini&#34; data-lang=&#34;ini&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;upload_max_filesize&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;1024M&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;post_max_size&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;1024M&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;max_execution_time&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;300&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;四安装nginx&#34;&gt;四、安装Nginx&lt;/h2&gt;&#xA;&lt;p&gt;最后一步就是Nginx的安装及配置&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;docker run --name nginx -d -p80:80 -p443:443 -v ~/nginx:/etc/nginx -v ~/wordpress/html:/var/www/wordpress  --network my-net  nginx&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里将wordpress映射的主机目录映射到Nginx容器中，然后对nginx.conf进行修改&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nginx概览</title>
      <link>/posts/2021-05-25-nginx%E6%A6%82%E8%A7%88/</link>
      <pubDate>Tue, 25 May 2021 14:30:07 +0000</pubDate>
      <guid>/posts/2021-05-25-nginx%E6%A6%82%E8%A7%88/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;strong&gt;Nginx&lt;/strong&gt;（发音同&amp;quot;engine X&amp;quot;）是异步框架的&#xA;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E7%B6%B2%E9%A0%81%E4%BC%BA%E6%9C%8D%E5%99%A8&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;网页服务器&lt;/a&gt;，也可以用作&#xA;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E5%8F%8D%E5%90%91%E4%BB%A3%E7%90%86&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;反向代理&lt;/a&gt;、&#xA;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;负载平衡器&lt;/a&gt;和&#xA;&lt;a href=&#34;https://zh.wikipedia.org/wiki/HTTP%E7%BC%93%E5%AD%98&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;HTTP缓存&lt;/a&gt;。该软件由&#xA;&lt;a href=&#34;https://zh.wikipedia.org/wiki/%E4%BC%8A%E6%88%88%E7%88%BE%C2%B7%E8%B3%BD%E7%B4%A2%E8%80%B6%E5%A4%AB&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;伊戈尔·赛索耶夫&lt;/a&gt;创建并于2004年首次公开发布。2011年成立同名公司以提供支持。2019年3月11日，Nginx公司被F5 Networks以6.7亿美元收购。&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;—— 维基百科&lt;/p&gt;&lt;/blockquote&gt;&#xA;&lt;h2 id=&#34;特点&#34;&gt;特点&lt;/h2&gt;&#xA;&lt;p&gt;占用内存小：得益于C语言编写，Nginx占用内存小、并发量高（Nginx在官方测试的结果中，能够支持五万个并行连接，而在实际的运作中，可以支持二万至四万个并行连接。）。&lt;/p&gt;&#xA;&lt;p&gt;高并发：在Linux系统上Nginx使用了Epoll机制，能够高效的处理大量的连接数。&lt;/p&gt;&#xA;&lt;p&gt;高可靠：Ngxin使用了Master-Worker机制，真正处理请求的是Worker进程，Master进程可以监控Worker进程，并且能在Woker进程意外退出的时候重启该进程。&lt;/p&gt;&#xA;&lt;h2 id=&#34;作用&#34;&gt;作用&lt;/h2&gt;&#xA;&lt;p&gt;负载均衡&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://objects.911723.xyz/wp-content/uploads/2021/05/image-8.png&#34; alt=&#34;负载均衡示意图&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;手动安装&#34;&gt;手动安装&lt;/h2&gt;&#xA;&lt;p&gt;打开&#xA;&lt;a href=&#34;http://nginx.org/&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;官网&lt;/a&gt;，从上到下依次是开发版本、稳定版本、过期版本&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://objects.911723.xyz/wp-content/uploads/2021/05/image-1.png&#34; alt=&#34;Nginx版本&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;下载并解压缩&#34;&gt;下载并解压缩&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ubuntu@VM-0-6-ubuntu:~$ wget http://nginx.org/download/nginx-1.20.0.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ubuntu@VM-0-6-ubuntu:~$ tar -zxvf nginx-1.20.0.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src=&#34;https://objects.911723.xyz/wp-content/uploads/2021/05/image-4.png&#34; alt=&#34;解压缩结果&#34;&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;编译源代码&#34;&gt;编译源代码&lt;/h3&gt;&#xA;&lt;p&gt;Linux 的软件在编译的时候要经过三个步骤，configure/make以及make install&lt;/p&gt;&#xA;&lt;p&gt;1）通用配置选项&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://objects.911723.xyz/wp-content/uploads/2021/05/image-3.png&#34; alt=&#34;配置参数&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;2）第三方模块&lt;/p&gt;&#xA;&lt;p&gt;可以使用&amp;ndash;without-xxx_module取消自动编译，也可以使用&amp;ndash;with-xxx_module添加编译&lt;/p&gt;&#xA;&lt;h3 id=&#34;开始编译&#34;&gt;开始编译&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;ubuntu@VM-0-6-ubuntu:~/nginx-1.20.0$ ./configure&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;....&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;....&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;./configure: error: the HTTP rewrite module requires the PCRE library.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;You can either disable the module by using --without-http_rewrite_module&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;option, or install the PCRE library into the system, or build the PCRE library&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;statically from the source with nginx by using --with-pcre&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&amp;lt;path&amp;gt; option.&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;可以看到缺少PCRE（C语言编写的一个正则表达式库，在Nginx中用于http rewrite）模块，上述报错信息给出了三种解决方式：&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
