天天看點

源碼包搭建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了,木有辦法了,那隻有解決了。

[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

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.虛拟目錄

先修改配置檔案

###在<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  [email protected]

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>

DocumentRoot  /data/web/test2

ErrorLog       /data/web/log/test2.err.log

CustomLog      /data/web/log/test2.acc.log  common

#####儲存退出

參數的解釋:

ServerAdmin [email protected]   

   (這個可以随便寫,這個是管理者的郵箱位址)

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>

ServerName    www.test1.com

ServerName    www.test2.com

重新開機服務

如果臨時的不能搭建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同域名同端口

<VirtualHost 172.16.1.10:80>

<VirtualHost 172.16.1.20:80>

模拟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)修改配置檔案

####把配置檔案中的這兩句前面的#去掉

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

vim index.html(為liu使用者建立自己的首頁)

chmod o+x /home/li* (為宿主目錄中的使用者修改權限)

d)重新開機服務

#################通路浏覽器##################

http://ip/~li/  (其中li為使用者名)

###############################################

4.做授權認證

#####添加這幾句(用了一個虛拟目錄)

     Alias  /test     "/data/web"

    Options Indexes MultiViews FollowSymLinks

    AllowOverride All

    AuthType basic

    AuthName "welcome test"

    AuthUserFile /usr/local/apache2/conf/httppwd

    Require user liu

####儲存退出

建立網頁目錄和檔案

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

  輸入使用者名和密碼

組的認證

    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. 建立立一個預設主機,即出現在所有<VirtualHost *:80>最重要的

<VirtualHost *:80>

  ServerName x.x.x

  DocumentRoot /var/www/error

  RewriteEngine On

  RewriteRule   ^.*  /400.php

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/

然後在/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####"

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,如需轉載請自行聯系原作者