博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
源码包搭建apache(2.4.x)
阅读量:5870 次
发布时间:2019-06-19

本文共 14395 字,大约阅读时间需要 47 分钟。

              apache(源码包安装)

apache的安装  (用脚本安装下面有脚本安装的方法)
最新版本的就是变态,本来你安装了apr和apr-util包了,但就是预编译配置通不过,那就直接上源码包。
安装前的准备:
yum -y install gcc 
yum -y install gcc-c++
yum -y install openssl-devel
以为安装这些了就可以了,编译的时候出现error,基本我属于那种有警告不管,但是尼玛出现error了,木有办法了,那只有解决了。
[root@localhost /]# rpm -qa | grep apr
apr-util-ldap-1.3.9-3.el6.i686
apr-1.3.9-3.el6.i686
apr-util-1.3.9-3.el6.i686
这几个是搭建apache必须安装的,系统显示已经安装了相应的rpm包了。但是你去编译apache的时候还是可能出现错误,那不管了,直接上源码包
 
error1:
configure: error: APR not found. Please read the documentation.
 
解决error1:
tar zxvf apr-1.4.2.tar.gz -C /usr/src/
   
   cd /usr/src/apr-1.4.2
  ./configure --prefix=/usr/local/apr
  make && make install
 
error2:
configure: error: APR-util not found. Please read the documentation
 
解决error2:cd /
tar zxvf apr-util-1.3.10.tar.gz -C /usr/src/
 
  cd  /usr/src/apr-util-1.3.10
  ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
  make && make install
 
error3:
configure: error: pcre-config for libpcre not found. PCRE is required and available from http://pcre.org/
 
解决error3:
tar zxvf pcre-8.11.tar.gz -C /usr/src/
 
   cd /usr/src/pcre-8.11
   ./configure --prefix=/usr/local/pcre
   make && make install
 
最后这些都解决完了,尼玛终于没有错误了!!!!我感动啊!!
tar zxvf httpd-2.4.3.tar.gz -C /usr/src/ 
 
  cd /usr/src/httpd-2.4.3
  ./configure --prefix=/usr/local/apache2  --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-so --enable-rewrite --enable-ssl --with-ssl=/usr/lib--enable-auth-digest --enable-cgi --enable-suexec --with-suexec-caller=daemon --with-suexec-docroot=/usr/local/apache2/htdocs
 
make && make install
 
apache搭建完成后
装完成后,了解apache服务器相关的主要目录和文件
/usr/local/apache2/bin/           (httpd服务器包含的执行程序)
/usr/local/apache2/conf/          (httpd服务器包含的配置文件) 
/usr/local/apache2/htdocs/        (httpd服务器存放的网页文件的根目录)
/usr/local/apache2/logs/          (存放访问httpd服务器的日志)
/usr/local/apache2/man/           (httpd服务器的帮助手册) 
/usr/local/apache2/modules/       (存放提供给httpd服务器动态加载的模块文件)
 
开启搭建好的服务
开启服务的命令
/usr/local/apache2/bin/apachectl start    (开启服务)
/usr/local/apache2/bin/apachectl stop     (关闭服务)
/usr/local/apache2/bin/apachectl restart  (重启服务)
/usr/local/apache2/bin/apachectl -t       (检查配置文件是否出错)
 
echo "/usr/local/apache2/bin/apachectl start" >> /etc/rc.d/rc.local (服务器开机之后自动开启服务)
 
[root@localhost apache2]# /usr/local/apache2/bin/apachectl start(源码包安装需要这样才能开启服务)
AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
httpd (pid 902) already running    显示已经开启了,会出现命令的提示,解决这个问题
 
查看配置文件
 vim /usr/local/apache2/conf/httpd.conf
 
###添加这句(直接copy)
ServerName 192.168.4.184:80 
###保存退出
ServerName 192.168.4.184:80 (有域名就写域名ServerName www.abc.com:80)
在重启服务就不会提示上面的信息了。
 
[root@localhost apache2]# /usr/local/apache2/bin/apachectl start (这次开启的时候发现什么都木有)
但是服务已经开启了!!
查看一下httpd的端口状态和进程状态
[root@localhost apache2]# netstat -pant | grep httpd
tcp        0      0 :::80                   :::*                  LISTEN      1524/httpd          
[root@localhost apache2]# ps aux | grep httpd
root      1524  0.0  0.4   5272  2372 ?        Ss   02:39   0:00 /usr/local/apache2/bin/httpd -k start
daemon    1525  0.0  0.4 283004  2116 ?        Sl   02:39   0:00 /usr/local/apache2/bin/httpd -k start
daemon    1526  0.0  0.4 283004  2120 ?        Sl   02:39   0:00 /usr/local/apache2/bin/httpd -k start
daemon    1527  0.0  0.4 283004  2120 ?        Sl   02:39   0:00 /usr/local/apache2/bin/httpd -k start
root      1706  0.0  0.1   4312   728 pts/1    S+   02:41   0:00 grep httpd
(要杀死进程 killall -9 1524 1525 1526 1527)
 
