apache-2.4.9安装与实战

apache-2.4.9安装与实战

大家好,又见面了,我是全栈君。

一. httpd-apache.2.4.9安装过程

编译需要依赖 pcre-devel-7.8-6.el6.bz2  apr-1.5.0.bz2  apr-util-1.5.3.bz2  

按需进行依次编译安装

pcre-devel

1
2
3
4
tar 
xf pcre-devel-7.8-6.el6.bz2
cd 
pcre-devel-7.8-6
.
/configure 
--prefix=
/usr/local/pcre
make 
&& 
make 
install

apr

1
2
3
4
tar 
xf apr-1.5.0.bz2
cd 
apr-1.5.0
.
/configure 
--prefix=
/usr/local/apr
make 
&& 
make 
install

apr-util

1
2
3
4
tar 
xf apr-util-1.5.3.bz2
cd 
apr-util-1.5.3
.
/configure 
--prefix=
/usr/local/apr-util 
--with-apr=
/usr/local/apr
make 
&& 
make 
install

httpd

1
2
3
4
5
6
7
8
9
10
11
12
13
# 安装之前请确保系统之前预装的httpd已被卸载
tar 
xf httpd-2.4.9.bz2
cd 
httpd-2.4.9
# 参数依次是: httpd安装路径  httpd配置文件存放路径  启用模块化方式  启用ssl安全连接
# 启用cgi脚本功能  启用url重写  启用服务器压缩  启用正则表达式支持    apr安装路径
# apr util安装路径   启用常用模块以确保apache正常工作    将多进程模型非静态化
# 启用事件异步模型
.
/configure 
--prefix=
/usr/local/apache 
--sysconfdir=
/etc/httpd 
--
enable
-so --
enable
-ssl --
enable
-cgi --
enable
-rewrite --with-zlib --
with-pcre=
/usr/local/pcre 
--with-apr=
/usr/local/apr 
--with-apr-
util=
/usr/local/apr-util/ 
--
enable
-modules=most --
enable
-mpms-
shared=all --with-mpm=event
make 
&& 
make 
install

附: SerV风格的启动脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/bin/bash
#
# httpd        Startup script for the Apache HTTP Server
#
# chkconfig: - 85 15
# description: The Apache HTTP Server is an efficient and extensible  \
#          server implementing the current HTTP standards.
# processname: httpd
# config: /etc/httpd/conf/httpd.conf
# config: /etc/sysconfig/httpd
# pidfile: /var/run/httpd/httpd.pid
#

/etc/rc
.d
/init
.d
/functions
if 
[ -f 
/etc/sysconfig/httpd 
]; 
then
        

/etc/sysconfig/httpd
fi
HTTPD_LANG=${HTTPD_LANG-
"C"
}
INITLOG_ARGS=
""
apachectl=
/usr/local/apache/bin/apachectl   
# 修改apachectl路径
httpd=
/usr/local/apache/bin/httpd      
# 修改httpd bin路径
prog=httpd
pidfile=${PIDFILE-
/var/run/httpd
.pid}
lockfile=${LOCKFILE-
/var/lock/subsys/httpd
}
RETVAL=0
STOP_TIMEOUT=${STOP_TIMEOUT-10}
start() {
        
echo 
-n $
"Starting $prog: "
        
LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS
        
RETVAL=$?
        
echo
        
[ $RETVAL = 0 ] && 
touch 
${lockfile}
        
return 
$RETVAL
}
stop() {
    
echo 
-n $
"Stopping $prog: "
    
killproc -p ${pidfile} -d ${STOP_TIMEOUT} $httpd
    
RETVAL=$?
    
echo
    
[ $RETVAL = 0 ] && 
rm 
-f ${lockfile} ${pidfile}
}
reload() {
    
echo 
-n $
"Reloading $prog: "
    
if 
! LANG=$HTTPD_LANG $httpd $OPTIONS -t >&
/dev/null

then
        
RETVAL=6
        
echo 
$
"not reloading due to configuration syntax error"
        
failure $
"not reloading $httpd due to configuration syntax error"
    
else
        
# Force LSB behaviour from killproc
        
LSB=1 killproc -p ${pidfile} $httpd -HUP
        
RETVAL=$?
        
if 
[ $RETVAL -
eq 
7 ]; 
then
            
failure $
"httpd shutdown"
        
fi
    
fi
    
echo
}
# See how we were called.
case 
"$1" 
in
  
