<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/install.unix.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'zh',
  ),
  'this' => 
  array (
    0 => 'install.unix.nginx.php',
    1 => 'Unix 系统下的 Nginx 1.4.x',
    2 => 'Unix 系统下的 Nginx 1.4.x',
  ),
  'up' => 
  array (
    0 => 'install.unix.php',
    1 => '在 Unix 系统上安装 PHP',
  ),
  'prev' => 
  array (
    0 => 'install.unix.apache2.php',
    1 => 'Unix 系统下的 Apache 2.x',
  ),
  'next' => 
  array (
    0 => 'install.unix.lighttpd-14.php',
    1 => 'Unix 平台的 Lighttpd 1.4',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'zh',
    'path' => 'install/unix/nginx.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="install.unix.nginx" class="sect1">
 <h2 class="title">Unix 系统下的 Nginx 1.4.x</h2>

 <p class="para">
  本文档包括使用 PHP-FPM 为 Nginx 1.4.x HTTP 服务器安装和配置 PHP 的说明和提示。
 </p>

 <p class="para">
  本指南假定您已经从源代码成功构建 Nginx，并且其二进制文件和配置文件都位于 <code class="literal">/usr/local/nginx</code>。
  如果您使用其他方式获取的 Nginx，请参考 <a href="https://www.nginx.com/resources/wiki/" class="link external">&raquo;&nbsp;Nginx Wiki</a> 并对照本文档完成安装。
 </p>

 <p class="para">
  本文档仅包含 Nginx 服务器的基本配置，它将通过 80 端口提供 PHP 应用的处理能力。
  如果您需要超出本文档范围的安装配置指导，建议您查阅 Nginx 和 PHP-FPM 的文档。
 </p>

 <p class="para">
  需要注意的是，本文档一律使用 &#039;x&#039; 来表示版本号，请根据实际情况将 &#039;x&#039; 替换为对应的版本号。
 </p>

 <ol type="1">
  <li class="listitem">
   <p class="para">
    建议您访问 Nginx Wiki
    <a href="https://www.nginx.com/resources/wiki/start/topics/tutorials/install/" class="link external">&raquo;&nbsp;安装</a> 页面以获取并在您的系统上安装 Nginx。 
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    获取并解压 PHP 源代码:
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
tar zxf php-x.x.x
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    配置并构建 PHP。在此步骤您可以使用很多选项自定义 PHP，例如启用某些扩展等。
    运行 ./configure --help 命令来获得完整的可用选项清单。
    在本示例中，我们仅进行包含 PHP-FPM 和 MySQL 支持的简单配置。
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cd ../php-x.x.x
./configure --enable-fpm --with-mysqli
make
sudo make install
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    创建配置文件，并将其复制到正确的位置。
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cp php.ini-development /usr/local/php/php.ini
cp /usr/local/etc/php-fpm.d/www.conf.default /usr/local/etc/php-fpm.d/www.conf
cp sapi/fpm/php-fpm /usr/local/bin
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    需要着重提醒的是，如果文件不存在，则阻止 Nginx 将请求发送到后端的 PHP-FPM 模块，
    以避免遭受恶意脚本注入的攻击。
   </p>
   <p class="para">
    将 php.ini 文件中的配置项
    <a href="ini.core.php#ini.cgi.fix-pathinfo" class="link">cgi.fix_pathinfo</a>
    设置为 <code class="literal">0</code> 。
   </p>
   <p class="para">
    打开 php.ini:
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
vim /usr/local/php/php.ini
</pre></div>
    </div>
   </div>

   <p class="para">
    定位到 <code class="literal">cgi.fix_pathinfo=</code> 并将其修改为如下所示：
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
cgi.fix_pathinfo=0
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    在启动服务之前，需要修改 php-fpm.conf 配置文件，确保 php-fpm 模块使用
    www-data 用户和 www-data 用户组的身份运行。
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
vim /usr/local/etc/php-fpm.d/www.conf
</pre></div>
    </div>
   </div>

   <p class="para">
    找到以下内容并修改： 
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user&#039;s group
;       will be used.
user = www-data
group = www-data
</pre></div>
    </div>
   </div>

   <p class="para">
    然后启动 php-fpm 服务：
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
/usr/local/bin/php-fpm
</pre></div>
    </div>
   </div>

   <p class="para">
    本文档未涵盖对 php-fpm 进行进一步配置的信息，如果您需要更多信息，请查阅相关文档。
   </p>
  </li>

  <li class="listitem">
   <p class="para">
    配置 Nginx 使其支持 PHP 应用：
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="cdata"><pre>
vim /usr/local/nginx/conf/nginx.conf
</pre></div>
    </div>

   </div>

   <p class="para">
    修改默认的 location 块，使其支持 .php 文件：
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="nginx-confcode"><pre class="nginx-confcode">location / {
    root   html;
    index  index.php index.html index.htm;
}</pre>
</div>
    </div>

   </div>

   <p class="para">
    下一步配置来保证对于 .php 文件的请求将被传送到后端的 PHP-FPM 模块，
    取消默认的 PHP 配置块的注释，并修改为下面的内容：
   </p>

   <div class="informalexample">
    <div class="example-contents">
<div class="nginx-confcode"><pre class="nginx-confcode">location ~* \.php$ {
    fastcgi_index   index.php;
    fastcgi_pass    127.0.0.1:9000;
    include         fastcgi_params;
    fastcgi_param   SCRIPT_FILENAME    $document_root$fastcgi_script_name;
    fastcgi_param   SCRIPT_NAME        $fastcgi_script_name;
}</pre>
</div>
    </div>

   </div>

   <p class="para">
    重启 Nginx。
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
sudo /usr/local/nginx/sbin/nginx -s stop
sudo /usr/local/nginx/sbin/nginx
</pre></div>
    </div>
   </div>
  </li>

  <li class="listitem">
   <p class="para">
    创建测试文件。
   </p>

   <div class="informalexample">
    <div class="example-contents screen">
<div class="cdata"><pre>
rm /usr/local/nginx/html/index.html
echo &quot;&lt;?php phpinfo(); ?&gt;&quot; &gt;&gt; /usr/local/nginx/html/index.php
</pre></div>
    </div>
   </div>

   <p class="para">
    打开浏览器，访问 http://localhost，将会显示 phpinfo() 。
   </p>
  </li>
 </ol>

 <p class="para">
  通过以上步骤的配置，Nginx 服务器现在可以以 <code class="literal">FPM</code> <code class="literal">SAPI</code> 模块的方式支持 PHP 应用了。
  当然，对于 Nginx 和 PHP 的配置，还有很多可用的选项，
  请在对应的源代码目录执行 <strong class="command">./configure --help</strong> 来查阅更多配置选项。
 </p>

</div><?php manual_footer($setup); ?>