每次开启服务都要这样敲入这么长的命令/usr/local/apache2/bin/apachectl start很麻烦
能不能直接向rpm包安装apache一样用service httpd start这样启动呢?
先rpm -qa | grep httpd确保系统木有rpm包安装的httpd,有就用yum -y remove httpd删除
然后cp /usr/src/httpd-2.4.3/build/rpm/httpd.init /etc/init.d/httpd  
把httpd.init(文件路径一定要正确)文件copy到服务启动脚本目录下面并改名为httpd
先修改脚本启动配置文件
vim /etc/init.d/httpd 
 
########修改一些内容
prog=$(basename $0 | sed -e 's/^[SK][0-9][0-9]//')
if [ -f /etc/sysconfig/${prog} ]; then
        . /etc/sysconfig/${prog}
fi
httpd=${HTTPD-/usr/local/apache2/bin/httpd}
prog=httpd
pidfile=${PIDFILE-/usr/local/apache2/${prog}.pid}
lockfile=${LOCKFILE-/var/lock/subsys/${prog}}
RETVAL=0
check13 () {
        CONFFILE=/usr/local/apache2/conf/httpd.conf  
########保存退出
 
然后在修改apache的配置文件
vim /usr/local/apache2/conf/httpd.conf
 
###添加这句
pidfile  "/usr/local/apache2/httpd.pid"
###然后保存退出配置文件
 
 
在试试service httpd start|stop|restart
[root@localhost init.d]# service httpd start
Starting httpd: (98)Address already in use: make_sock: could not bind to address [::]:80
(98)Address already in use: make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]
[root@localhost init.d]# service httpd stop
Stopping httpd:                                            [FAILED]
发现还是出现这样的错误,别急,在来小小的修改一下
[root@localhost rpm]# ps aux | grep httpd
root     20462  0.0  0.4   8204  2080 ?        Ss   19:59   0:00 /usr/local/apache2/bin/httpd
daemon   20464  0.0  0.3   8340  1568 ?        S    19:59   0:00 /usr/local/apache2/bin/httpd
daemon   20465  0.0  0.3   8340  1568 ?        S    19:59   0:00 /usr/local/apache2/bin/httpd
daemon   20466  0.0  0.3   8340  1568 ?        S    19:59   0:00 /usr/local/apache2/bin/httpd
daemon   20467  0.0  0.3   8340  1568 ?        S    19:59   0:00 /usr/local/apache2/bin/httpd
daemon   20468  0.0  0.3   8340  1568 ?        S    19:59   0:00 /usr/local/apache2/bin/httpd
root     20862  0.0  0.6  10912  3308 pts/2    S+   21:09   0:00 vim httpd
root     20986  0.0  0.1   4308   732 pts/3    S+   21:37   0:00 grep httpd
[root@localhost rpm]# kill -9 20462 20464 20465 20466 20467 20468(杀死这些进程)
然后在试试service httpd start|stop|restart,行则ok,不行,那就在检查检查上面的配置文件
[root@localhost rpm]# service httpd start
Starting httpd:                                            [  OK  ] 
[root@localhost rpm]# service httpd restart
Stopping httpd:                                            [  OK  ]
Starting httpd:                                            [  OK  ]
[root@localhost rpm]# 
 
有人说何必这么费劲也可以这样
cp /usr/local/apache2/bin/apachectl /etc/init.d/httpd  #复制为系统服务
vim /etc/init.d/httpd    #编辑此服务,将前三行修改为
#!/bin/bash
# chkconfig: 35 85 15
#description:Apache httpd
service httpd start
但是这样敲了之后,这个命令不会出现Starting httpd:    [  OK  ] ,不信你可以试试,这样就还需要
查看是否开启了没有netstat -pant | grep 80 有80就开启了
确保开机服务器自动启动
chkconfig --add httpd
chkconfig --level 35 httpd on
 
每次打开配置文件的时候都有很多无用的
#######为便于查看可以用这个命令清楚不需要的东西######
   cp http.conf http.conf.bak(先进行备份)
 grep -v "#" httpd.conf.bak | grep -v "^$" > httpd.conf
