<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Apache</title>
    <link>https://llinux.cn/%E5%9F%BA%E7%A1%80%E6%9C%8D%E5%8A%A1/web%E6%9C%8D%E5%8A%A1/apache/</link>
    <description>阿征的运维笔记</description>
    <language>zh</language>
    <atom:link href="https://llinux.cn/%E5%9F%BA%E7%A1%80%E6%9C%8D%E5%8A%A1/web%E6%9C%8D%E5%8A%A1/apache/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Apache</title>
      <link>https://llinux.cn/%E5%9F%BA%E7%A1%80%E6%9C%8D%E5%8A%A1/web%E6%9C%8D%E5%8A%A1/apache/apache/</link>
      
      <guid>https://llinux.cn/%E5%9F%BA%E7%A1%80%E6%9C%8D%E5%8A%A1/web%E6%9C%8D%E5%8A%A1/apache/apache/</guid>
      <description>&lt;h1 id=&#34;apache&#34;&gt;apache&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#apache&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;h3 id=&#34;apache特性&#34;&gt;apache特性&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#apache%e7%89%b9%e6%80%a7&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;高度模块化：core + modules&lt;/li&gt;&#xA;&lt;li&gt;DSO：Dynamic Shared Object 动态加载/卸载&lt;/li&gt;&#xA;&lt;li&gt;MPM：multi-processing module 多路处理模块&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;mpm-工作模式&#34;&gt;MPM 工作模式&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#mpm-%e5%b7%a5%e4%bd%9c%e6%a8%a1%e5%bc%8f&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;h4 id=&#34;prefork&#34;&gt;&lt;strong&gt;prefork&lt;/strong&gt;&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#prefork&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;多进程I/O模型，每个进程响应一个请求，CentOS 7 默认模型&lt;/p&gt;&#xA;&lt;p&gt;一个主进程：生成和回收n个子进程，创建套接字，不响应请求。&lt;/p&gt;&#xA;&lt;p&gt;多个子进程：工作(work)进程，每个子进程处理一个请求；系统初始时，预先生成多个空闲进程，等待请求。&lt;/p&gt;&#xA;&lt;p&gt;**优点：**稳定&lt;/p&gt;&#xA;&lt;p&gt;**缺点：**慢，占用资源，不适用于高并发场景&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;配置：&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;highlight code-sample&#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;includecode&#34; &gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /app/httpd24/conf.d/test.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;StartServers      &lt;span class=&#34;m&#34;&gt;100&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#开机自动开启100个进程&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MinSpareServers   &lt;span class=&#34;m&#34;&gt;50&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#最小的空闲进程50&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MaxSpareServers   &lt;span class=&#34;m&#34;&gt;80&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#最大的空闲进程80&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ServerLimit          &lt;span class=&#34;m&#34;&gt;2560&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#最多进程数,最大值 20000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MaxRequestWorkers    &lt;span class=&#34;m&#34;&gt;2560&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#最大的并发连接数，默认256&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MaxConnectionsPerChild  &lt;span class=&#34;m&#34;&gt;4000&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#子进程最多能处理的请求数量。在处理MaxRequestsPerChild 个请求之后,子进程将会被父进程终止，这时候子进程占用的内存就会释放(为0时永远不释放）&lt;/span&gt;&#xA;&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;#MaxRequestsPerChild 4000  #从 httpd.2.3.9开始被MaxConnectionsPerChild代替&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&lt;h4 id=&#34;worker&#34;&gt;&lt;strong&gt;worker&lt;/strong&gt;&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#worker&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;复用的多进程I/O模型,多进程多线程，IIS使用此模型&lt;/p&gt;&#xA;&lt;p&gt;一个主进程：生成m个子进程，每个子进程负责生个n个线程，每个线程响应一个请求，并发响应请求：m*n&lt;/p&gt;&#xA;&lt;p&gt;**优点：**相比prefork 占用的内存较少，可以同时处理更多的请求&lt;/p&gt;&#xA;&lt;p&gt;**缺点：**使用keep-alive的长连接方式，某个线程会一直被占据，即使没有传输数据，也需要一直等待到超时才会被释放。如果过多的线程，被这样占据，也会导致在高并发场景下的无服务线程可用。（该问题在prefork模式下，同样会发生）&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;配置：&lt;/strong&gt;&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;highlight code-sample&#34;&gt;&#xA;  &#xA;  &lt;div class=&#34;includecode&#34; &gt;&#xA;    &lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;vim /app/httpd24/conf.d/test.conf&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ServerLimit         &lt;span class=&#34;m&#34;&gt;16&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;#最多worker进程数 #Upper limit on configurable number of processes&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;StartServers        &lt;span class=&#34;m&#34;&gt;10&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;#开机自动开启10个进程 #Number of child server processes created at startup&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MaxRequestWorkers  &lt;span class=&#34;m&#34;&gt;150&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;#最能处理多少个连接 #Maximum number of connections that will be processed simultaneously&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MinSpareThreads     &lt;span class=&#34;m&#34;&gt;25&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#最小空闲线程&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;MaxSpareThreads     &lt;span class=&#34;m&#34;&gt;75&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;#最大空闲线程&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ThreadsPerChild     &lt;span class=&#34;m&#34;&gt;25&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;#每个进程中线程的数量 #Number of threads created by each child process&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt;&lt;h4 id=&#34;event&#34;&gt;event&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#event&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h4&gt;&#xA;&lt;p&gt;事件驱动模型（worker模型的变种），CentOS8 默认模型&lt;/p&gt;</description>
    </item>
    
    <item>
      <title>LAMP</title>
      <link>https://llinux.cn/%E5%9F%BA%E7%A1%80%E6%9C%8D%E5%8A%A1/web%E6%9C%8D%E5%8A%A1/apache/lamp/</link>
      
      <guid>https://llinux.cn/%E5%9F%BA%E7%A1%80%E6%9C%8D%E5%8A%A1/web%E6%9C%8D%E5%8A%A1/apache/lamp/</guid>
      <description>&lt;h1 id=&#34;lamp&#34;&gt;LAMP&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#lamp&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;L:LINUX&lt;/p&gt;&#xA;&lt;p&gt;A:APACHE&lt;/p&gt;&#xA;&lt;p&gt;M:MYSQL&lt;/p&gt;&#xA;&lt;p&gt;P:PHP&lt;/p&gt;&#xA;&lt;h1 id=&#34;cgi和fastcgi&#34;&gt;CGI和fastCGI&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#cgi%e5%92%8cfastcgi&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;p&gt;&lt;strong&gt;CGI又称通用网关接口，每种语言的CGI解释器是不同的&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;apache本身只能处理静态资源，当需要处理动态资源时则需要CGI这种解释器来实现和php等语言的交互，然后在将最后得到的结果交给apache，apache在把得到的结果加首部字段从而发送给浏览器，浏览器在进行解释执行&lt;/p&gt;&#xA;&lt;h2 id=&#34;cgi&#34;&gt;CGI：&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#cgi&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;较老的技术，目前已经淘汰&lt;/p&gt;&#xA;&lt;p&gt;web服务器会根据这次请求的内容，然后会 fork 一个新进程来运行外部的 C 程序或者bash,perl脚本等，这个进程会把处理完的数据返回给web服务器，最后web服务器把内容发送给用户，刚才fork的进程也随之退出。 如果下次用户还请求改动态脚本，那么web服务器又再次fork一个新进程，周而复始的进行。效率非常底下&lt;/p&gt;&#xA;&lt;h2 id=&#34;fastcgi&#34;&gt;fastCGI：&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#fastcgi&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;fastcgi的方式是，web服务器收到一个请求时，不会重新fork一个进程（因为这个进程在web服务器启动时就开启了，而且不会退出），web服务器直接把内容传递给这个进程（进程间通信，但fastcgi使用了别的方式，tcp方式通信），这个进程收到请求后进行处理，把结果返回给web服务器，最后自己接着等待下一个请求的到来，而不是退出&lt;/p&gt;&#xA;&lt;h2 id=&#34;cgi和fastcgi对比&#34;&gt;CGI和fastcgi对比&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#cgi%e5%92%8cfastcgi%e5%af%b9%e6%af%94&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h2&gt;&#xA;&lt;p&gt;CGI: 兼职, 一次性的过河拆迁式服务，&lt;strong&gt;需在apache开启子进程&lt;/strong&gt;，消耗apache的性能&lt;/p&gt;&#xA;&lt;p&gt;FASTCGI: 专职,全周期的持续式服务，无需开启子进程，可以是一个&lt;strong&gt;独立的服务器&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;php&#34;&gt;PHP&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#php&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h1&gt;&#xA;&lt;h3 id=&#34;简介&#34;&gt;简介&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%e7%ae%80%e4%bb%8b&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;php是一种解释型语言，主要用于web开发实现动态web页面&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;php是依附与apache or nginx的一个模块&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;执行步骤&#34;&gt;执行步骤&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#%e6%89%a7%e8%a1%8c%e6%ad%a5%e9%aa%a4&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;&lt;strong&gt;PHP的语言引擎Zend执行PHP脚本代码一般会经过如下4个步骤&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;1、Scanning 词法分析,将PHP代码转换为语言片段(Tokens)&lt;/p&gt;&#xA;&lt;p&gt;2、Parsing 语义分析,将Tokens转换成简单而有意义的表达式&lt;/p&gt;&#xA;&lt;p&gt;3、Compilation 将表达式编译成Opcode&lt;/p&gt;&#xA;&lt;p&gt;4、Execution 顺次执行Opcode，每次一条，从而实现PHP脚本的功能&lt;/p&gt;&#xA;&lt;p&gt;即：&lt;strong&gt;扫描&amp;ndash;&amp;gt;分析&amp;ndash;&amp;gt;编译&amp;ndash;&amp;gt;执行&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;h3 id=&#34;php配置&#34;&gt;php配置&lt;a class=&#34;td-heading-self-link&#34; href=&#34;#php%e9%85%8d%e7%bd%ae&#34; aria-label=&#34;Heading self-link&#34;&gt;&lt;/a&gt;&lt;/h3&gt;&#xA;&lt;p&gt;php 的配置文件：/etc/php.ini, /etc/php.d/*.ini&lt;/p&gt;&#xA;&lt;p&gt;配置文件在php解释器启动时被读取&lt;/p&gt;&#xA;&lt;p&gt;对配置文件的修改生效方法&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;Modules：重启httpd服务（systemctl restart httpd）&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;FastCGI：重启php-fpm服务（systemctl restart php-fpm）&lt;/p&gt;</description>
    </item>
    
  </channel>
</rss>
