有空在Ubuntu 14.04下折腾了以下几个东西,MediaWiki(维基),NodeBB(论坛),GitLab(私有git服务器)。本来的目的是搭建一个wiki,选用了MediaWiki后,使用Apache搭建好了。
搭论坛的时候,一开始想用Discourse,但配置总有问题,就先放弃了,找了个NodeBB看起来也还可以。
但NodeBB是使用Nginx做代理的,考虑之后决定放弃Apache,全部统一用Nginx。
于是搭建了Nginx+MediaWiki+NodeBB+Everything(这个是别人配置好的,只是在Nginx中设置了代理)。
后来又添上了GitLab。整理安装记录如下。
/****************************************安装Nginx分割线****************************************************************/
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
vim /etc/php5/fpm/php.ini
在文件中找到:
;cgi.fix_pathinfo=1
改为:
cgi.fix_pathinfo=0
9、配置nginx
创建一个 /www 目录设置为 755 权限
mkdir /www chmod 755 /www
将网站根目录设置到/www 目录下,注意不要写成 /www/ 这种格式
vim /etc/nginx/sites-enabled/default
找到:
root /usr/share/nginx/html;
改为:
root /www;
找到:
index index.html index.htm;
增加 index.php,即改为:
index index.php index.html index.htm;
找到: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配置文件:
vim /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、测试
vim /www/index.php
内容:
<?php echo phpinfo(); ?>
请打开你的浏览器访问:htpt://localhost 若一切正常,将输出php环境信息。
一般这样子就没问题了。
我按着这个步骤,也没什么问题,但是打开htpt://localhost 的时候,我看到的是apache!
是的,这个机子被别人安装过apache了,捷足先登抢占了80端口。
那先把apache的端口改掉。
修改两个文件 /etc/apache2/ports.conf 和 /etc/apache2/sites-available/000-default.conf
将80改成81.
重启服务
service apache2 restart service nginx restart
就可以了。
重启Nginx的时候 注意看是OK还是fail。
如果fail 运行nginx -t查看报错信息。
更多Nginx相关教程见以下内容:
CentOS 6.2实战部署Nginx+MySQL+PHP
搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程
CentOS 6.3下配置Nginx加载ngx_pagespeed模块