grep -v "#" 去掉#号
grep -v "^$" 去掉空格
##############常用的全局配置参数######################
Serverroot: 用于设置httpd服务器的根目录
Listen: 设置apache用于监听的端口号,默认为80
User: 设置运行httpd进程的用户身份
Group: 设置运行httpd进程的组身份
Serveradmin: 设置服务器管理员的e-mail地址
Servername: 设置服务器的完整主机名
Documentroot: 设置网页文档根目录
Directoryindex: 设置网站的默认首页格式
Errorlog: 错误日志的路径和文件名
LogLevel:记录日志的级别,默认为warn
Customlog: 访问日志的路径和格式类型
Pidfile: 保存服务器程序进程号(pid)的文件,默认为logs/httpd.pid
Timeout: web服务器与浏览器之间网络连接的超时秒数,默认为300秒
Keepalive: 是否使用保持连接功能:off on 
Maxkeepaliverequests: 客户端每次连接允许请求的最大文件数,默认为100个。当keepalive设置为on时才生效
Keepalivetimeout: 保持连接的超时秒数,默认为15秒
Include: 用于包含另一个配置文件的内容
###################apache的相关操作####################################
1.虚拟目录
先修改配置文件
vim /usr/local/apache2/conf/httpd.conf
###在<IfModule alias_module>模块中添加一句,然后在</IfModule>下面添加几句</Directory >
<IfModule alias_module>
     Alias    /test         "/data/web"      
</IfModule>
<Directory "/data/web">
    AllowOverride None
    Options None
    Require all granted
</Directory>
 
#######</Directory>里面写的东西配置文件里面是有模板的copy之后改动一点就ok了然后保存退出
 
然后要新建那个虚拟目录
mkdir -p /data/web
   /data目录可以是挂载到linux系统中的,所以这个目录就看你硬盘多大了
在新建的目录里面 vim index.html里面随便写一点东东就ok了
然后重启httpd服务器
访问的时候 http://ip/test(记住这里一定不要敲/直接回车)
 
 
2.虚拟主机
  a)同ip同域名不同端口
vim /usr/local/apache2/conf/httpd.conf 
修改配置文件
 
####添加这些
Listen 8001
Listen 8002
<VirtualHost 172.16.1.1:8001>
ServerAdmin  webmaster@dummy-host.example.com
DocumentRoot  /data/web/test1
ServerName    www.test.com
ErrorLog      /data/web/log/test1.err.log
CustomLog     /data/web/log/test1.acc.log common
</VirtualHost>
<VirtualHost 172.16.1.1:8002>
ServerAdmin  webmaster@dummy-host.example.com
DocumentRoot  /data/web/test2
ServerName    www.test.com
ErrorLog       /data/web/log/test2.err.log
CustomLog      /data/web/log/test2.acc.log  common
</VirtualHost>
#####保存退出
 
参数的解释:
ServerAdmin webmaster@dummy-host.example.com   
   (这个可以随便写,这个是管理员的邮箱地址)
DocumentRoot /data/web/test1  
   (这个是存放网页文件的目录)
ServerName www.test.com            
   (这个是写域名的,有自己的域名,就写自己的域名,没有域名随便写了也不要紧,因为我们用ip访问)
CustomLog  data/web/log/test1.acc.log common
   (用于设置httpd服务器访问日志文件的路径和格式类型,这个文件里面写入这你登录的记录)
ErrorLog     /data/web/log/test1.err.log
   (用于设置错误日志文件的路径和文件名(如果你设置了,那这个目录和文件必须存在,木有就新建)这个文件写入的是,你登录错误的记录)
 
新建配置文件里面指定的虚拟主机目录,因为没有,那就要新建
cd /data/web/                                                  (切换目录,在这个目录里面去新建)
mkdir test1 test2 log                          (新建两个存放网页目录的文件和一个存放日志的文件)
cd log/                                                        (切换到日志的目录文件中)
touch test1.err.log test1.acc.log  test2.err.log test2.acc.log (新建四个日志文件)
vim /data/web/test1/index.html                                 (编辑两个网页文件便于测试)
    this is test1 page
vim /data/web/test2/index.html  
    this is test2 page
 
 
访问测试 http://ip:8001 (看见this is test1 page  就ok了)
         http://ip:8002  (看见this is test2 page  就ok了)
 
b)同ip不同域名同端口
  vim /usr/local/apache2/conf/httpd.conf 
修改配置文件
 