start)
    
start
    
;;
  
stop)
    
stop
    
;;
  
status)
        
status -p ${pidfile} $httpd
    
RETVAL=$?
    
;;
  
restart)
    
stop
    
start
    
;;
  
condrestart|try-restart)
    
if 
status -p ${pidfile} $httpd >&
/dev/null

then
        
stop
        
start
    
fi
    
;;
  
force-reload|reload)
        
reload
    
;;
  
graceful|help|configtest|fullstatus)
    
$apachectl $@
    
RETVAL=$?
    
;;
  
*)
    
echo 
$
"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|reload|status|fullstatus|graceful|help|configtest}"
    
RETVAL=2
esac
exit 
$RETVAL

二 .实战: 配置CGI、虚拟主机、https、mod_deflate、mod_status

A) 配置CGI、(在部分业务中常见,例如邮箱)

具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 在 /etc/named/named.conf 文件中找到 alias_module 模块
# 替换cgi-bin的输出路径
<IfModule alias_module>
# 在此路径下可编写shell脚本实现cgi方式输出html内容
ScriptAlias 
/cgi-bin/ 
"/usr/local/apache/cgi-bin/"
<
/IfModule
>
# cgi-bin示例
#!/bin/bash
#
userinfo=`
cat 
/etc/passwd 

grep 
^root`
cat 
<< EOF
Content-Type: text
/html
<pre>
The 
hostname 
is: `
hostname
`.
The 
time 
is: `
date
`.
The User Information: ${userinfo}.
<
/pre
>
EOF

运行效果如下:

wKioL1MqqkmyskBJAAD6XkbXSLI103.jpg

B) 虚拟主机: (提高主机生产力)

   一机多站点成为可能,需要取消中心主机在2.4.x + 的版本上配置虚拟主机已经不需要支持NameVirtualHost

具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 在 httpd.conf 中开启vhost子配置文件
Include 
/etc/httpd/extra/httpd-vhosts
.conf
vim 
/etc/httpd/extra/httpd-vhosts
.conf
# 在此要注意关闭之前的主机配置也就是 httpd.conf
# 中的<Directory>节点
<VirtualHost *:80>
    
DocumentRoot 
"/var/www/html/a.com"
    
ServerName www.a.com
    
ServerAlias www.aa.com
    
<Directory />
        
AllowOverride none
        
Require all granted
    
<
/Directory
>
    
ErrorLog 
"logs/dummy-host.example.com-error_log"
    
CustomLog 
"logs/dummy-host.example.com-access_log" 
common
<
/VirtualHost
>
<VirtualHost *:80>
    
DocumentRoot 
"/var/www/html/b.org"
    
ServerName www.b.org
    
ErrorLog 
"logs/dummy-host2.example.com-error_log"
    
<Directory />
        
AllowOverride none
        
Require all granted
    
<
/Directory
>
    
CustomLog 
"logs/dummy-host2.example.com-access_log" 
common
<
/VirtualHost
>

运行效果如下:

wKiom1MqqnGgnUNIAADXSH53q_I788.jpg

wKioL1MqqkvCrmtzAAIsTVZtm4o947.jpg

C) mod_deflate (节约带宽成本)

   启用压缩模块,gzip,deflate

