centos 5.5 +apache2.2.4+mysql5.1.47+php5.3.2-latest
请从各自的官方下载 PHP官方有发布新的5.3.2在centos5.5的gcc环境下编译会错误,所以选择比较稳定的5.3.2-latest版本
1.yum update 检查系统更新
出现Existing lock /var/run/yum.pid: another copy is running.
[root@localhost ~]# rm -f /var/run/yum.pid
[root@localhost ~]# /etc/init.d/yum-updatesd stop
如果出现Could not retrieve mirrorlist http://mirrorlist.centos.org/这个问题
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo_save
wget http://docs.linuxtone.org/soft/lemp/CentOS-Base.repo
2.yum install gcc gcc-c++ 软件编译环境
3.yum erase httpd 卸载系统自带的httpd (apache2.2.3)
4.yum install zlib-devel libtool ncurses-devel libxml2-devel
(zlib-devel 安装apache需要,否则出错 .libtool安装mysql时候需要.同时附带了autoconf automake imake 编译mysql 5.1.47时候会出错 需要autoconf重新配置一下)
5.编译apache2.2.4
tar zxvf httpd-2.2.4.tar.gz
cd http-2.2.4
./configure --prefix=/usr/local/apache2 --enable-rewrite=shared --enable-track-vars --enable-cgi --enable-so --enable-mods-shared=all --with-config-file-path=/usr/local/apache2/conf --with-mpm=worker --enable-speling
make
make install
make clean
6.编译httpd.conf . 去掉#ServerName xxxxxx.com 前面的# 没有ServerName启动httpd服务会出错. 给LoadModule unique_id_module modules/mod_unique_id.so前面加上注释以取消加载.默认的centos5.5加载这个会启动不了httpd .
7.运行 grep -v “#” /usr/local/apache2/bin/apachectl > /etc/init.d/httpd
8.运行 chmod +x /etc/init.d/httpd (赋予httpd可以运行的权限)
9.编译/etc/init.d/httpd 在起始位置添加

#!/bin/sh
# chkconfig: 8854 61 61
# description: Apache is a World Wide Web server.
10.运行 chkconfig --add httpd
chkconfig --level 345 httpd on
11.编译mysql 5.1.47
建议rpm -qa | grep mysql检查一下系统中是否有不同版本的MySQL存在.
如果有旧版本的话就rpm -e mysql-......进行删除.
注意,可能会有2个包的相互依存性导致无法删除,可以用--nodeps参数强制删除. eg :rpm -e mysql --nodeps
groupadd mysql
useradd -g mysql mysql
在源码文件夹目录运行
tar zxvf mysql-5.1.47.tar.gz
cd mysql-5.1.47
autoreconf --force --install
./configure --prefix=/usr/local/mysql --with-charset=utf8 --with-extra-charsets=all --enable-thread-safe-client --enable-assembler --with-readline --with-big-tables --with-plugins=all --with-tcp-port=3310 --with-unix-socket-path=/var/tmp/mysql.sock --with-mysqld-ldflags=-all-static --with-client-ldflags=-all-static
make
make install
make clean
以下命令在mysql安装目录下运行

cd /usr/local/mysql
cp /usr/local/mysql/share/mysql/my-medium.cnf /etc/my.cnf
cp /usr/local/mysql/share/mysql/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chown -R mysql .
chgrp -R mysql .
//scripts/mysql_install_db –user=mysql此处命令错误,用下面的命令执行过去
初始化数据库
/usr/local/mysql/bin/mysql_install_db --user=mysql

#更改数据库存储文件夹的所有者及所有组
 cd /usr/local/mysql
 chown -R mysql:mysql var/
 #更改数据库root用户密码
 /usr/local/mysql/bin/mysql -uroot
 >grant all on *.* to root@localhost identified by 'password';
 >flush privileges;