####添加这些:wq
<VirtualHost 172.16.1.1:80>
ServerAdmin  webmaster@dummy-host.example.com
DocumentRoot  /data/web/test1
ServerName    www.test1.com
ErrorLog      /data/web/log/test1.err.log
CustomLog     /data/web/log/test1.acc.log common
</VirtualHost>
<VirtualHost 172.16.1.1:80>
ServerAdmin  webmaster@dummy-host.example.com
DocumentRoot  /data/web/test2
ServerName    www.test2.com
ErrorLog       /data/web/log/test2.err.log
CustomLog      /data/web/log/test2.acc.log  common
</VirtualHost>
#####保存退出
重启服务
 
如果临时的不能搭建dns,可以用host文件代替
vim /etc/hosts
172.16.1.1   www.test1.com
172.16.1.1  www.test2.com
   (!!!还是要新建配置文件里面指定的虚拟主机目录!!!)
访问测试 http://www.test1.com (看见this is test1 page  就ok了)
         http://www.test2.com  (看见this is test2 page  就ok了)
c)不同ip同域名同端口
 
vim /usr/local/apache2/conf/httpd.conf 
修改配置文件
 
####添加这些
<VirtualHost 172.16.1.10:80>
ServerAdmin  webmaster@dummy-host.example.com
DocumentRoot  /data/web/test1
ServerName    www.test.com
ErrorLog      /data/web/log/test1.err.log
CustomLog     /data/web/log/test1.acc.log common
</VirtualHost>
<VirtualHost 172.16.1.20:80>
ServerAdmin  webmaster@dummy-host.example.com
DocumentRoot  /data/web/test2
ServerName    www.test.com
ErrorLog       /data/web/log/test2.err.log
CustomLog      /data/web/log/test2.acc.log  common
</VirtualHost>
#####保存退出
重启服务
模拟ip出来
ifconfig eth0:0 172.16.1.10 up
ifconfig eth0:1 172.16.1.20 up
 
访问测试 http://172.16.1.10 (看见this is test1 page  就ok了)
         http://172.16.1.20 (看见this is test2 page  就ok了)
 
3.系统用户的个人主页
a)修改配置文件
vim /usr/local/apache2/conf/httpd.conf 
 
####把配置文件中的这两句前面的#去掉
LoadModule userdir_module modules/mod_userdir.so
Include conf/extra/httpd-userdir.conf  
#####保存退出,这里就采用默认的路径
b)新建用户给出密码
#################################
useradd li
useradd liuh
passwd li(li)
passwd liu(liu)
#################################
c)在li和liu用户的宿主目录中新建文件
cd /home/li
mkdir public_html
cd public_html
vim index.html(为li用户新建自己的主页)
cd /home/liu
mkdir public_html
cd public_html
vim index.html(为liu用户新建自己的主页)
chmod o+x /home/li* (为宿主目录中的用户修改权限)
d)重启服务
#################访问浏览器##################
http://ip/~li/  (其中li为用户名)
###############################################
 
 
4.做授权认证
修改配置文件
vim /usr/local/apache2/conf/httpd.conf
 
#####添加这几句(用了一个虚拟目录)
     Alias  /test     "/data/web"
<Directory "/data/web">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    AuthType basic
    AuthName "welcome test"
    AuthUserFile /usr/local/apache2/conf/httppwd
    Require user liu
</Directory>
####保存退出
 
建立网页目录和文件
mkdir -p /data/web
vim /data/web/index.html
 
建立存储认证用户账号及口令的文件
/usr/local/apache2/bin/htpasswd -c /usr/local/apache2/conf/httppwd liu
New password: 
Re-type new password:  
(添加第二个,或者多个的时候都不需要-c了)
/usr/local/apache2/conf/httppwd 这个就是AuthUserFile认证用户文件的路径文件)
 
然后重启服务
 
访问 http://ip/test
  输入用户名和密码
 
组的认证
 
修改配置文件
vim /usr/local/apache2/conf/httpd.conf
 
#####添加这几句(用了一个虚拟目录)
     Alias  /test     "/data/web"
<Directory "/data/web">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    AuthType basic
    AuthName "welcome test"
    AuthUserFile /usr/local/apache2/conf/httppwd
    AuthGroupFile /usr/local/apache2/conf/httpgrp
    Require group admin
</Directory>
####保存退出
 
建立组认证的文件
vim /usr/local/apache2/conf/httpgrp
 
###添加组里面的成员
admin:test jie(需要加入直接玩后面添加)
####然后保存退出
 
用户密码和之前建立的一样
 
然后重启服务
 
 
#######apache配置文件的一些其它参数######
# User home directories
#Include conf/extra/httpd-userdir.conf  (把这个#号去掉就可以做个人主页网址)
         这个可以自己写路径,建议路径的目录最好在conf目录下
#LoadModule userdir_module modules/mod_userdir.so (这个# 号是随着上面的一起的,这个
就是userdir的模块,这句也在配置文件中,可以找到)
 
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
这句是做虚拟主机
#########建议主配置文件内容越少越好######
 