具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 在 httpd.conf 中开启压缩模块
LoadModule deflate_module modules
/mod_deflate
.so
# 在 httpd.conf 中编写如下配置
<IfModule deflate_module>
AddOutputFilterByType DEFLATE text
/plain
AddOutputFilterByType DEFLATE text
/html
AddOutputFilterByType DEFLATE application
/xhtml
+xml
AddOutputFilterByType DEFLATE text
/xml
AddOutputFilterByType DEFLATE application
/xml
AddOutputFilterByType DEFLATE application
/x-javascript
AddOutputFilterByType DEFLATE text
/javascript
AddOutputFilterByType DEFLATE text
/css
# 压缩等级(0-9),数值越大CPU压力也就越大
DeflateCompressionLevel 9
# 非Mozilla4标准浏览器仅开启gzip压缩
BrowserMatch ^Mozilla
/4 
gzip
-only-text
/html
# Mozilla4.06,4.07,4.08版本不开启压缩
BrowserMatch ^Mozilla
/4
\.0[678] no-
gzip
# IE浏览器不开启压缩
BrowserMatch \bMSI[E] !no-
gzip 
!
gzip
-only-text
/html
<
/IfModule
>

运行效果如下:

wKiom1MqqnPgPVbcAAMsBqGGgOQ272.jpg

D) setHandler (apache自带探测功能)

   可访问服务器信息,为服务器监控提供便利

具体配置如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 需要注意: SetHandler中的内容必要要经过用户认证
# htpasswd -c /etc/httpd/conf/.htpasswd -M tom
# -c 生成 .htpasswd 文件 -M md5加密用户密码
# 在 httpd.conf 中编写如下配置
<Location 
/server-status
>
    
SetHandler server-status
    
AuthType Basic
    
AuthName 
"Server Status"
    
AuthUserFile 
"/etc/httpd/conf/.htpasswd"
    
Require valid-user
    
Order deny,allow
    
Allow from all
<
/Location
>

# 其他SetHandler可设置的值及对应模块

default-handler: 使用 default_handler() 发送文件,它是用来处理静态内容的处理器(核心)。

send-as-is: 直接发送,不增加 HTTP 头(mod_asis)。

cgi-script: 按 CGI 脚本处理(mod_cgi)。

imap-file: 按 imagemap 规则处理(mod_imagemap)。

server-info: 取得服务器配置信息(mod_info)。

server-status: 取得服务器状态报告(mod_status)。

type-map: 用于内容协商,按类型映射文件处理(mod_negotiation)。

运行效果如下:

wKioL1Mqqk2i3lwmAAN89lmjRZg129.jpg

wKioL1Mqqk7CSnNaAARoL3GKchw982.jpg

E) https (为私密信息保驾护航)

   https链接采用证书认证流程,客户端发送链接请求与服务器进行握手,协商加密方式,

   服务器发送带有证书签发者与自身信息的证书给客户端验证,客户端验证完毕即建立

   https安全链接通信.

具体配置如下:

1) 证书服务器自签证书阶段(需要密钥对一组,自签证书一张)

1
2
3
4
5
cd 
/etc/pki/CA
openssl genrsa -out private
/cakey
.pem 2048
openssl req -new -x509 -key private
/cakey
.pem -out cacert.pem -days 3650
touch 
index.txt serial calnumber
echo 
01 > serial

wKiom1MqqnaiFSi3AAXtAHygnAY414.jpg

2) Web服务器安装mod_ssl模块

1
yum -y 
install 
mod_ssl

3) Web服务器申请证书阶段

1
2
3
cd 
/var/www/html
openssl genrsa -out httpd.key 1024
openssl req -new -key httpd.key -out httpd.csr

wKioL1Mqqk-AG7UNAAXVA1qXTME538.jpg

4) 证书服务器签署证书

1
openssl ca -
in 
/var/www/html/httpd
.csr -out 
/var/www/html/httpd
.crt -days 365

wKiom1MqqneCrmISAAVC98KGgOQ862.jpg

5) 启用ssl模块与配置文件