chown -R root .
chown -R mysql var
调试:
 #创建apache用户‘组
 groupadd  -g 48 apache
 useradd -u 48 -g apache -d /usr/local/apache -s /sbin/nologin apache
 #更改apache目录所属组和用户
 cd /usr/local/
 chown apache:apache apache
 #配置cronolog
 修改httpd.conf配置文件
 CustomLog"|/usr/local/cronolog/sbin/cronolog /opt/logs/access_log.%Y-%m-%d" combined
#apache虚拟机配置举例
 <VirtualHost *:80>
 ServerAdmin xx@mtv.com
 DocumentRoot /opt/webroot
 ServerName www.mtv.com
 ErrorLog /opt/logs/www.mtv.com-error_log
 CustomLog "|/usr/local/cronolog/sbin/cronolog /opt/logs/www.mtv.com-access_log.%Y-%m-%d" combined
 </VirtualHost>

12.编译安装php-5.3.2 需要先安装如下包

curl-7.16.1.tar.gz freetype-2.3.12.tar.gz jpegsrc.v8b.tar.gz libpng-1.4.2.tar.gz gd-2.0.35.tar.gz libmcrypt-2.5.8.tar.gz mhash-0.9.9.9.tar.gz mcrypt-2.6.8.tar.gz

(1)编译libpng-1.4.2.tar.gz
tar -zvxf libpng-1.4.2.tar.gz
 cd libpng-1.4.2
/sbin/ldconfig
./configure --prefix=/usr/local/libpng

make
make install

(2)安装Curl-7.16.1库
这个一般不用安装
tar -zvxf curl-7.16.1.tar.gz
cd curl-7.16.1
 mkdir -p /usr/local/curl
 ./configure --prefix=/usr/local/curl
 make
 make install

(3)安装 freetype
tar -zvxf freetype-2.3.12.tar.gz
cd freetype-2.3.12
./configure --prefix=/usr/local/module/freetype
make
make install

(4)安装 jpeg8
建立目录:
 mkdir -p /usr/local/module/jpeg8
 mkdir -p /usr/local/module/jpeg8/bin
 mkdir -p /usr/local/module/jpeg8/lib
 mkdir -p /usr/local/module/jpeg8/include
 mkdir -p /usr/local/module/jpeg8/man
 mkdir -p /usr/local/module/jpeg8/man1
 mkdir -p /usr/local/module/jpeg8/man/man1
 tar -zvxf jpegsrc.v8b.tar.gz
cd jpeg-8b
./configure --prefix=/usr/local/module/jpeg8 --enable-shared --enable-static
makecd
make install
* jpeg8安装文件中没有写创建目录的命令

(5)安装libmcrypt-2.5.8.tar.gz
tar zxvf libmcrypt-2.5.8.tar.gz
cd libmcrypt-2.5.8/
./configure
make
make install

/sbin/ldconfig
cd libltdl/
./configure --enable-ltdl-install
make
make install
cd ../../

(6)安装mhash-0.9.9.9.tar.gz
tar zxvf mhash-0.9.9.9.tar.gz
cd mhash-0.9.9.9/
./configure
make
make install
cd ../
ln -s /usr/local/lib/libmcrypt.la /usr/lib/libmcrypt.la
ln -s /usr/local/lib/libmcrypt.so /usr/lib/libmcrypt.so
ln -s /usr/local/lib/libmcrypt.so.4 /usr/lib/libmcrypt.so.4
ln -s /usr/local/lib/libmcrypt.so.4.4.8 /usr/lib/libmcrypt.so.4.4.8
ln -s /usr/local/lib/libmhash.a /usr/lib/libmhash.a
ln -s /usr/local/lib/libmhash.la /usr/lib/libmhash.la
ln -s /usr/local/lib/libmhash.so /usr/lib/libmhash.so
ln -s /usr/local/lib/libmhash.so.2 /usr/lib/libmhash.so.2
ln -s /usr/local/lib/libmhash.so.2.0.1 /usr/lib/libmhash.so.2.0.1

