存档

文章标签 ‘apache’

CentOs5.5+Apache2.2.17+MySQL5.5.8+PHP5.3.5环境搭建

2011年3月14日 1 条评论

Linux + Apache + MySQL + PHP环境搭建

友情链接:centos5.5+nginx0.8.54+mysql5.5.8+php5.3.5 最新详细安装手册

             搭建环境:CentOs 5.5 +Apache 2.2.17+MySQL5.58+PHP5.35,使用编译安装,关闭防火墙、selinux
所须软件下载:

Apache(httpd)
www.apache.org
PHP
www.php.net
CMAKE
http://www.cmake.org/files/v2.8/cmake-2.8.3.tar.gz

假定安装包都在/tmp目录。

1.使用 yum 程序安装所需开发包

不多讲出错的问题,安装了这些库文件,基本不会有出错信息了。

2.安装MySQL 5.5.8
Mysql 5.5.8需要cmake编译工具

①安装cmake

②编译安装MySQL
先检查是否安装了MySQL

③配置MySQL
添加mysql用户,如果之前安装过mysql已经存在mysql用户,掠过此步

复制mysql配置文件:

生成mysql用户数据库和表文件:

把mysql加入到系统服务中

3.安装配置Apache
1.编译安装Apache

注意:./configure –help可以查看参数,根据实际需要配置。这里的configure后面跟的目录参数,最后不要跟/,否则有的地方目录会出现//的子目录问题。
# echo $?
显示为:0,表示编译过程中没有错误,显示其它都有错 这一步后面的编译过程都会用到,如果在这出错了,就不要MAKE了。得查找原因。

#make
#make install

2.设置Apache自启动

然后

4.编译安装PHP
PHP5.3.5的bug,需要安装 autoconf为2.13版本:

php 5.3.0 在默认状态下,已经开始支持 fastcgi了,不用再费劲再写配置参数了,如果写了,会提示错误信息,这个错误也可以忽略。
# make
提示出错
/usr/local/mysql/include/mysql/my_sys.h:964:27: error: mysql/psi/psi.h: No such file or directory
/usr/local/mysql/include/mysql/m_string.h:219:26: error: mysql/plugin.h: No such file or directory
/usr/local/mysql/include/plugin.h:51:28: 错误:mysql/services.h:没有那个文件或目录
/usr/local/mysql/include/services.h:21:39: 错误:mysql/service_my_snprintf.h:没有那个文件或目录
/usr/local/mysql/include/services.h:22:37: 错误:mysql/service_thd_alloc.h:没有那个文件或目录
/usr/local/mysql/include/services.h:23:36: 错误:mysql/service_thd_wait.h:没有那个文件或目录
/usr/local/mysql/include/services.h:24:44: 错误:mysql/service_thread_scheduler.h:没有那个文件或目录
修复MySQL的BUG
# mkdir /usr/local/mysql/include/mysql
# ln -s /usr/local/mysql/include/* /usr/local/mysql/include/mysql
# vi /usr/local/mysql/include/my_sys.h
找到
#include
修改为
#include  

# vi /usr/local/mysql/include/m_string.h
找到
#include < mysql/plugin.h>
修改为
#include # vi /usr/local/mysql/include/plugin.h
找到
#include
修改为
#include
# make clean
# make
# make install

# cp /tmp/php-5.3.5/php.ini-production /usr/local/php/etc/php.ini
# vi /usr/local/apache2/conf/httpd.conf
找到,在下面添加两行
AddHandler php5-script .php
AddType text/html .php

# vi /usr/local/apache2/htdocs/test.php
输入

在ie输入主机ip/test.php能看到phpinfo信息。

分类: webapp 标签: , , ,

apache Internal Server Error 解决方法

2011年3月11日 没有评论

今天配置nagios的时候遇到了一些麻烦.前面的步骤都一切顺利,但是修改好所有的cfg后,点击左边的菜单时总是提示Internal Server Error错误.错误如下:
Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.
Please contact the server administrator, root@localhost and inform them of the time the error occurred, and anything you might have done that may have caused the error.
More information about this error may be available in the server error log.

——————————————————————————–
Apache/2.0.52 (CentOS) Server at mail1.chinabank.com.cn Port 80
 
红色的提示告诉我们这个错误来自apache.检查apache的错误日志.
vi /var/log/httpd/error_log
 
Premature end of script headers: status.cgi, referer: [url]http://mail1.chinabank.com.cn/nagios/side.html[/url]

大意是不完整的HTTP头.不太懂这个什么意思.重新编译了一个apache在/usr/local/apache/然后停掉原来的httpd,启动新编译的apache,发现nagios的页面可以正常显示,看来是系统自带的apache的配置有问题.google之,网上的解释是apache启用了suexec的功能.对CGI的执行路径进行了限制.那么检查一下本机的apache是不是打开了suexec功能呢.
 
