基于最新的Ubuntu 14.04(2014年9月)搭建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
如果mysqli扩展安装不上,执行如下命令:
aptitude install php5-mysql
登陆mysql
mysql -u root -p
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.fixpathinfo=1 改为:cgi.fixpathinfo=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$ { tryfiles $uri =404; #增加 fastcgisplitpathinfo ^(.+.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:
fastcgipass unix:/var/run/php5-fpm.sock; #反注释 fastcgiindex index.php; #反注释 include fastcgi_params; #反注释 }
10、解决php-fpm与nginx的小bug
按上述步骤操作后,由于nginx与php-fpm之间的一个小bug,会导致这样的现象: 网站中的静态页面 *.html 都能正常访问,而 *.php 文件虽然会返回200状态码, 但实际输出给浏览器的页面内容却是空白。 简而言之,原因是nginx无法正确的将 *.php 文件的地址传递给php-fpm去解析, 相当于php-fpm接受到了请求,但这请求却指向一个不存在的文件,于是返回空结果。 为了解决这个问题,需要改动nginx默认的fastcgiparams配置文件: vi /etc/nginx/fastcgiparams 在文件的最后增加一行: fastcgiparam SCRIPTFILENAME $documentroot$fastcgiscriptname; 关于这行的内容,多说几句,其中有两个参数: $documentroot 即是指网站的根目录,也就是我们在前面刚设置的 root /www; $fastcgiscriptname 则是指网站上的各个 *.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环境信息,效果如: http://image.baidu.com/i?word=phpinfo%28%29 附录: 1,一些编辑修改工作涉及到 vi 的使用,如果不会操作,请访问这个链接: http://linux.vbird.org/linux_basic/0310vi.php 2,我参考的所有资料中,最有价值的两篇,感谢前辈作者们: http://blog.segmentfault.com/ipanda/1190000000477401 http://imcn.me/html/y2014/20291.html 3,Ubuntu是个好玩具,自06年之后,再度推荐下: http://www.ubuntu.com 注意:别去用那个集成了一堆垃圾软件的所谓中国版。 如果你是为了搭建网站(而非日常家用),建议选用ubuntu server英文版。 limingx.com / 2014-09-13