1
2
3
4
5
6
7
8
9
10
11
12
# 在 httpd.conf 中开启ssl_module模块和ssl的配置文件
# LoadModule ssl_module modules/mod_ssl.so
# Include /etc/httpd/extra/httpd-ssl.conf
vim 
/etc/httpd/extra/httpd-ssl
.conf
<VirtualHost *:443>
DocumentRoot 
"/var/www/html"
ServerName www.king.com:443
ErrorLog 
"/usr/local/apache/logs/error_log"
TransferLog 
"/usr/local/apache/logs/access_log"
SSLEngine on
SSLCertificateFile 
"/var/www/html/httpd.crt"
SSLCertificateKeyFile 
"/var/www/html/httpd.key"

6) 重启apachectl服务

1
apachectl restart

运行效果如下:

# 没有将服务器证书导入到客户端受信任机构列表

wKioL1MqqlDhr5jcAAIS8O8Uuf0861.jpg

# 下载 httpd.crt 将其导入安装在客户端

wKiom1MqqnqTc6K8AAQD-CaAjWA130.jpg

# 将证书安放在受信任的根证书办法机构(12306买过票的童鞋都知道 :)

wKioL1MqqlWBJImXAAGy7V6C8S8662.jpg

# 导入成功后此处信息应为绿色,显示了链接到www.king.com的加密信息

wKiom1Mqqn2DYHs5AAHN4fOdUOM179.jpg

     本文转自My_King1 51CTO博客,原文链接:http://blog.51cto.com/apprentice/1380490,如需转载请自行联系原作者

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108012.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Java标识符命名规则(超详细!)[通俗易懂]

    Java标识符命名规则(超详细!)[通俗易懂]规则1:标识符只能由数字、字母(包括中文)、下划线_、美元符号$组成,不能含有其它符号。规则2:标识符不能以数字开头规则3:关键字不能做标识符。例如:publicclassstaticvoid这些蓝色的字体都是关键字,关键字是不能做标识符的。规则4:标识符是严格区分大小写的。大写A和小写a不一样。规则5:标识符理论上是没有长度限制的。…

  • c#中高效的excel导入sqlserver的方法

    将oledb读取的excel数据快速插入的sqlserver中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.S

    2021年12月27日
  • 工程师的基本功是什么?如何练习?—学习心得分享「建议收藏」

    开头聊几句1、周末休息,今天下雨了,气温还行,不冷不热2、刚看完《这!就是街舞》,很燃很炸,一些作品表达的东西也很让人感动3、发现真正热爱的事情,并为之付出所有的能量,很让人羡慕开头周四上线到比较晚,好在中间有空,去公司楼下湖边散了散步,上线回到家,已经是凌晨了。周五中午在去公司的路上看到了美团技术团队的一篇文章,觉得很不错,值得学习,也分享到朋友圈了,希望保留下方便自己查阅,也分享给更多的技术伙伴,一起看好的文章。在技术之路上,不断的持续学习,持续进步,一起精进。那天朋友圈分享美团的这

  • sift构建尺度空间_离散序列的尺度变换

    sift构建尺度空间_离散序列的尺度变换尺度空间定义  说到尺度空间理论最早可以追溯到1962年的T.Iijima最先提出,学术界开始关注尺度空间技术主要在1986年IEEEPAMI上同时刊出的4篇关于尺度空间理论的文章奠定了发展基础。现实世界中物体只有具备一定的尺度才能够倍人眼所察觉,计算机视觉学术研究就是在不断的尝试与突破来模拟人眼的观察方法。因此,尺度空间就是试图在图像领域中模拟人眼观察物体的概念与方法。例如:观察一颗树,关…

    2022年10月14日
  • os模块的简单使用

    os模块的简单使用

  • js数组截取方式splice()和slice()方法

    js数组截取方式splice()和slice()方法js数组截取方式splice()和slice()方法1.splice()splice()方法可以添加元素、删除元素,也可以截取数组片段。删除元素时,将返回被删除的数组片段,因此可以使用splice()方法截取数组片段//传递一个参数,则该方法仅执行删除操作,参数值指定删除元素的起始下标(包含该下标元素)//splice()方法将删除后面所有元素vara=[1,2,3,4,5];//定义数组varb=a.splice(2);//从第三个元素开始执行删除console

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号