(7)安装 mcrypt-2.6.8.tar.gz
tar zxvf mcrypt-2.6.8.tar.gz
cd mcrypt-2.6.8/
/sbin/ldconfig
./configure
make
make install
cd ../
编译安装 mcrypt-2.6.8.tar.gz 需要指定LD_LIBRARY_PATH路径
LD_LIBRARY_PATH=/usr/local/lib ./configure
(8)安装gd-2.0.35.tar.gz
tar zxvf gd-2.0.35.tar.gz
cd gd
./configure --with-png=/usr/local/lib --with-freetype=/usr/local/module/freetype --with-jpeg=/usr/local/module/jpeg8 --enable-m4_pattern_allow
make
make install
cp gd.h  /usr/local/lib/  #如果没有copy这一步,安装php时会报错:
      #configure: error: Unable to find gd.h anywhere under /usr/local/lib
安装GD库错误解决方法 configure.ac:64: error: possibly undefined macro: AM_ICONV

http://www.gnu.org/software/gettext/下载了gettext-0.17.tar.gz
cp /usr/lib/libattr.* /lib/ (这个在转载的文章里没说,是因为make的时候报错说没有libattr.la这个文件,所以要复制过去)
tar xzf gettext-0.17.tar.gz
cd gettext-0.17
./configure
make
make install

编译PHP时报错:configure: error: libpng.(a|so) not found.
locate libpng.so

解决办法:

     #ln -sf libpng.so.3.18.0 libpng.so
cp /usr/lib/libpng.so.3 /usr/local/lib/linpng.so.3

编译php开始

./configure --prefix=/usr/local/php5 --with-gd=/usr/local/lib  --with-jpeg-dir=/usr/local/module/jpeg8 --with-zlib --with-png-dir=/usr/local/lib --with-freetype-dir=/usr/local/module/freetype --with-mysql=/usr/local/mysql --with-pdo-mysql=/usr/local/mysql --with-iconv --enable-mbstring --with-pear --with-apxs2=/usr/local/apache2/bin/apxs --with-libxml-dir=/usr/lib --with-curl=/usr/local/curl --with-mcrypt=/usr/local/lib --with-mhash=/usr/local/lib --with-config-file-path=/etc --enable-zip --with-config-file-path=/usr/local/php5/etc
make
make install
make clean
由于版本更新,这些文件有了新的命名:
php.ini-production对应于php.ini-recommended
php.ini-development对应于php.ini-dist
cp php.ini-development /usr/local/php5/etc/php.ini

配置/usr/local/php5/etc/php.ini
去掉
extension=php_gd
extension=php_mysql.dll
extension=php_mysqli.dll
前面的;
13.编译httpd.conf
 # vi /usr/local/apache2/conf/httpd.conf
 要改的有如下几处:
 找到LoadModule php5_module modules/libphp5.so
 前面的#号去掉(默认已去掉注释)
 #AddType application/x-gzip .gz .tgz
 下加二行
 AddType application/x-httpd-php .php
 AddType application/x-httpd-php-source .phps
 还有找到DirectoryIndex index.html 
 加上 index.php 让它把index.php做为默认页
如果启用了SELinux的话还需要执行如下命令
setenforce 0
chcon -t texrel_shlib_t /usr/local/apache2/modules/libphp5.so
service httpd restart
setenforce 1

重新启动apache服务器
service httpd restart

*PHP提示这样的警告:
Warning: date() [function.date]: It is not safe to rely on the system’s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected ‘UTC’ for ’8.0/no DST’ instead in D:\htdocs\index.php on line 5

解决方法:这是因为时区的问题,在php.ini找到date.timezone,修改为date.timezone = PRC,并将前面的分号注释去掉,重启Apache即可。

