CentOS 7.2配置Apache服务httpd(上)

本文涉及的产品
运维安全中心(堡垒机),免费版 6个月
运维安全中心(堡垒机),企业双擎版|50资产|一周时长
.cn 域名,1个 12个月
简介: CentOS 7.2配置Apache服务httpd(上)


 一、Apache简介

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源代码的网页服务器软件,可以在大多数电脑操作系统中运行,由于其跨平台和安全性(尽管不断有新的漏洞被发现,但由于其开放源代码的特点,漏洞总能被很快修补。因此总合来说,其安全性还是相当高的。)。被广泛使用,是最流行的Web服务器软件之一。它快速、可靠并且可通过简单的API扩充,将Perl/Python等解释器编译到服务器中。

软件图标

二、安装Apache httpd

安装httpd以配置Web服务器, HTTP使用80 / TCP

?

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

[1] 安装 httpd.

[root@linuxprobe ~]# yum -y install httpd

# 删除默认欢迎页面

[root@linuxprobe ~]# rm -f /etc/httpd/conf.d/welcome.conf

[2] 配置httpd,将服务器名称替换为您自己的环境

[root@linuxprobe ~]# vi /etc/httpd/conf/httpd.conf

# line 86: 改变管理员的邮箱地址

ServerAdmin root@linuxprobe.org

# line 95: 改变域名信息

ServerName www.linuxprobe.org:80

# line 151: none变成All

AllowOverride All

# line 164: 添加只能使用目录名称访问的文件名

DirectoryIndex index.html index.cgi index.php

# add follows to the end

# server's response header(安全性)

ServerTokens Prod

# keepalive is ON

KeepAlive On

[root@linuxprobe ~]# systemctl start httpd

[root@linuxprobe ~]# systemctl enable httpd

[3] 如果Firewalld正在运行,请允许HTTP服务。,HTTP使用80 / TCP

[root@linuxprobe ~]# firewall-cmd --add-service=http --permanent

success

[root@linuxprobe ~]# firewall-cmd --reload

success

[4] 创建一个HTML测试页,并使用Web浏览器从客户端PC访问它。如果显示以下页面,是正确的

[root@linuxprobe ~]# vi /var/www/html/index.html

<html>

<body>

<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">

Welcome access LinuxProbe.org,This is Test Page!

</div>

</body>

</html>

三、支持Perl

启用CGI执行并使用Perl脚本

?

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

[1] 安装Perl.

[root@linuxprobe ~]# yum -y install perl perl-CGI

[2] 默认情况下,在“/var/www/cgi-bin”目录下允许CGI。

可以使用Perl Scripts放在目录下。然而,它下面的所有文件都被处理为CGI。

# 下面的设置是CGI的设置

[root@linuxprobe ~]# grep -n "^ *ScriptAlias" /etc/httpd/conf/httpd.conf

247: ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

[3] 如果你想允许在其他目录中的CGI,配置如下。

例如,在“/var/www/html/cgi-enabled”中允许。

[root@linuxprobe ~]# vi /etc/httpd/conf.d/cgi-enabled.conf

# create new

# processes .cgi and .pl as CGI scripts

<Directory "/var/www/html/cgi-enabled">

  Options +ExecCGI

  AddHandler cgi-script .cgi .pl

</Directory>

[root@linuxprobe ~]# systemctl restart httpd

[4] 如果SELinux被启用,并且允许CGI在不是像上面[3]的默认目录下,更改规则如下。

[root@linuxprobe ~]# chcon -R -t httpd_sys_script_exec_t /var/linuxprobe/html/cgi-enabled

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_script_exec_t /var/www/html/cgi-enabled

[5] 创建一个CGI测试页面,并使用Web浏览器从客户端PC访问它。如果显示以下页面,说明配置正确。

[root@linuxprobe ~]# vi /var/www/html/cgi-enabled/index.cgi

#!/usr/bin/perl

print "Content-type: text/html\n\n";

print "<html>\n<body>\n";

print "<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">\n";

print "CGI Test Page";

print "\n</div>\n";

print "</body>\n</html>\n";

[root@linuxprobe ~]# chmod 705 /var/www/html/cgi-enabled/index.cgi

四、支持PHP

配置httpd以使用PHP脚本

[1] 安装PHP.

?

1

2

3

4

5

[root@linuxprobe ~]# yum -y install php php-mbstring php-pear

[root@linuxprobe ~]# vi /etc/php.ini

# line 878: 取消注释,设置时区