[root@mail2 ~]# httpd -V
Server version: Apache/2.0.52
Server built:   Jul 14 2007 11:53:18
Server’s Module Magic Number: 20020903:9
Architecture:   32-bit
Server compiled with….
 -D APACHE_MPM_DIR=”server/mpm/prefork”
 -D APR_HAS_SENDFILE
 -D APR_HAS_MMAP
 -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
 -D APR_USE_SYSVSEM_SERIALIZE
 -D APR_USE_PTHREAD_SERIALIZE
 -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
 -D APR_HAS_OTHER_CHILD
 -D AP_HAVE_RELIABLE_PIPED_LOGS
 -D HTTPD_ROOT=”/etc/httpd”
 -D SUEXEC_BIN=”/usr/sbin/suexec”
 -D DEFAULT_PIDLOG=”logs/httpd.pid”
 -D DEFAULT_SCOREBOARD=”logs/apache_runtime_status”
 -D DEFAULT_LOCKFILE=”logs/accept.lock”
 -D DEFAULT_ERRORLOG=”logs/error_log”
 -D AP_TYPES_CONFIG_FILE=”conf/mime.types”
 -D SERVER_CONFIG_FILE=”conf/httpd.conf”

看来是启用了suexec.
运行suexec -V
可以看到
[root@mail2 nagios]# suexec -V
 -D AP_DOC_ROOT=”/var/www”
 -D AP_GID_MIN=100
 -D AP_HTTPD_USER=”apache”
 -D AP_LOG_EXEC=”/var/log/httpd/suexec.log”
 -D AP_SAFE_PATH=”/usr/local/bin:/usr/bin:/bin”
 -D AP_UID_MIN=500
 -D AP_USERDIR_SUFFIX=”public_html”

看来cgi程序只能在/var/www目录下执行.打开/var/log/httpd/suexec.log
command not in docroot (/usr/local/nagios/sbin/status.cgi)
因为我的nagios默认安装在/usr/local/nagios
所以这个cgi不允许被执行.
 
解决办法.把nagios安装到/var/www/nagios就可以了
之前我尝试过编译nagios的时候指定–with-cgidir=/var/www/cgi-bin但是发现编译好的nagios的sbin依然在/usr/local/nagios目录下.
 
编译的时候指定–prefix=/var/www/nagios,其他编译安装的选项不变.
 
如果不想重新编译,也可以把原来安装到/usr/local目录下的
nagios移动到/var/www目录下.再修改相关的配置文件.这个工程比较大.建议还是重新编译.nagios目录下的etc目录里面的所有cfg的路径都要改.可以用vi的替换功能.
编译好以后.重启nagios和apache(每次进行某服务的配置文件改动后,都重启该服务,使修改生效)
再次刷新nagios的页面.还是一样的错误.
查看/var/log/httpd/suexec.log
 directory is writable by others: (/var/www/nagios/sbin)
目录不能有写权限,修改如下:
chmod -R 755 /var/www/nagios/sbin
再刷新页面,日志中又出现
 target uid/gid (1000/1000) mismatch with directory (1001/1001) or program (1001/1001)
apache的运行用户和nagios的sbin目录的属主不匹配.
chown -R vuser.vgroup /var/www/nagios/sbin
现在好了
 
如果不修改sbin的属主,也可以切换apache的运行用户.在httpd.conf中添加如下内容(添加红色部分)
<VirtualHost *:80>
SuexecUserGroup nagios nagios
ScriptAlias /nagios/cgi-bin “/var/www/nagios/sbin”
<Directory “/var/www/nagios/sbin”>
#  SSLRequireSSL
   Options ExecCGI
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   AuthName “Nagios Access”
   AuthType Basic
   AuthUserFile /var/www/nagios/etc/htpasswd.users
   Require valid-user
</Directory>
Alias /nagios “/var/www/nagios/share”
<Directory “/var/www/nagios/share”>
#  SSLRequireSSL
   Options None
   AllowOverride None
   Order allow,deny
   Allow from all
#  Order deny,allow
#  Deny from all
#  Allow from 127.0.0.1
   AuthName “Nagios Access”
   AuthType Basic
   AuthUserFile /var/www/nagios/etc/htpasswd.users
   Require valid-user
</Directory>
</VirtualHost>

这里一定要用virtualhost定义一个虚拟主机,否则SuexecUserGroup nagios nagios
这条语句不起作用
然后我们重启apache,呵呵,总算可以访问nagios的监控界面了
接下来的工作就是完善nagios的监控功能.
 
总结:遇到问题后.首先应该分析是什么问题,然后查找对应的日志,从日志中寻找问题的所在,对于不能理解的日志内容,可以google上查找答案.但是最后的解决方案还是得自己摸索.

分类: webapp 标签: ,

Apache的suexec特性介绍

2011年3月11日 没有评论
一、简介
suEXEC特性使得Apache可以使用与调用web服务器的用户不同的用户身份来运行CGI和SSI程序。而通常情况下,CGI或者SSI程序执行时使用和web服务器相同的用户身份。
正确运用该特性,可以减少很多因为提供用户执行私有CGI或者SSI程序所带来的安全风险。但如果配置不当的话,则可能引起很多问题,使你的计算机产生更多的安全漏洞。如果你对管理 setuid root 程序以及可能导致的安全问题不熟悉的话,我们强烈建议你不要使用suEXEC。 阅读全文…
分类: webapp 标签: ,