LAPM=Linux+Apache+Php+MySQL
环境准备:卸载已安装的Apache、Php、MySQL
检查当前系统是否已经安装了apache和mysql
CentOS6.4-32/64bit(LAMP环境搭建)实战记录
2013年11月6日
http://hhrz.us/
参考资料:CentOS6.4-32bit(LAMP环境搭建)学习笔记(小俊工作室提供)
LAPM=Linux+Apache+Php+MySQL
检查当前系统是否已经安装了apache和mysql
#yum list installed | grep -i httpd
#rpm -qa | grep -i httpd
#yum list installed | grep -i mysql
#rpm -qa | grep -i mysql
***************************************
# rpm -q mysql
mysql-5.1.69-1.el6_4.x86_64
# rpm -q httpd
httpd-2.2.15-26.el6.centos.x86_64
# rpm -q php
php-5.3.3-23.el6_4.x86_64
***************************************
如果已经存在,为避免混乱,请先卸载
$ su -
# yum remove httpd
# yum remove php
# yum remove mysql
# uname -a
Linux CentOS 2.6.32-358.el6.i686 #1 SMP Thu Feb 21 21:50:49 UTC 2013 i686 i686 i386 GNU/Linux (32位)
Linux CentOS 2.6.32-358.el6.x86_64 #1 SMP Fri Feb 22 00:31:26 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux (64位)
用法:uname [选项]
输出一组系统信息。如果不跟随选项,则视为只附加-s 选项。
-n, --nodename 输出网络节点上的主机名
-m, --machine 输出主机的硬件架构名称
-p, --processor 输出处理器类型或"unknown"
-i, --hardware-platform 输出硬件平台或"unknown"
-a, --all 以如下次序输出所有信息。其中若-p 和 -i 的探测结果不可知则被省略:
-s, --kernel-name 输出内核名称
-r, --kernel-release 输出内核发行号
-v, --kernel-version 输出内核版本
-o, --operating-system 输出操作系统名称
--help 显示此帮助信息并退出
--version 显示版本信息并退出
根据上面的信息确定是32位(i386)还是64位(x86_64)的操作系统
# yum install -y httpd
# rpm -qa | grep http
httpd-tools-2.2.15-29.el6.centos.i686
httpd-2.2.15-29.el6.centos.i686
#rpm -qa |grep -i httpd(64bit)
httpd-tools-2.2.15-29.el6.centos.x86_64
httpd-2.2.15-29.el6.centos.x86_64
# /etc/rc.d/init.d/httpd start <-- 启动服务
# chkconfig --level 345 httpd on <-- 设为开机3、4、5级别自动启动
# chkconfig --list | grep httpd <-- 显示设置最终结果
httpd 0:关闭 1:关闭 2:关闭 3:启用 4:启用 5:启用 6:关闭
安装Apache扩展
# yum install -y httpd-manual mod_ssl mod_perl
# yum install -y mysql mysql-server
# rpm -qa | grep mysql
mysql-libs-5.1.69-1.el6_4.i686
mysql-server-5.1.69-1.el6_4.i686
mysql-5.1.69-1.el6_4.i686
# rpm -qa | grep mysql (64bit)
mysql-libs-5.1.69-1.el6_4.x86_64
mysql-5.1.69-1.el6_4.x86_64
mysql-server-5.1.69-1.el6_4.x86_64
# service mysqld start <-- 启动服务
# chkconfig --level 345 mysqld on
# chkconfig --list | grep mysqld
mysqld 0:关闭 1:关闭 2:关闭 3:启用 4:启用 5:启用 6:关闭
为mysql的root用户设置密码
# mysql_secure_installation
根据提示输入相应的信息即可!
# /etc/rc.d/init.d/mysqld restart <-- 重启MySQL
# yum -y install php
# rpm -qa | grep php
php-common-5.3.3-23.el6_4.i686
php-5.3.3-23.el6_4.i686
php-cli-5.3.3-23.el6_4.i686
安装相关php组件
# yum -y install php-mysql php-gd libjpeg* php-imap php-ldap php-odbc php-pear php-xml php-xmlrpc php-mbstring php-bcmath
# rpm -qa | grep php
php-common-5.3.3-23.el6_4.i686
php-imap-5.3.3-23.el6_4.i686
php-mysql-5.3.3-23.el6_4.i686
php-ldap-5.3.3-23.el6_4.i686
php-5.3.3-23.el6_4.i686
php-pdo-5.3.3-23.el6_4.i686
php-pear-1.9.4-4.el6.noarch
php-odbc-5.3.3-23.el6_4.i686
php-gd-5.3.3-23.el6_4.i686
php-bcmath-5.3.3-23.el6_4.i686
php-xmlrpc-5.3.3-23.el6_4.i686
php-cli-5.3.3-23.el6_4.i686
php-xml-5.3.3-23.el6_4.i686
php-mbstring-5.3.3-23.el6_4.i686
下面的要配合第三方下载源才能下到(rpmforge或epel)参见
# yum install libmcrypt libmcrypt-devel mcrypt mhash mhash
# /etc/init.d/mysqld restart <-- 重启mysql
# /etc/init.d/httpd restart <-- 重启Apache
提示:启httpd服务的时候 显示Could not reliably determine the server`s fully qualified domain name
解决方法:
# vi /etc/httpd/conf/httpd.conf
在命令行中输入"/ServerName"后回车再按n键进行向下查找,找到后在其下一行加入一句 ServerName localhost:80 即可!
# vi /etc/httpd/conf/httpd.conf <-- 打开配置文件
①ServerTokens 值改为 Prod (出现错误页的时候不显示服务器操作系统名称)
②ServerSignature 值为 Off (错误页中不显示Apache版本)
③Options Indexes FollowSymLinks
修改为:
Options Includes ExecCGI FollowSymLinks
(允许服务器执行CGI及SSI,禁止列出目录)
④#AddHandler cgi-script .cgi
修改为:
AddHandler cgi-script .cgi .pl
(允许扩展名为.pl的CGI脚本运行)
⑤AllowOverride None
修改为:
AllowOverride All
(337行,允许.htaccess)
⑥AddDefaultCharset UTF-8 (默认为UTF-8编码,可以修改为GB2312)
⑦Options Indexes MultiViews FollowSymLinks
修改为
Options MultiViews FollowSymLinks
(不在浏览器上显示树状目录结构,大约在554行)
⑧DirectoryIndex index.html index.html.var
修改为:
DirectoryIndex index.html index.htm Default.html Default.htm index.php Default.php index.html.var
(设置默认首页文件,增加index.php,约在在402行)
⑨ KeepAlive Off 修改为:KeepAlive On (允许程序性联机)
⑩ MaxKeepAliveRequests 100 值修改为1000 (增加同时连接数)
# httpd -t <-- 检查配置语法是否有错
Syntax OK <--检查通过
附加内容:Apache的相对结构:
①/etc/httpd/conf/httpd.conf:主配置文件,其主要设定以它为主;
②/etc/httpd/conf.d/*.conf:额外参数配置,如果你不想修改原始配置文件httpd.conf的话,可以将你自己的设置独立出来,如创建为/etc/httpd/conf.d/child.conf,Apache启动时就被载入;
③/usr/lib/httpd/modules/:apache支持很多模块,你所想要的模块都放在其中;
④/var/www/html/:默认‘首页’所在目录,当你输入http://localhost时所显示资料所在目录;
⑤/var/www/error/:配置错误或浏览器要求资料错误时,浏览器上出现的错误讯息以这个目录预设为主;
⑥/var/www/icons/:它提供 Apache默认给予的一些小图示,你可以随意使用,当你输入http://localhost/icons/时所显示的资料所在;
⑦/var/www/cgi-bin/:默认给一些可执行的CGI(网页程序)程序放置的目录;
⑧/var/log/httpd/:默认的apache登录信息都放在这里,对流量较大的网站,这个目录要小心设置;
⑨/usr/sbin/apachectl:apache的主要启动文件,其实是shell script;
⑩/usr/sbin/httpd:apache的二进制启动文件。
这里的虚拟主机,指的是在一部主机上有多个‘主网页’存在,实际这些网址都指向同一个IP。
①、先创建所需要的目录
# mkdir /var/www/web
②、直接在目录/etc/httpd/conf.d下建立单独的配置文件web.conf
# cat > /etc/httpd/conf.d/web.conf
输入以下内容:
NameVirtualHost *:80
Options -Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
ServerName www.web.com
DocumentRoot /var/www/web
ServerName www.test.com
DocumentRoot /var/www/html
注意,使用虚拟主机后,原本主机名称也要写入(上面www.test.com)
# service httpd restart <-- 重启Apache
附加说明:
httpd.conf是Apache的主要配置文件,但是针对每个目录,apache还允许在它们各自的目录下放置一个叫做.htacess的文件,用于控制这个目录的属性。
通常利用Apache的rewrite模块对URL进行重写的时候,rewrite规则会写在.htaccess文件里。但要使apache 能够正常的读 取.htaccess 文件的内容,就必须对.htaccess所在目录进行配置。从安全性考虑,根目录的AllowOverride属性一般都配置成 “None”,不允许任何Override ,即:
< Directory />
AllowOverride None
< /Directory>
在 AllowOverride 设置为 None 时,.htaccess 文件将被完全忽略。当此指令设置为All时,所有具有“.htaccess” 作用域的指令都允许出现在.htaccess 文件中。
而对于 URL rewrite 来说,至少需要把目录设置为
< Directory /blogRoot/>
AllowOverride FileInfo
< /Directory>
AllowOverride 参数就是指明Apache服务器是否去找.htacess文件作为配置文件,如果设置为none,那么服务器将忽略. htacess文件,如果设置为 All,那么所有在.htaccess文件里有的指令都将被重写。对于AllowOverride,还可以对它指定如下一些能被重写的指令类型.
(1)、AuthConfig 允许使用所有的权限指令,他们包括 AuthDBMGroupFile AuthDBMUserFile AuthGroupFile AuthName AuthTypeAuthUserFile 和 Require
(2)、FileInfo 允许使用文件控制类型的指令。它们包括 AddEncoding AddLanguage AddType DEfaultType ErrorDocument LanguagePriority
(3)、Indexes 允许使用目录控制类型的指令。它们包括 AddDescription AddIcon AddIconByEncoding AddIconByType DefaultIcon DirectoryIndex FancyIndexing HeaderName IndexIgnore IndexOptions ReadmeName
(4)、Limit 允许使用权限控制指令。它们包括Allow Deny和Order
(5)、Options 允许使用控制目录特征的指令.他们包括Options 和XBitHack
Options:
(1)、All 准许以下除MultiViews以外所有功能
(2)、MultiViews 允许多重内容被浏览,如果你的目录下有一个叫做foo.txt的文件,那么你可以通过/foo来访问到它,这对于一个多语言内容的站点比较有用
(3)、Indexes 若该目录下无index文件,则准许显示该目录下的文件以供选择,禁止目录浏览可以删这项或“-Indexes”。
(4)、IncludesNOEXEC 准许SSI,但不可使用#exec和#include功能
(5)、Includes 准许SSI
(6)、FollowSymLinks 在该目录中,服务器将跟踪符号链接。注意,即使服务器跟踪符号链接,它也不会改变用来匹配不同区域的路径名,如果在标记内设置,该选项会被忽略
(7)、SymLinksIfOwnerMatch 在该目录中仅仅跟踪本站点内的链接
(8)、ExecCGI 在该目录下准许使用CGI
③、测试
在windows下修改C:WINDOWSsystem32driversetchosts文件,添加内容为:
192.168.198.234 www.test.com
192.168.198.234 www.web.com
注意:上面的ip地址就是要访问的服务器的IP地址.
设置虚拟目录
# vi /etc/httpd/conf/httpd.conf <-- 打开配置文件
添加下面的内容:
Alias /virtual "/var/www/virtual/"
#在Indexes前,加"+"代表允许目录浏览;加"–"代表禁止目录浏览
Options -Indexes FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
#建立虚拟目录
Alias /YQWapManage "E:/YQMTKBusiness/YQWapManage/"
Options MultiViews
AllowOverride None
Order allow,deny
Allow from all
DirectoryIndex index.html
# httpd -t <-- 检查语法
Syntax OK
# service httpd restart <-- 重启服务器
也可以将虚拟目录配置成单个文件,方便日后管理
# vi /etc/httpd/conf/httpd.conf <-- 打开配置文件
在最底部加入
Include /etc/httpd/vhost/vhost.conf <-- 将配置文件包含进来
# mkdir /etc/httpd/vhost
# cat > /etc/httpd/vhost/vhost.conf
输入上面的内容后回车按ctrl+d结束内容输入
# httpd -t <-- 检查语法
Syntax OK
# service httpd restart <-- 重启服务器
在 /usr/share/mysql/目录下有多个my-开头的cnf文件,选择my-medium.cnf
把它复制到/etc目录里
# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
编辑配置文件
#vi /etc/my.cnf
修改以下配置,在原有的基础上修改,没有的选项就添加
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
default-character-set = utf8
[mysqld]
user = mysql
datadir = /www/mysql
log-error = /www/log/mysql/mysql_error.log
log-bin=/www/log/mysql/mysql-bin
expire_logs_days=7
character-set-server = utf8
--skip-external-locking
①# service mysqld stop <--停止MySql服务
②# mkdir /MySQL_Data <-- 创建存储数据库目录
③# mv /var/lib/mysql /MySQL_Data/ <--将数据移到到新目录里
④# vi /etc/my.cnf <--第一个文件
[mysqld]
#datadir=/var/lib/mysql
datadir=/MySQL_Data/mysql <--修改
#socket=/var/lib/mysql/mysql.sock
socket=/MySQL_Data/mysql/mysql.sock <--修改
⑤# vi /etc/rc.d/init.d/mysqld <--第二个文件
get_mysql_option mysqld datadir "/var/lib/mysql"
改为:
get_mysql_option mysqld datadir "/MySQL_Data/mysql"
⑥# vi /usr/bin/mysqld_safe <--第三个文件
DATADIR=/var/lib/mysql
改为:
DATADIR=/MySQL_Data/mysql
⑦# service mysqld start <-- 启动MySQL服务
⑧# ln -s /MySQL_Data/mysql/mysql.sock /var/lib/mysql/mysql.sock <-- 建立一个mysql.sock的软件连接
⑨# ps aux | grep mysql <-- 检测设置数据库目录是否正确
更改数据库目录的权限
# chown -R mysql:mysql /MySQL_Data/mysql/
若存在test目录,则进行如下设置
# chmod 700 /MySQL_Data/mysql/test/
# chmod 660 /MySQL_Data/mysql/test/*
若其它机器访问数据库端口3306时发生如下错误提示:
is not allowed to connect to this MySQL server
解决方法:
①改表法
# mysql -uroot -p <--输入帐号信息进入mysql控制台
mysql> show dtabases
mysql> use mysql
mysql> select host,user from user;
+-----------+------+
| host | user |
+-----------+------+
| 127.0.0.1 | root |
| CentOS | root |
| localhost | root |
+-----------+------+
3 rows in set (0.00 sec)
mysql> update user set host='%' where user='root';
mysql> select host,user from user;
+-----------+------+
| host | user |
+-----------+------+
| % | root |
| 127.0.0.1 | root |
| CentOS | root |
+-----------+------+
3 rows in set (0.00 sec)
mysql> flush privileges;
mysql> exit
Bye
②授权法
例如,你想myuser使用mypassword从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'10.10.40.54' IDENTIFIED BY '123456' WITH GRANT OPTION;
# vi /etc/php.ini <-- 打开配置文件
①date.timezone= 值为 PRC (去掉前面的分号)
②disable_functions=
添加以下内容(多个函数用逗号隔开):
passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,escapeshellcmd,dll,popen,disk_free_space,checkdnsrr,checkdnsrr,getservbyname,getservbyport,disk_total_space,posix_ctermid,posix_get_last_error,posix_getcwd, posix_getegid,posix_geteuid,posix_getgid, posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid, posix_getppid,posix_getpwnam,posix_getpwuid, posix_getrlimit, posix_getsid,posix_getuid,posix_isatty, posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid, posix_setpgid,posix_setsid,posix_setuid,posix_strerror,posix_times,posix_ttyname,posix_uname
(列出PHP可以禁用的函数,如果某些程序需要用到这个函数,可以删除,取消禁用)
③expose_php = On 改为 Off (禁止显示php版本的信息)
④magic_quotes_gpc=Off 改为 On (打开来防止SQL注入)
⑤short_open_tag = Off 改为 On (支持php短标签)
# vi /etc/sysconfig/iptables
添加以下内容(增加80和3306端口):
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
重启防火墙使配置生效:
# /etc/rc.d/init.d/iptables restart
查看状态:
# /etc/rc.d/init.d/iptables status
# vi /etc/selinux/config
把下面两项注释掉
#SELINUX=enforcing #注释掉
#SELINUX=targeted #注释掉
SELINUX=disabled #增加
重启系统:
#reboot
phpMyAdmin是一个网络接口,通过它可以管理你的MySQL数据库。
首先,我们使CentOS系统RPMForge软件库的phpMyAdmin,而不是官方的CentOS 6.2库:所以需要导入RPMForge的GPG密钥:
# rpm --import http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
x86_64系统:
# yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
在i386系统:
# yum install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm
安装phpmyadmin
# yum install -y phpmyadmin
更改配置文件
# vi /etc/httpd/conf.d/phpmyadmin.conf
更改如下:
Order Deny,Allow
#Deny from all
#Allow from 127.0.0.1
Allow from all
# vi cd /usr/share/phpmyadmin/config.inc.php
/* $cfg['Servers'][$i]['auth_type'] = 'cookie';*/
$cfg['Servers'][$i]['auth_type'] = 'http'; <-- 改为http身份验证
# httpd -t <-- 检查语法
Syntax OK
# service httpd restart
停止 httpd:[确定]
正在启动 httpd:[确定]
输入地址
http://ip地址/phpmyadmin/
从网上下载安装包phpMyAdmin-3.1.1-all-languages.tar.gz
将其解压到网站根目录下
# tar -zxvf phpMyAdmin-3.1.1-all-languages.tar.gz -C /var/www/html/
# cd /var/www/html/
# mv phpMyAdmin-3.1.1-all-languages.tar.gz phpmyadmin //更改文件夹名
# vi /phpmyadmin/libraries/config.default.php
修改以下内容:
$cfg['Servers'][$i]['host'] = 'localhost'; 由localhost 改为 127.0.0.1
$cfg['Servers'][$i]['auth_type'] = 'cookie'; 认证方法由 cookie 改为 http
$cfg['blowfish_secret'] = ''; 如果认证方法设置为cookie,就需要设置短语密码
yum是centos下很方便的rpm包管理工具,配置第三方软件库使你的软件库更加丰富。以下简单的讲下配置的步骤。
首先,需要安装yum-priorities插件:
yum install yum-priorities –y
该插件的作用主要是设置调用源时的优先级的,一般将官方的优先级设置为最高
编辑CentOS-Base.repo 文件,用vi编辑 ,如果不会操作,请百度vi
vi /etc/yum.repos.d/CentOS-Base.repo
在每个[]段的最后加上priority=[]字段来设置每个镜像的优先级,1为最高,99为最低。
一般的配置为: [base], [updates], [extras] … priority=1
[CentOSplus],[contrib] … priority=2
然后保存
安装epel.repo,下载地址为 http://download.fedora.redhat.com/pub/epel/6/找与自己系统版本相符的包 ,如,64位的http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/i386/epel-release-6-5.noarch.rpm 32位
rpm -ivh http://mirrors.ustc.edu.cn/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
64位
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6
vi /etc/yum.repos.d/epel.repo
设置 /etc/yum.repos.d/epel.repo 中源的级别为 priority=11(比上面高就行)。
安装rpmforge.repo,下载地址为 http://pkgs.repoforge.org/rpmforge-release/ 找与自己系统版本相符的包
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.i686.rpm 32位
wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm 64位
wget http://dag.wieers.com/rpm/packages/RPM-GPG-KEY.dag.txt
rpm -import RPM-GPG-KEY.dag.txt
或者 rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -K rpmforge-release-0.5.2-2.el6.rf.i686.rpm 32位 检查安装文件
rpm -K rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm 64位 检查安装文件
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.i686.rpm 32位 安装程序
rpm -ivh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm 64位 安装程序
vi /etc/yum.repos.d/rpmforge.repo
设置 /etc/yum.repos.d/rpmforge.repo 文件中源的级别为 priority=12(比上面高就行)。
安装rpmfusion.repo,下载地址为 http://download1.rpmfusion.or
32位安装
rpm -ivh http://download1.rpmfusion.org/free/el/updates/testing/6/i386/rpmfusion-free-release-6-0.1.noarch.rpm
rpm -ivh http://download1.rpmfusion.org/nonfree/el/updates/testing/6/i386/rpmfusion-nonfree-release-6-0.1.noarch.rpm
64位安装
rpm -ivh http://download1.rpmfusion.org/nonfree/el/updates/testing/6/x86_64/rpmfusion-nonfree-release-6-0.1.noarch.rpm
rpm -ivh http://download1.rpmfusion.org/nonfree/el/updates/testing/6/x86_64/rpmfusion-nonfree-release-6-0.1.noarch.rpm
vi /etc/yum.repos.d/rpmfusion-free-updates.repo
vi /etc/yum.repos.d/rpmfusion-free-updates-testing.repo
vi /etc/yum.repos.d/rpmfusion-nonfree-updates.repo
vi /etc/yum.repos.d/rpmfusion-nonfree-updates-testing.repo
设置 文件中源的级别为 priority=13(比上面高就行)
yum check-update
会载入yum-priorities插件