/ 中存储网

Apache/Nginx+MySQL+PHP环境的安装配置

2013-11-22 12:22:02 来源:itjs.cn

1. 装完系统后开启 sshd, 关闭防火墙 (不然外链接是访问不了 apache) 关闭安全系统 SELinux( 不然报403 访问页面错误 )

重启后永久性生效

chkconfig sshd on  ( 开启 sshd)

chkconfig iptables off ( 关闭防火墙 )

修改 /etc/selinux/config文件中设置 SELINUX=disabled  ( 关闭SELinux)

即时生效 , 重启后失效

#service sshd start  ( 开启 sshd)

#service iptables stop( 关闭防火墙 )

#setenforce 0 ( 关闭 SELinux)

2. 默认centos6 装了 mysql+apache 可用rpm -q mysql  httpd 查看是否已经装 默认已安装         

chkconfig设成开机启动 ( chkconfig --list 是列出当前 , 如果 list 里面没有mysqld 和 httpd则用 chkconfig --add mysqld 和httpd)

接着chkconfig httpd on 和 chkconfig mysqld on 这只是要重启后才永久生效   如果即时生效 用 service httpd start  service mysqld start 

3. 修改apache 的配置文件比如更改网站文档目录或不同域名指向不同的文件夹或开端口等等 默认配置文件在 /etc/httpd/conf 文件夹下的 httpd.conf

1).修改网站文档目录在 httpd.conf 下修改  DocumentRoot "/var/www"  <Directory "/var/www"> 这二要目录一样

2).不同域名指向不同目录 在httpd.conf 查找 #Inculde /etc/httpd/conf/httpd-vhosts.conf 去掉前面的 #号如果不存在刚加上这一句且创建 httpd-vhosts.conf 文件( 或者直接在 /etc/httpd/conf.d 目录下建一个 httpd-vhosts.conf因为 http.conf 已经#Inculde /etc/httpd/conf.d/*.conf 了 )               

# 确保 Apache在监听 80 端口 即 httpd.conf文件里要有下面一句话 其实也可以放在httpd-vhosts.conf里

修改   httpd-vhost.conf文件格式如下

# 为虚拟主机在所有 IP 地址上监听  

NameVirtualHost *:

<VirtualHost *:>

ServerAdmin edu1211@.com

DocumentRoot /var/www/

ServerName www.example.com

# 你可以在这里添加其他指令

</VirtualHost>

<VirtualHost *:>

DocumentRoot /var/www/a

ServerName www.a.com

# 你可以在这里添加其他指令

Errorlog "logs/a.log"

CustomLog "logs/b.log" common

</VirtualHost>

上面可以在外部电脑更改 /etc/hosts 文件 如在 windows平台更改 C:WindowsSystem32driversetchosts 文件 (假设 192.168.0.110 是我们部署的服务器 )

127.0.0.1       localhost

192.168.0.110  www.example.com

192.168.0.110   www.a.com

192.168.0.110   www.b.com

则在外部电脑输入 www.example.com      则跳到 /var/www/目录

则在外部电脑输入 www.a.com            则挑到 /var/www/a目录

则在外部电脑输入 www.b.com            则挑到 /var/www/目录

为什么输入 www.b.com 会挑到 /var/www/ 目录下 因为服务器在 httpd-vhosts.conf 找不到虚拟主机名刚默认挑到 80 端口的第一个虚拟目录下

3). 为网站开不同端口 首先在httpd.conf或httpd-vhosts.conf(建议写在这里面)加上要监听的端口

Listen 8080 // 添加的要开的断口

然后 httpd-vhost.conf添加格式跟 80 端口一样

4. 安装 php 初始系统是没有安装的 yum install php 即可

php配置文件是 php.ini  可以用find / -name php.ini 一般在 /etc/php.ini这个位置

现在要apache 支持 (绑定 )php 脚本语言

即修改apache 的配置文件 httpd.conf 在#AddType application/x-tar .tgz 下加上以下二行

AddType application/x-httpd-php .php

AddType application/x-httpd-php-source .phps

DirectoryIndex index.html index.html.var index.php//即加上访问目录时index.php