14安装phpmyadmin
官方下载(不要最新版本,下phpMyAdmin 2.11.9.5就行了,3.1以上需php 5.2以上),上传到你的网站目录下,然后进行配置。只需几步即可搞定。
I. config.sample.inc.php更名为config.inc.php;
II. 打开config.inc.php文件,进行以下修改;
// $cfg['Servers'][$i]['controluser'] = ‘pma’;
// $cfg['Servers'][$i]['controlpass'] = ‘pmapass’;
// $cfg['Servers'][$i]['pmadb'] = ‘phpmyadmin’;
// $cfg['Servers'][$i]['bookmarktable'] = ‘pma_bookmark’;
// $cfg['Servers'][$i]['relation'] = ‘pma_relation’;
// $cfg['Servers'][$i]['table_info'] = ‘pma_table_info’;
// $cfg['Servers'][$i]['table_coords'] = ‘pma_table_coords’;
// $cfg['Servers'][$i]['pdf_pages'] = ‘pma_pdf_pages’;
// $cfg['Servers'][$i]['column_info'] = ‘pma_column_info’;
// $cfg['Servers'][$i]['history'] = ‘pma_history’;
// $cfg['Servers'][$i]['designer_coords'] = ‘pma_designer_coords’;
去掉每行前面的//;
II.$cfg['blowfish_secret'] = ”; |修改为| $cfg['blowfish_secret'] = ‘http’;
IV.$cfg['Servers'][$i]['controluser'] = ‘pma’; |把’pma’修改为你的帐号|$cfg['Servers'][$i]['controlpass'] = ‘pmapass’; |把’pmapass设置为你的mysql登录密码|
V. $cfg['blowfish_secret'] = ”; | 添加短语密码例如:$cfg['blowfish_secret'] = ‘onohot’;

15安装Zend Optimizer
#安装Zend Optimizer: Zend Optimizer(以下简称ZO)用优化代码的方法来提高PHP 4.0应用程序的执行速度。实现的原理是对那些在被最终执行之前由运行编译器(Run-Time Compiler)产生的代码进行优化。一般情况下,执行使用ZO的PHP程序比不使用的要快40%到100%
 tar -zxvf ZendOptimizer-3.0.1-linux-glibc21-i386.tar.gz
 cd ZendOptimizer-3.0.1-linux-glibc21-i386
./install-tty
Please specify the location for installing Zen Optimizer:
/usr/local/Zend
Enter the location of your php.ini file
/etc/php5/apache2
Are you using Apache Web server?
<Yes>
Specify the full path to the Apache control utility (apachectl)
/usr/sbin/apache2ctl
<OK>
上述工作完成后,会有提示问你是否要重新启动Web server,当然是回答Yes。
接下来 会有几个提示…
Please specify the location for installingzend Optimizer:
/usr/local/Zend
Enter the location of your php.ini file:
/etc/php5/apache2(这个路径不行的话,通过命令:# find / -name php.ini,可以找到你本机的路径,然后填进去)
Specify the full path to the Apachecontrol utility(apachectl):
/usr/sbin/apache2ctl
Installation couldn’ detect the location of Apache executable. Pleaes specify the full path to the Apache binary (httpd):
/etc/init.d/apach2
Please specify the full path to the Apache configuration file (httpd.conf):
/etc/init.d/apach2
至此zendoptimizer程序安装完毕。
然后打开PHP.INI 在最后面加上以下内容(如果打开PHP.IN发现已经有了就不需要在添加了)
php 5.3的暂时不被支持

注意: 在配置完整个架构后,将服务所需要的端口在防火墙出打开。

ftp服务
[root@localhost ~]# rpm -qa | grep vsftpd            ...........查看是否已经安装了vsftpd软件
如果没有
yum install vsftpd
本机是已经安装
vsftpd-2.0.5-16.el5_5.1                  ..........................已经安装了vsftpd-2.0.5-16.el5_4.1
[root@localhost ~]#
启动vsftpd服务:
[root@localhost ~]# service vsftpd start
为 vsftpd 启动 vsftpd:                                    [确定]
#chkconfig --level 35 vsftpd on 让vsftpd开机启动


通过配置文件配置vsftpd服务器,配置vsftpd服务器主要是通过修改/etc/vsftpd/vsftpd.conf主配置文件实现。Vsftpd的配置文件及其描述如下。

/etc/vsftpd/vsftpd.conf  Vsftpd的主配置文件
/etc/vsftpd/ftpusers     阻止访问FTP服务器的用户列表
/etc/vsftpd/user_list    控制访问FTP服务器的用户列表,可以是允许,也可以是拒绝,需要由主配置文件中的userlist_deny参数来决定

1)、anonymous_enable=YES .............这个参数用于设置是否允许匿名用户访问FTP服务器,可选选项为yes和no。
2)、local_enable=YES .............这个参数用于设置是否允许本地用户访问FTP服务器,可选选项为yes和no。
3)、write_enable=YES ................这个参数用于设置是否允许匿名用户向FTP服务器进行写入的操作,可选选项为yes和no。
4)、local_umask=022 ...............这个参数用于设置是本地用户在FTP服务器上创建的文件的默认权限值(默认为077)。
5)、anon_upload_enable=YES ............这个参数用于设置是否允许匿名用户上传文件的权限,可选选项为yes和no。
6)、anon_mkdir_write_enable=YES     ..............这个参数用于设置是否允许匿名用户创建目录,可选选项为yes和no。

