共计 2471 个字符,预计需要花费 7 分钟才能阅读完成。
基于 Ubuntu 14.04 搭建 Nginx+PHP+MySQL 环境,以下全部命令行操作:
1, 由于需要大量的权限操作,方便起见临时提升权限,使用 root 账号
sudo su
2,安装 apt 源管理工具、添加 nginx 和 php 的安装源
apt-get install python-software-properties
add-apt-repository ppa:nginx/stable
add-apt-repository ppa:ondrej/php5
3,更新系统软件
apt-get update
4、安装 mysql
apt-get install mysql-server
注:在安装过程中,会要求你输入 MySQL 的 root 账号的密码。
5、安装 php 及对 mysql 的支持
apt-get install php5 php5-fpm php5-mysql php-apc
6、根据实际需要,选择性的安装 php 的各类功能模块(具体请自行百度)
apt-get install php-pear php5-dev php5-curl
apt-get install php5-gd php5-intl php5-imagick
apt-get install php5-imap php5-mcrypt php5-memcache
apt-get install php5-ming php5-ps php5-pspell
apt-get install php5-recode php5-snmp php5-sqlite
apt-get install php5-tidy php5-xmlrpc php5-xsl
7、安装 nginx
apt-get install nginx
8、配置 php
vi /etc/php5/fpm/php.ini
找到:;cgi.fix_pathinfo=1
改为:cgi.fix_pathinfo=0
9、配置 nginx
mkdir /www
chmod 755 /www
创建一个 /www 目录设置为 755 权限
vi /etc/nginx/sites-enabled/default
找到:root /usr/share/nginx/html;
改为:root /www;
说明:将网站根目录设置到 /www 目录下,注意不要写成 /www/ 这种格式,
这个习惯性的小小洁癖给我带来了意想不到的困扰,后面细说。
找到:index index.html index.htm;
改为:index index.php index.html index.htm;
说明:在默认索引文件中增加 index.php
找到:location ~ .php$ {*} 区块
做如下调整(改动之处于行末有注释):
location ~ .php$ {
try_files $uri =404; #增加
fastcgi_split_path_info ^(.+.php)(/.+)$; #反注释
## NOTE: You should have “cgi.fix_pathinfo = 0;” in php.ini
#
## With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
## With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock; #反注释
fastcgi_index index.php; #反注释
include fastcgi_params; #反注释
}
10、解决 php-fpm 与 nginx 的小 bug
按上述步骤操作后,由于 nginx 与 php-fpm 之间的一个小 bug,会导致这样的现象:
网站中的静态页面 *.html 都能正常访问,而 *.php 文件虽然会返回 200 状态码,
但实际输出给浏览器的页面内容却是空白。
简而言之,原因是 nginx 无法正确的将 *.php 文件的地址传递给 php-fpm 去解析,
相当于 php-fpm 接受到了请求,但这请求却指向一个不存在的文件,于是返回空结果。
为了解决这个问题,需要改动 nginx 默认的 fastcgi_params 配置文件:
vi /etc/nginx/fastcgi_params
在文件的最后增加一行:
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
关于这行的内容,多说几句,其中有两个参数:
$document_root 即是指网站的根目录,也就是我们在前面刚设置的 root /www;
$fastcgi_script_name 则是指网站上的各个 *.php 文件名(其实是文件的相对路径)
这两个合在一起形成完整的 php file path,比如你的网站有个 /test/script.php 文件,
nginx 传递给 php-fpm 的完整路径就是:/www/test/script.php
我在前面说配置 nginx 时,写成了 root /www/; 这种写法,对于 nginx 不成问题,
但它在向 php-fpm 传递 php 文件路径时,会形成:/www//test/script.php
这样的文件地址无效(获取不到正确的 php 文件),于是出现返回空白的问题。
这个问题是如此之隐蔽,以至于我花了大量时间在查看 LOG、寻找资料和调整设置上。
11,重启各项服务
service php5-fpm reload
service nginx reload
重新加载各项配置改动。
12、测试
vi /www/index.php
内容:
<?php echo phpinfo(); ?>
请打开你的浏览器访问:http://localhost 若一切正常,将输出 php 环境信息,如:
Ubuntu 14.04 LTS 安装 LNMP Nginx\PHP5 (PHP-FPM)\MySQL http://www.linuxidc.com/Linux/2014-05/102351.htm
更多 Ubuntu 相关信息见Ubuntu 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=2
本文永久更新链接地址:http://www.linuxidc.com/Linux/2016-05/131138.htm