其实上面可以改 /etc/httpd/conf.d目录下的 php.conf 就可以了( 建议这样因为 /etc/httpd/conf/httpd.conf已经有 Include conf.d/*.conf)

在php.conf 里面我们都可以看到 Apache 绑定PHP 脚本语言的代码所以上面的 httpd-vhosts.conf 文件可以直接写在 /etc/httpd/conf.d目录下就可以了

同时修改php 的配置文件 php.ini  打开mysql 扩展 即去掉 ;extension=mysql.so 的分号

然后重启 apache 即可  service httpd restart

5. 安装 phpMyAdmin  

1) 到官网下载最新的 phpMyAdmin包

2) 解压包 tar zxvf phpMyAdmin-2.113-all-languages.tar.gz

3) mv phpMyAdmin-2.113-all-languages /var/www/phpMyAdmin

4) phpMyAdmin的配置文件在 /phpMyAdmin/libraies/config.default.php 文件 (如果是以根目录下 config.ini.php 配安装例外 )

安装完成 即可通过网页登录 但是默认 mysql 是空密码 而 phpMyAdmin禁止空密码登录 则可通过命令行的方式更改 mysql 密码或改phpMyAdmin 的配置文件让允许空密码登录

打开配置文件找到

$cfg['Servers'][$i]['nopassword'] =false

$cfg['Servers'][$i]['AllowNoPassword'] =false 

把这二行的 false都改成 true 即可

$cfg['Servers'][$i]['auth_type'] ='cookie';

是默认的, 如果更成

$cfg['Servers'][$i]['auth_type']='config';

用config 模式时需要 user,password 参数,这时登录 PhpMyAdmin不需要输入用户名密码,安全性较低,适合多用户测试开发即

$cfg['Servers'][$i]['user']='root';  

$cfg['Servers'][$i]['password']=''; 就生效了 即以种默认身份登录

6. 安装 PHP扩展模块

linux下 PHP 扩展安装模块比如打开 phpMyAdmin的话会提示   没有找到 PHP 扩展 mbstring,而您现在好像在使用多字节字符集。没有 mbstring 扩展的 phpMyAdmin 不能正确分割字符串,可能产生意想不到的结果 .

则在 php.ini 加上extension=mbstring.so 重启 apache(httpd)还是不行 那么运行find / -name mysql.so 找到存放模块的目录一般是 /usr/lib/php/modules/mysql.so 这个位置则找找 /usr/lib/php/modules/目录下有没有 mbstring.so

很显示没有 那么得安装 yum install php-mbstring 然后再重启 apache(httpd)刚提示错误没有了

7. 安装 Nginx+PHP(要源码安装 )

1)安装 Nginx

centos默认是安装了 apache 那么用yum remove httpd 然后再安装 ngnix 因为yum 源是不包含 ngnix

官网有提供 yum安装说明 :

CentOS:

To add nginx yum repository, create a file named /etc/yum.repos.d/nginx.repo and paste one of the configurations below:

[nginx]

name=nginx repo

baseurl=http://nginx.org/packages/centos/$releasever/$basearch/

gpgcheck=0

enabled=1

当然也有源码安装但是需要你安装依赖包 ( 有点麻烦)

Nginx的配置文件在   /etc/nginx/nginx.conf

但是文件的最后是包含其它文件的    Include /etc/nginx/conf.d/*.conf;

然后   #service nginx start    #chkconfig nginx on

2)安装 PHP

但是安装PHP 的时候如果直接 yum 安装php 是不行的

因为默认情况下 Nginx和 PHP 他俩之间是一点感觉没有的,在之前,很多朋友都搭建过 Apache+PHP ,Apache+PHP 编译后生成的是模块文件,而 Nginx+PHP 需要PHP 生成可执行文件才可以,所以要利用 fastcgi 技术来实现 N ginx与 PHP 的整合,这个只要我们安装是启用 FastCGI 即可。此次我们安装 PHP不仅使用了 FastCGI ,而且还使用了 PHP-FPM这么一个东东, PHP-FPM 说白了是一个管理 FastCGI的一个管理器,它作为 PHP 的插件纯在,在安装 PHP要想使用 PHP-FPM 时就需要把 PHP-FPM以补丁的形式安装到 PHP 中,而且PHP 要与 PHP-FPM版本一致,这是必须的,切记!

所以 PHP得源码安装的时候把 PHP-FRM 选项带上即解压 PHP 源码包后

先安装gcc 套件这是个编译器 yum install gcc   yum install gcc-c++ (libmcrypt要用到 )

./configure --prefix=/usr/local/php --with-gd --enable-mbstring --with-mysql --with-mysqli --with-jpeg-dir --with-zlib --with-openssl --with-mcrypt --enable-fastcgi --enable-fpm

此过程会出现以下错误

a)  error: xml2-config not found. Please check your libxml2 installation.

因为php5 是需要 libxml2支持   rpm -qa|grep libxml2

只需要安装 libxml2-dev , yum install libxml2-devel  

b)  同样出会出现 openssl 错误那么yum install openssl-devel

c)  configure: error: jpeglib.h not found. 解决方法是: yum install libjpeg-devel

d)  configure: error: png.h not found   解决方法是: yum install libpng-devel

e)  configure: error: mcrypt.h not found. Please reinstall libmcrypt.       

解决方法yum 码安装不了 所以得百度搜 libmcrypt源码

libmcrypt./configure  ( 这里不能 --prefix指定安装路径不然下面安装还是会出错 ) 可能会报check ....no 忽视这些 checking for g77... no  什么fastcgi 警告   但是没出现错误比如 configure: error: No F77 compiler found 就可以了所以

接着#make   #make install

跳到php 目录下继续 ./configure  --prefix=/usr/local/php --with-gd --enable-mbstring --with-mysql --with-mysqli --with-jpeg-dir --with-zlib --with-openssl --with-mcrypt --enable-fastcgi --enable-fpm

安装php 过程会遇到的报错可以参考 http://www.cnblogs.com/1110111abc/articles/2528102.html

接着

#make

#make install

#cp php.ini-production   /usr/local/php/etc/php.ini

#mv /usr/local/php/etc/php-fpm.conf.default  /usr/local/php/etc/php-fpm.conf  //不然下面启动php-fpm会报错找不到php-fpm.conf文件

下面我们就要启动 PHP-FPM

#/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini //如果不加上-c参数指定他的php.ini参数(必须不然以后没法修改他的php.ini文件)    (lsof -i:9000  可以查看9000端口占用详细情况)  网上说后面加上start是不行的(可能以前版本要吧)

vim /etc/rc.local

在这个文件的最后加入如下语句 :

/usr/local/php/sbin/php-fpm -c /usr/local/php/etc/php.ini   这里你所要启动的服务一定要写成是绝对路径的形式 !! 不然的话, 这个服务是启动不起来的 !!

最后一步关联 Nginx与 PHP 

#vim /etc/nginx/conf.d/default.conf

#location ~ .php$ {

#    root           html;

#    fastcgi_pass   127.0.0.1:;

#    fastcgi_index  index.php;

#    fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;

#    include        fastcgi_params;

#}

改成

location ~ .php$ {

root           html;

fastcgi_pass   127.0.0.1:;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;

include        fastcgi_params;

}

 提示:Nginx 自己知道咋找 PHP 了还不行,还需要 PHP知道咋找 Nginx ,这点我们不需要担心, PHP-FPM 已经在配置文件中定义了从哪接受 PHP 请求,我们可以打开配置文件看一下 (Apache 却不同 只要 Apache绑定了 PHP 就行) 

#vi /usr/local/php/etc/php-fpm.conf

如果要把9000 端口改成其它的端口那么二个文件的端口要改成一至

最后重启Nginx 

建一个测试页面加上 vim /usr/share/nginx/html/a.php

<?php

phpinfo();

?>

执行phpinfo();date 时区不正确 解决方法vim /usr/local/php/etc/php.ini 设置为 date.timezone = Asia/Shanghai

如果要在Nginx 开端口什么的跟 Apache 上一样

server {

listen       ;

server_name  www.server110.com;

#charset koi8-r;

#access_log  /var/log/nginx/log/host.access.log  main;

location / {

root   /usr/share/nginx/html;

index  index.html index.htm;

}

#error_page                /.html;

redirect server error pages to the static page /50x.html

#

error_page        /50x.html;

location = /50x.html {

root   /usr/share/nginx/html;

}

proxy the PHP scripts to Apache listening on 127.0.0.1:

#

#location ~ .php$ {

proxy_pass   http://127.0.0.1;

#}

pass the PHP scripts to FastCGI server listening on 127.0.0.1:

location ~ .php$ {

root           html;

fastcgi_pass   127.0.0.1:;

fastcgi_index  index.php;

fastcgi_param  SCRIPT_FILENAME  /usr/share/nginx/html$fastcgi_script_name;

include        fastcgi_params;

}

deny access to .htaccess files, if Apache's document root

concurs with nginx's one

#location ~ /.ht {

deny  all;

#}

}

复制一下server 然后修改一下就可以