date.timezone = "Asia/Shanghai"

[root@linuxprobe ~]# systemctl restart httpd

[2] 创建一个PHP测试页面,并使用Web浏览器从客户端PC访问它。如果显示以下页面,它是确定。

?

1

2

3

4

5

6

7

8

9

10

[root@linuxprobe ~]# vi /var/www/html/index.php

<html>

<body>

<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">

<?php

  print Date("Y/m/d");

?>

</div>

</body>

</html>

[3] 创建phpinfo测试页,确认是都开启php支持

[root@linuxprobe ~]# echo "" > /var/www/html/phpinfo.php

五、支持Ruby

配置httpd以将Ruby脚本用作CGI

[1] 安装Ruby.

[root@linuxprobe ~]# yum -y install ruby

[2] 默认情况下,在“/var/www/cgi-bin”目录下允许CGI。  

可以使用Perl Scripts放在目录下。然而,它下面的所有文件都被处理为CGI。

?

1

2

3

# 下面的设置是CGI的设置

[root@linuxprobe ~]# grep -n "^ *ScriptAlias" /etc/httpd/conf/httpd.conf

247: ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

[3] 如果你想允许在其他目录中的CGI,配置如下。  

例如,在“/var/www/html/cgi-enabled”中允许。

?

1

2

3

4

5

6

7

8

[root@linuxprobe ~]# vi /etc/httpd/conf.d/cgi-enabled.conf

# create new

# processes .rb as CGI scripts

<Directory "/var/www/html/cgi-enabled">

  Options +ExecCGI

  AddHandler cgi-script .rb

</Directory>

[root@linuxprobe ~]# systemctl restart httpd

[4] 如果SELinux被启用,并且允许CGI在不是像上面[3]的默认目录下,更改规则如下。

?

1

2

3

[root@linuxprobe ~]# chcon -R -t httpd_sys_script_exec_t /var/www/html/cgi-enabled

 

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_script_exec_t /var/www/html/cgi-enabled

[5] Create a CGI test page and access to it from client PC with web browser. It's OK if following page is shown.

?

1

2

3

4

5

6

7

8

9

10

[root@linuxprobe ~]# vi /var/www/html/cgi-enabled/index.rb

 

#!/usr/bin/ruby

print "Content-type: text/html\n\n"

print "<html>\n<body>\n"

print "<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">\n"

print "Ruby Script Test Page"

print "\n</div>\n"

print "</body>\n</html>\n"

[root@linuxprobe ~]# chmod 705 /var/www/html/cgi-enabled/index.rb

六、支持Python

启用CGI执行并使用Python脚本

?

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

[1] 安装python.

[root@linuxprobe ~]# yum -y install python

 

[2] 默认情况下,在“/var/www/cgi-bin”目录下允许CGI。

可以使用Perl Scripts放在目录下。然而,它下面的所有文件都被处理为CGI。

# 下面的设置是CGI的设置

[root@linuxprobe ~]# grep -n "^ *ScriptAlias" /etc/httpd/conf/httpd.conf

247: ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"

 

[3] 如果你想允许在其他目录中的CGI,配置如下。

例如,在“/var/www/html/cgi-enabled”中允许。

[root@linuxprobe ~]# vi /etc/httpd/conf.d/cgi-enabled.conf

# create new

# processes .py as CGI scripts

<Directory "/var/www/html/cgi-enabled">

  Options +ExecCGI

  AddHandler cgi-script .py

</Directory>

[root@linuxprobe ~]# systemctl restart httpd

 

[4] 如果SELinux被启用,并且允许CGI在不是像上面[3]的默认目录下,更改规则如下。

[root@linuxprobe ~]# chcon -R -t httpd_sys_script_exec_t /var/www/html/cgi-enabled

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_script_exec_t /var/www/html/cgi-enabled

 

[5]   Create a CGI test page and access to it from client PC with web browser. It's OK if following page is shown.

[root@linuxprobe ~]# vi /var/www/html/cgi-enabled/index.py

 

#!/usr/bin/env python

 

print "Content-type: text/html\n\n"

print "<html>\n<body>\n"

print "<div style=\"width: 100%; font-size: 40px; font-weight: bold; text-align: center;\">\n"

print "Python Script Test Page"

print "\n</div>\n"

print "</body>\n</html>\n"

 

[root@linuxprobe ~]# chmod 705 /var/www/html/cgi-enabled/index.py

七、支持Userdir