$$$$$$$$$$$额外的补充$$$$$$$$$$$$$$$$$$$
禁止使用IP直接访问apache
1. 新建立一个默认主机,即出现在所有<VirtualHost *:80>最重要的
 
<VirtualHost *:80>
  ServerName x.x.x
  DocumentRoot /var/www/error
  RewriteEngine On
  RewriteRule   ^.*  /400.php
</VirtualHost>
 
2. 编辑文件/var/www/error/400.php, 输出以下代码:
<?php
header("HTTP/1.1 400 Bad Request");  
?>
<h1>Bad Request</h1>
 
如此,即可实现禁止直接用ip访问apache。
 
解释一下上面的原理:
1. 将对默认主机的所有请求重写向到/var/www/error/400.php
2.   利用php程序输出400状态。
 
不足之处,apache服务器必须安装php解析模块。
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$                   
 
 
 
 
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$参考脚本$$$$$$$$$$$$$$$$$$$$$
运行脚本提示:
   这个是一个脚本,运行这个脚本能够一次性成功安装完源码包搭建的apache,此脚本只供方便,我执行这个脚本是已经成功安装几遍了,此脚本运行成功,先要搭建好yum(如何搭建yum这里不在此介绍了),然后解压好所需的源码包。解压没有先后顺序,但是安装的时候有先后顺序。
tar zxvf httpd-2.4.3.tar.gz -C /usr/src/
tar zxvf apr-1.4.2.tar.gz -C /usr/src/
tar zxvf apr-util-1.3.10.tar.gz -C /usr/src/
tar zxvf pcre-8.11.tar.gz -C /usr/src/
然后在/usr/src/目录下面vim 一个文件
eg:vim httpd.sh
然后把下面的copy到httpd.sh里面保存退出在给httpd.sh添加可执行的权限
chmod +x /usr/src/httpd.sh
然后在执行脚本 /usr/src/httpd.sh
以下所有都是需要复制的内容(从#bin/bash都开始复制)
 
#bin/bash
echo "####first,use yum install this rpm####"
yum -y install gcc 
yum -y install gcc-c++
yum -y install openssl-devel
echo "###second,install httpd the dependencies###"
echo "#####welcome to apr install#####"
cd /usr/src/apr-1.4.2
./configure --prefix=/usr/local/apr && make && make install
echo "#####apr is installed#####"
 
echo "#####welcome to apr-util install#####"
cd  /usr/src/apr-util-1.3.10
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config && make && make install
echo "#####apr-util is installed#####"
 
echo "#####welcome to pcre install#####"
cd /usr/src/pcre-8.11
./configure --prefix=/usr/local/pcre && make && make install
echo "#####prce is installed#####"
 
echo "###now,install httpd###"
echo "#####welcome to httpd install######"
cd /usr/src/httpd-2.4.3
./configure --prefix=/usr/local/apache2  --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-so --enable-rewrite --enable-ssl --with-ssl=/usr/lib--enable-auth-digest --enable-cgi --enable-suexec --with-suexec-caller=daemon --with-suexec-docroot=/usr/local/apache2/htdocs && make && make install
echo "#####httpd is installed#####"
echo "####please check httpd is ok,if no error above before,please start httpd #####"
本文转自 jie783213507 51CTO博客,原文链接:http://blog.51cto.com/litaotao/1186912,如需转载请自行联系原作者
你可能感兴趣的文章
(CF#257)B. Jzzhu and Sequences
查看>>
nodejs之处理GET请求
查看>>
Android:如何从堆栈中还原ProGuard混淆后的代码
查看>>
SpringMVC中获得HttpRequest对象的方法
查看>>
Hadoop组件之-HDFS(HA实现细节)
查看>>
WPF的ControlTemplate和DataTemplate简介
查看>>
git代码提交方式
查看>>
怎样搭建本地svn服务器环境-轻松掌握版本管理
查看>>
装饰者模式
查看>>
Bash Shell 注释多行的几种方法(转)
查看>>
linux性能优化常用命令
查看>>
如何停止CSS3的动画?
查看>>
淘宝轮播
查看>>
typeid详解
查看>>
[Angularjs]ng-show和ng-hide
查看>>
Visual Studio 2015正式企业(Enterprise)版
查看>>
299. Bulls and Cows
查看>>
【iCore3 双核心板_FPGA】实验二十三:使用JTAG UART终端打印信息
查看>>
Web.xml详解(转)
查看>>
敏感性、特异性、假阳性、假阴性(sensitivity and specificity)
查看>>