ezeke 发表于 2018-11-24 11:51:20

源码包搭建apache(2.4.x)

  apache(源码包安装)
apache的安装(用脚本安装下面有脚本安装的方法)
最新版本的就是变态,本来你安装了apr和apr-util包了,但就是预编译配置通不过,那就直接上源码包。
安装前的准备:
yum -y install gcc
yum -y install gcc-c++
yum -y install openssl-devel
以为安装这些了就可以了,编译的时候出现error,基本我属于那种有警告不管,但是尼玛出现error了,木有办法了,那只有解决了。
# 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 (服务器开机之后自动开启服务)

# /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)
在重启服务就不会提示上面的信息了。

# /usr/local/apache2/bin/apachectl start (这次开启的时候发现什么都木有)
但是服务已经开启了!!
查看一下httpd的端口状态和进程状态
# netstat -pant | grep httpd
tcp      0      0 :::80                   :::*                  LISTEN      1524/httpd         
# ps aux | grep httpd
root      15240.00.4   52722372 ?      Ss   02:39   0:00 /usr/local/apache2/bin/httpd -k start
daemon    15250.00.4 2830042116 ?      Sl   02:39   0:00 /usr/local/apache2/bin/httpd -k start
daemon    15260.00.4 2830042120 ?      Sl   02:39   0:00 /usr/local/apache2/bin/httpd -k start
daemon    15270.00.4 2830042120 ?      Sl   02:39   0:00 /usr/local/apache2/bin/httpd -k start
root      17060.00.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/^//')
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
# 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
                                                         
# service httpd stop
Stopping httpd:                                          
发现还是出现这样的错误,别急,在来小小的修改一下
# ps aux | grep httpd
root   204620.00.4   82042080 ?      Ss   19:59   0:00 /usr/local/apache2/bin/httpd
daemon   204640.00.3   83401568 ?      S    19:59   0:00 /usr/local/apache2/bin/httpd
daemon   204650.00.3   83401568 ?      S    19:59   0:00 /usr/local/apache2/bin/httpd
daemon   204660.00.3   83401568 ?      S    19:59   0:00 /usr/local/apache2/bin/httpd
daemon   204670.00.3   83401568 ?      S    19:59   0:00 /usr/local/apache2/bin/httpd
daemon   204680.00.3   83401568 ?      S    19:59   0:00 /usr/local/apache2/bin/httpd
root   208620.00.6109123308 pts/2    S+   21:09   0:00 vim httpd
root   209860.00.1   4308   732 pts/3    S+   21:37   0:00 grep httpd
# kill -9 20462 20464 20465 20466 20467 20468(杀死这些进程)
然后在试试service httpd start|stop|restart,行则ok,不行,那就在检查检查上面的配置文件
# service httpd start
Starting httpd:                                          
# service httpd restart
Stopping httpd:                                          
Starting httpd:                                          
#

有人说何必这么费劲也可以这样
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:    ,不信你可以试试,这样就还需要
查看是否开启了没有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
###在模块中添加一句,然后在下面添加几句

   Alias    /test         "/data/web"      


    AllowOverride None
    Options None
    Require all granted


#######里面写的东西配置文件里面是有模板的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

ServerAdminwebmaster@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


ServerAdminwebmaster@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.logcommon

#####保存退出

参数的解释:
ServerAdmin webmaster@dummy-host.example.com   
   (这个可以随便写,这个是管理员的邮箱地址)
DocumentRoot /data/web/test1
   (这个是存放网页文件的目录)
ServerName www.test.com            
   (这个是写域名的,有自己的域名,就写自己的域名,没有域名随便写了也不要紧,因为我们用ip访问)
CustomLogdata/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.logtest2.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

ServerAdminwebmaster@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


ServerAdminwebmaster@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.logcommon

#####保存退出
重启服务

如果临时的不能搭建dns,可以用host文件代替
vim /etc/hosts
172.16.1.1   www.test1.com
172.16.1.1www.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
修改配置文件

####添加这些

ServerAdminwebmaster@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


ServerAdminwebmaster@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.logcommon

#####保存退出
重启服务
模拟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"

    Options Indexes MultiViews FollowSymLinks
    AllowOverride All
    AuthType basic
    AuthName "welcome test"
    AuthUserFile /usr/local/apache2/conf/httppwd
    Require user liu

####保存退出

建立网页目录和文件
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"

    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

####保存退出

建立组认证的文件
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. 新建立一个默认主机,即出现在所有最重要的


ServerName x.x.x
DocumentRoot /var/www/error
RewriteEngine On
RewriteRule   ^.*/400.php


2. 编辑文件/var/www/error/400.php, 输出以下代码:

Bad Request

如此,即可实现禁止直接用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 #####"




页: [1]
查看完整版本: 源码包搭建apache(2.4.x)