启用userdir,用户可以使用此设置创建网站

?

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

[1] 配置 httpd.

[root@linuxprobe ~]# vi /etc/httpd/conf.d/userdir.conf

# line 17: comment out

#UserDir disabled

# line 24: uncomment

UserDir public_html

# line 31 - 35

 

<Directory "/home/*/public_html">

  AllowOverride All

# change

 

  Options None

# change

 

  Require method GET POST OPTIONS

</Directory>

[root@linuxprobe ~]# systemctl restart httpd

 

[2] 创建一个测试页,使用普通用户通过客户端PC与Web浏览器和访问它,如果显示以下页面,就是正确的

[cent@linuxprobe ~]$ mkdir public_html

 

[cent@linuxprobe ~]$ chmod 711 /home/cent

 

[cent@linuxprobe ~]$ chmod 755 /home/cent/public_html

 

[cent@linuxprobe ~]$ vi ./public_html/index.html

 

<html>

<body>

<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">

UserDir Test Page

</div>

</body>

</html>

浏览器访问:http://linuxprobe.org/~wang/,出现如下界面

八、设置虚拟主机

配置虚拟主机以使用多个域名。

以下示例在域名为[linuxprobe.org],虚拟域名为[virtual.host(根目录[/home/wang/public_html]]的环境中设置。

必须为此示例设置Userdir的设置

?

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

[1] 配置虚拟主机

[root@linuxprobe ~]# vi /etc/httpd/conf.d/vhost.conf

# for original domain

 

<VirtualHost *:80>

  DocumentRoot /var/www/html

  ServerName www.linuxprobe.org

</VirtualHost>

# for virtual domain

 

<VirtualHost *:80>

  DocumentRoot /home/cent/public_html

  ServerName www.virtual.host

  ServerAdmin webmaster@virtual.host

  ErrorLog logs/virtual.host-error_log

  CustomLog logs/virtual.host-access_log combined

</VirtualHost>

[root@linuxprobe ~]# systemctl restart httpd

 

[2]创建测试页并使用Web浏览器从客户端计算机访问它。如果显示以下页面,则是正确的:

[cent@linuxprobe ~]$ vi ~/public_html/virtual.php

<html>

<body>

<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">

Virtual Host Test Page

</div>

</body>

</html>

[3]如果访问测试时看不到相应页面,可通过下面命令进行测试:

[root@linuxprobe ~]# yum -y install elinks^C

[root@linuxprobe ~]# elinks http://www.virtual.host/virtual.php

九、创建SSL证书

创建自己的SSL证书。但是,如果您使用您的服务器作为业务,最好购买和使用来自Verisigh的正式证书等。

?

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

[root@linuxprobe ~]# cd /etc/pki/tls/cert

cert.pem certs/ 

[root@linuxprobe ~]# cd /etc/pki/tls/certs/

[root@linuxprobe certs]# make server.key

umask 77 ; \

/usr/bin/openssl genrsa -aes128 2048 > server.key

Generating RSA private key, 2048 bit long modulus

...............................................................+++

....................................................................................................+++

e is 65537 (0x10001)

Enter pass phrase:

Verifying - Enter pass phrase:

[root@linuxprobe certs]# openssl rsa -in server.key -out server.key

Enter pass phrase for server.key:

writing RSA key

[root@linuxprobe certs]# make server.csr

umask 77 ; \

/usr/bin/openssl req -utf8 -new -key server.key -out server.csr

You are about to be asked to enter information that will be incorporated

into your certificate request.

What you are about to enter is what is called a Distinguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields there will be a default value,

If you enter '.', the field will be left blank.

-----

Country Name (2 letter code) [XX]:CN  #国家后缀

State or Province Name (full name) []:Shanghai #省

Locality Name (eg, city) [Default City]:Shanghai #市

Organization Name (eg, company) [Default Company Ltd]:LinuxProbe #公司

Organizational Unit Name (eg, section) []:DevOps #部门

Common Name (eg, your name or your server's hostname) []:linuxprobe.org #主机名

Email Address []:root@linuxprobe.org #邮箱

 

Please enter the following 'extra' attributes

to be sent with your certificate request

A challenge password []:  #默认

An optional company name []:  #默认

#

[root@linuxprobe certs]# openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 3650

Signature ok

subject=/C=CN/ST=Shanghai/L=Shanghai/O=LinuxProbe/OU=DevOps/CN=linuxprobe.org/emailAddress=root@linuxprobe.org

Getting Private key

十、配置SSL

[1] 配置SSL.

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

[root@linuxprobe ~]# yum -y install mod_ssl

[root@linuxprobe ~]# vi /etc/httpd/conf.d/ssl.conf

# line 59: 取消注释

DocumentRoot "/var/www/html"

# line 60: 取消注释,定义域名

ServerName linuxprobe.org:443

# line 75: 改变SSLProtocol

SSLProtocol -All +TLSv1 +TLSv1.1 +TLSv1.2

 

# line 100: 改成刚刚创建的server.crt

SSLCertificateFile /etc/pki/tls/certs/server.crt

# line 107: 改成刚刚创建的server.key

SSLCertificateKeyFile /etc/pki/tls/certs/server.key

[root@www ~]# systemctl restart httpd

[2] 如果Firewalld正在运行,请允许HTTPS服务。 HTTPS使用443 / TCP

?

1

2

3

4

[root@www ~]# firewall-cmd --add-service=https --permanent

success

[root@www ~]# firewall-cmd --reload

success

[3] 使用Web浏览器通过HTTPS从客户端计算机访问测试页。下面的示例是Fiorefix。显示以下屏幕,因为证书是自己创建的,但它没有ploblem,继续下一步。

十一、启用基本身份验证

启用基本身份验证以限制特定网页的访问

[1]例如,在目录[/var/www/html/auth-basic]下设置基本身份验证设置。

?

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

[root@linuxprobe ~]# vi /etc/httpd/conf.d/auth_basic.conf

# 创建新配置文件

<Directory /var/www/html/auth-basic>

  AuthType Basic

  AuthName "Basic Authentication"

  AuthUserFile /etc/httpd/conf/.htpasswd

  require valid-user

</Directory>

# 添加用户:使用“-c”创建新文件(仅为初始注册添加“-c”选项)

[root@linuxprobe ~]# htpasswd -c /etc/httpd/conf/.htpasswd wang

 

New password: # set password

 

Re-type new password: # confirm

 

Adding password for user wang

[root@linuxprobe ~]# systemctl restart httpd

[root@linuxprobe ~]# mkdir /var/www/html/auth-basic

 

[root@linuxprobe ~]# vi /var/www/html/auth-basic/index.html

# create a test page

 

<html>

<body>

<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: wanger;">

Test Page for Basic Auth

</div>

</body>

</html>

[2] 使用Web浏览器从客户端计算机访问测试页。然后需要认证,如下所示作为设置,用在[1]中添加的用户回答

十二、基本Auth + PAM

限制特定网页上的访问,并使用OS用户通过SSL连接进行身份验证

[1] 创建证书,请参照上文所述。

[2] 例如,在[/var/www/html/auth-pam]目录下设置Basic Auth。

?

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

# install from EPEL

[root@linuxprobe ~]# yum --enablerepo=epel -y install mod_authnz_external pwauth

[root@linuxprobe ~]# vi /etc/httpd/conf.d/authnz_external.conf

# add to the end

 

<Directory /var/www/html/auth-pam>

  SSLRequireSSL

  AuthType Basic

  AuthName "PAM Authentication"

  AuthBasicProvider external

  AuthExternal pwauth

  require valid-user

</Directory>

 

[root@linuxprobe ~]# mkdir /var/www/html/auth-pam

 

[root@linuxprobe ~]# vi /var/www/html/auth-pam/index.html

# create a test page

 

<html>

<body>

<div style="width: 100%; font-size: 40px; font-weight: bold; text-align: center;">

Test Page for PAM Auth

</div>

</body>

</html>

 

[root@linuxprobe ~]# systemctl restart httpd

[3]  在客户端上使用Web浏览器访问测试页面https://linuxprobe.org/auth-pam/,并与操作系统上的用户进行身份验证。

十三、使用WebDAV

下面是使用SSL连接配置WebDAV设置的示例

[1] 创建证书,请参照上文所述

[2] 例如,创建一个目录[webdav],它使得可以仅通过SSL连接到WebDAV目录。

?

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

[root@linuxprobe ~]# mkdir /home/webdav

[root@linuxprobe ~]# chown apache. /home/webdav

[root@linuxprobe ~]# chmod 770 /home/webdav

[root@linuxprobe ~]# vi /etc/httpd/conf.d/webdav.conf

# create new

DavLockDB "/tmp/DavLock"

Alias /webdav /home/webdav

<Location /webdav>

  DAV On

  SSLRequireSSL

  Options None

  AuthType Basic

  AuthName WebDAV

  AuthUserFile /etc/httpd/conf/.htpasswd

  <RequireAny>

    Require method GET POST OPTIONS

    Require valid-user

  </RequireAny>

</Location>

 

# 添加用户:使用“-c”创建新文件(仅为初始注册添加“-c”选项)

[root@linuxprobe ~]# htpasswd -c /etc/httpd/conf/.htpasswd wang

New password:   # set password

Re-type new password:

Adding password for user wang

# **注意:用户wang的htpasswd已经创建过,不需要重复创建**

[root@linuxprobe ~]# systemctl restart httpd

[3]  如果启用了SELinux,请更改以下规则。  

?

1

2

[root@linuxprobe ~]# chcon -R -t httpd_sys_rw_content_t /home/webdav

[root@linuxprobe ~]# semanage fcontext -a -t httpd_sys_rw_content_t /home/webdav

[4]  这是PC上的WebDAV客户端的设置(Windows 10)。

下载“CarotDAV”,这是一个免费的WebDAV客户端,从以下网站⇒ http://www.rei.to/carotdav_en.html ,下载后,安装并启动CarotDAV,然后显示以下屏幕,单击“文件”按钮并选择“WebDAV”。

[5]在“设置名称”字段中输入任何名称,并在“URI”字段中输入[服务器名称/ webdav目录],并输入用户名和密码

[7]配置添加如下,点击它连接到服务器。

[8] waring显示如下,它的SSL证书没有安装在您的电脑上,它没有ploblem,点击“忽略”,然后去下一步。

[9] 到webdav目录下创建测试目录和文件

?

1

2

3

4

5

[root@linuxprobe tmp]# cd /home/webdav/

[root@linuxprobe webdav]# mkdir linuxprobe

[root@linuxprobe webdav]# mkdir linuxcool

[root@linuxprobe webdav]# touch vdevops.txt

[root@linuxprobe webdav]# touch linuxcool.txt

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。


 


目录
相关文章
|
2月前
|
存储 分布式计算 druid
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
44 1
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(一)
|
2月前
|
缓存 前端开发 应用服务中间件
CORS跨域+Nginx配置、Apache配置
CORS跨域+Nginx配置、Apache配置
233 7
|
2月前
|
消息中间件 分布式计算 druid
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(二)
大数据-152 Apache Druid 集群模式 配置启动【下篇】 超详细!(二)
45 2
|
2月前
|
存储 消息中间件 druid
大数据-151 Apache Druid 集群模式 配置启动【上篇】 超详细!
大数据-151 Apache Druid 集群模式 配置启动【上篇】 超详细!
91 1
|
2月前
apache+tomcat配置多站点集群的方法
apache+tomcat配置多站点集群的方法
39 4
|
2月前
|
负载均衡 应用服务中间件 Apache
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
Tomcat负载均衡原理详解及配置Apache2.2.22+Tomcat7
53 3
|
9天前
|
存储 人工智能 大数据
The Past, Present and Future of Apache Flink
本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024 上海站主论坛开场的分享,今年正值 Flink 开源项目诞生的第 10 周年,借此时机,王峰回顾了 Flink 在过去 10 年的发展历程以及 Flink社区当前最新的技术成果,最后展望下一个十年 Flink 路向何方。
275 33
The Past, Present and Future of Apache Flink
|
2月前
|
SQL Java API
Apache Flink 2.0-preview released
Apache Flink 社区正积极筹备 Flink 2.0 的发布,这是自 Flink 1.0 发布以来的首个重大更新。Flink 2.0 将引入多项激动人心的功能和改进,包括存算分离状态管理、物化表、批作业自适应执行等,同时也包含了一些不兼容的变更。目前提供的预览版旨在让用户提前尝试新功能并收集反馈,但不建议在生产环境中使用。
824 13
Apache Flink 2.0-preview released
|
2月前
|
存储 缓存 算法
分布式锁服务深度解析:以Apache Flink的Checkpointing机制为例
【10月更文挑战第7天】在分布式系统中,多个进程或节点可能需要同时访问和操作共享资源。为了确保数据的一致性和系统的稳定性,我们需要一种机制来协调这些进程或节点的访问,避免并发冲突和竞态条件。分布式锁服务正是为此而生的一种解决方案。它通过在网络环境中实现锁机制,确保同一时间只有一个进程或节点能够访问和操作共享资源。
89 3
下一篇
DataWorks