vsftp规划

ftp的权限是和目录的权限是结合在一起的,所以要想达到想要的效果,必须做好规划。


案例1:
要求:有1个pub目录可以用来匿名上传,匿名删除(相当于共享文件夹),但是也能匿名访问其他目录;
local用户拥有/var/ftp/下的所有的权限,包括新建、删除目录、文件等。

规划: 新建管理组ftpmanager和一批本地用户(ftpuser, ....),这些本地用户属于ftpmanager组,同时也属于ftp组,而ftpmanager组对/var/ftp/目录拥有所有权限(除了子目录pub外);
在/var/ftp目录下新建pub目录,ftp组对pub目录拥有所有权限。


操作

新建一个组ftpmanager和一批local用户
#groupadd ftpmanager
#useradd -g ftpmanager -G ftp -s /sbin/nolog ftpuser

把/var/ftp的目录的所有权赋给ftpuser和组ftpmanager
#chown -R ftpuser.ftpmanager /var/ftp
#chmod 775 -R /var/ftp


我们为匿名用户创建一个目录pub
#cd /var/ftp
#mkdir pub
#chown -R ftp.ftp /var/ftp/pub
#chmod 775 /var/ftp/pub


配置vsftpd

修改配置文件/etc/vsftpd/vsftpd.conf
让匿名用户访问并上传,我们
anonymous_enable=YES
anon_umask=002 //上传的东西本组拥有所有的权限,以便于删除
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=yes

本地用户创建文件的权限
local_umask=002 //同组的人拥有所有的权限

最后修改
userlist_enable=yes
userlist_deny=yes

local_root=/var/ftp //把local用户限制到/var/ftp目录下

说明
/usr/sbin/adduser -d /opt/test_ftp -g ftp -s /sbin/nologin test
使用命令(adduser)添加test用户,不能登录系统(-s /sbin/nologin),自己的文件夹在(-d /opt/test_ftp)),属于组ftp(-g ftp)
然后你需要为它设置ftp登录密码 passwd test

passwd test
Changing password for user test.
New UNIX password:
Changing password for user test.New UNIX password:
注意:这里的密码要求为字母和数字的组合才可以,如果不符合密码验证机制的话就修改不成功,
会有各种报错,“BAD PASSWORD: it's WAY too short”,这是报密码太短,不符合/etc/login.defs的设置,
“BAD PASSWORD: it is based on your username”,这是密码与帐号不能同名,这是不符合/etc/pam.d/passwd的设置。
“BAD PASSWORD: it is based on a dictionary word”这是因为出现了字典里的字符串,如果你英文与数字组合使用,就不会报错。


我们在/etc/vsftpd/vsftpd.conf中做如下CentOS FTP服务配置:(复杂方案)
anonymous_enable=NO 设定不允许匿名访问
local_enable=YES 设定本地用户可以访问。注:如使用虚拟宿主用户,在该项目设定为NO的情况下所有虚拟用户将无法访问。
chroot_list_enable=YES 使用户不能离开主目录
xferlog_file=/var/log/vsftpd.log 设定vsftpd的服务日志保存路径。注意,该文件默认不存在。必须要手动touch出来
ascii_upload_enable=YES
ascii_download_enable=YES 设定支持ASCII模式的上传和下载功能。
pam_service_name=vsftpd PAM认证文件名。PAM将根据/etc/pam.d/vsftpd进行认证
以下这些是关于Vsftpd虚拟用户支持的重要CentOS FTP服务配置项目。
默认vsftpd.conf中不包含这些设定项目,需要自己手动添加CentOS FTP服务配置。

guest_enable=YES 设定启用虚拟用户功能。
guest_username=ftp 指定虚拟用户的宿主用户。-CentOS中已经有内置的ftp用户了
user_config_dir=/etc/vsftpd/vuser_conf 设定虚拟用户个人vsftp的CentOS FTP服务文件存放路径。

存放虚拟用户个性的CentOS FTP服务文件(配置文件名=虚拟用户名)
2)创建chroot list,将用户ftp加入其中:

touch /etc/vsftpd/chroot_list
echo test >> /etc/vsftpd/chroot_list

3)进行认证(可以不认证):
首先,安装Berkeley DB工具,很多人找不到db_load的问题就是没有安装这个包。

yum install db4 db4-utils

然后,创建用户密码文本/etc/vsftpd/vuser_passwd.txt ,注意奇行是用户名,偶行是密码
ftpuser1
ftppass1
ftpuser2
ftppass2
接着,.生成虚拟用户认证的db文件

db_load -T -t hash -f /etc/vsftpd/vuser_passwd.txt /etc/vsftpd/vuser_passwd.db

随后,编辑认证文件/etc/pam.d/vsftpd,全部注释掉原来语句
再增加以下两句

auth required pam_userdb.so db=/etc/vsftpd/vuser_passwd
account required pam_userdb.so db=/etc/vsftpd/vuser_passwd

最后,创建虚拟用户个性CentOS FTP服务文件

mkdir /etc/vsftpd/vuser_conf/
vi /etc/vsftpd/vuser_conf/ftpuser1

内容如下:

local_root=/opt/var/ftp1 虚拟用户的根目录(根据实际修改)
write_enable=YES 可写
anon_umask=022 掩码
anon_world_readable_only=NO
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

-------------------------------------------------------------------------------------------------------------------------
我在虚拟机中安装了rhel 5 虚拟机使用NAT的方式
在rhel中安装了APACHE 并且使用 http://127.0.0.1可以正常访问
通过ifconfig查到IP地址是 192.168.254.128
我能在WINDOWS中PING通192.168.254.128 并且使用SecureCRT也能在连上虚拟机中的rhel
但是我在主机上不能通过 http://192.168.254.128 来访问虚拟机中的Web服务器
找资料找了很久,综合了很多方法,终于可以在windows访问linux虚拟机的web服务了,现在贴出来分享一下
原因分析:linux的问题、VMware的问题、windows的问题
linux的问题:可能不允许访问80端口,防火墙不允许
一:linux的问题解决方法:
1、1
  iptables -F
  iptables -P INPUT ACCEPT(设置默认允许规则)
1.2、设置linux防火墙
   1.2.1 在 /etc/sysconfig/iptables 添加
       -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
       这样就允许了80端口的访问
   1.2.2 在linux中将web服务添加进入信任的服务中
       系统->管理->安全级别和防火墙->防火墙选项->将www(http)打钩
二:VMware的问题:是否在端口映射上出问题
2.1、设置VMware,端口映射
对,要把80端口打开,还要在VMware的Edit->Virtual Network Editor->NAT(选择VMnet8)->Edit->Port Forwarding中添加映射
host port:80,virtual machine IP address:192.168.254.128,Port:80
三、windows问题:是否windows防火墙问题
4.1、windows主机上设置防火墙
window下进入控制面板->windows防火墙->高级->设置VMware Network Adapter VMnet8->Web 服务器(HTTP)->将虚拟机的ip加入:192.168.254.128