安装配置Apache服务器
安装配置Apache服务器
一、Apache的工作原理
Web系统是客户端/服务器模式的,所以应该有服务器程序和客户端程序两个部分。常用的服务器程序是Apache,常用的客户端程序是浏览器。可以在浏览器的地址栏中输入统一资源定位地址(URL)来访问Web页面,Web最基本的概念是超文本,它使得文本可以在阅读过程中从一个页面位置跳转到另一个页面位置。用来书写Web页面的语言称为“超文本标记语言”,即HTML。
WWW协议遵从HTTP协议,默认的TCP/IP端口是80,客户端与服务器的通信过程如下:
- 客户端(浏览器)和Web服务器建立TCP链接,然后向Web服务器发出访问请求(如GET).根据HTTP协议,该请求中包含了客户端的IP地址、浏览器的类型和请求的URL等一系列信息
- Web服务器收到请求后,将客户端的要求的页面内容返回到客户端。如果出现错误,则返回错误代码。
- 断开与远程Web服务器的连接。
二、安装和配置服务器
1、安装
yum install httpd -y ##安装http服务器
yum install httpd-manual -y ##安装http手册
systemctl start httpd ##开启服务
systemctl enable httpd ##开机自启动
- 1
- 2
- 3
- 4
2、apache的基础信息
主配置文件目录: /etc/httpd/conf
主配置文件: /etc/httpd/conf/httpd.conf
子配置目录: /etc/httpd/conf.d/
子配置文件: /etc/httpd/conf.d/*.conf
默认发布目录: /var/www/html/
默认发布文件: /var/www/html/index.html
默认端口: 80
默认安全上下文: httpd_sys_content_t
程序开启默认用户: apache
apache日志: /etc/httpd/logs/*
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
3、配置
1)修改默认端口
vim /etc/httpd/conf/httpd.conf
--> 43: Listen 8080 ##修改端口为8080
systemctl restart httpd ##重启服务使修改生效
- 1
- 2
- 3
修改后截图:
2)修改默认发布文件
默认发布文件就是访问apache时默认指向的文件,在客户端浏览器输入时直接输入ip地址,而不需要输入文件名即可显示的信息页,这个文件可以在配置文件中指定多个,但他们有访问的先后顺序,因为http默认指向的目录是在/var/www/html/目录里面,所以默认发布文件应该写在这个目录下面才会生效
vim /etc/httpd/conf/httpd.conf
--> 164: DirectoryIndex index.html test.html #当index.heml不存在时访问test.html
vim /var/www/html/index.html
--> <h1> www.lcl.com </h1> ##写默认发布文件
rm -fr /var/www/html/index.html ##删除index.html文件,默认会指向test.html文件
vim /var/www/html/test.html
--> <h1> test's page </h1>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
结果如下:《2》
3)修改默认发布目录
从上面一个配置的内容可以看到,httpd的默认发布目录是在/var/www/html/目录里面,这个目录时可以通过修改配置文件修改的,具体如下
mkdir /www ##创建想要新指向的默认发布目录
vim /etc/httpd/conf/httpd.conf
--> 120 DocumentRoot "/www" ##默认发布目录指向
121 <Directory "/www">
122 Require all granted ##这个目录允许所有请求访问资源
123 </Directory>
vim /www/index.html ##编写默认文件
--> <h1> another directory test's page</h1>
systemctl restart httpd
另:若selinux开启的话,必须修改安全上下文,若没有开启的话,不用修改
修改方法如下:
semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?'
restorecon -RvvF /www/
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
结果如下:
4)Apache的虚拟主机
1> 先创建虚拟主机默认发布目录并编写测试页
mkdir -p /var/www/virtual/linux.lcl.com/html
mkdir -p /var/www/virtual/python.lcl.com/html
vim /var/www/virtual/linux.lcl.com/html/index.html
--> <h1>linux.lcl.com</h1>
vim /var/www/virtual/python.lcl.com/html/index.html
--> <h1>python.lcl.com</h1>
- 1
- 2
- 3
- 4
- 5
- 6
2> 编写虚拟主机访问控制文件
这些虚拟主机访问控制文件,可以在http的配置文件/etc/httpd/conf/httpd.conf里面直接添加修改,也可以在/etc/httpd/conf.d/这个目录里面直接添加配置文件,但添加的配置文件必须以.conf结尾,否则不会生效,而且这个目录里面的文件的读取是根据文件名的ascii码的顺序来读取的,所以要想让某一个目录先读取的话,必须把它放在这个目录的第一个上,具体做法如下
cd /etc/httpd/conf.d/
vim adefault.conf
--> <VirtualHost _default_:80> ##主机名默认的80端口
DocumentRoot "/var/www/html" ##找这个文件目录里面的默认访问文件
Customlog "logs/www.lcl.com.logs" combined ##创建日志,这里的路径是相对路径,时在/etc/httpd/目录里面,并且这个设置在配置文件中可以更改,combined表示4中日志格式(access,error,deny,worry)都放在www.lcl.com.logs这个文件中
</VirtualHost>
vim linux.conf
--> <VirtualHost *:80>
ServerName linux.lcl.com ##在客户端浏览器输入的URL为linux.lcl.com
DocumentRoot "/var/www/virtual/linux.lcl.com/html" ##这个目录为默认目录
CustomLog "logs/www.linux.com.logs" combined
</VirtualHost>
<Directory "/var/www/virtual/linux.lcl.com/html">
Require all granted
</Directory>
vim python.conf
--> <VirtualHost *:80>
ServerName python.lcl.com
DocumentRoot "/var/www/virtual/python.lcl.com/html" CustomLog "logs/www.python.com.logs" combined
</VirtualHost>
<Directory "/var/www/virtual/python.lcl.com/html">
Require all granted
</Directory>
systemctl restart httpd
做到这里,服务器的虚拟主机已经配置完毕,但不要忘记在客户端的主机上进行地址解析,否则将无法用URL访问
- 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
测试结果如下图:<3>
5)Apache内部访问控制
1> 针对主机的访问控制
针对主机的访问控制是设置主机的黑名单或者白名单
mkdir /var/www/html/test
vim /var/www/html/test/index.html ##创建测试页
<h1> test </h1>
vim /etc/httpd/conf.d/adefault.conf ##修改默认配置文件
--> <Directory "/var/www/html/test"> ##访问/var/www/html/tset目录时,
Order deny,allow ##读取这个配置设置,按照先后顺序读取下面的设置
Allow from 172.25.254.70 ##允许这个ip地址读取
Deny from all ##所有的都不允许
</Directory>
##因为设置的是先读Deny设置,再读Allow,所以这个设置是只有172.25.254.70ip可以读取test目录下的内容
systemctl restart httpd
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
测试结果如下:
2> 用户访问方式的控制
在用客户端浏览器进入指定的目录时,会弹出一个提示框需要输入正确的被授权的用户名和密码,才可以成公登陆,浏览到指定的文件
[root@station conf.d]# htpasswd -cm /etc/httpd/userpass admin ##创建admin用户并加密密码放到/etc/httpd/userpass文件里面
New password: ##输入密码并不会在shell中显示
Re-type new password:
Adding password for user admin
[root@station conf.d]# htpasswd -m /etc/httpd/userpass admin1 ##新创建admin1用户并输入加密密码放入指定文件中,这条命令和上一条命令相比少了-c,如果有-c的话,会把这个文件原来的内容覆盖掉,而没有的话则会自动在后面添加
New password:
Re-type new password:
Adding password for user admin1
[root@station conf.d]# cat /etc/httpd/userpass ##该文件的内容
admin:$apr1$n7ILq.Rc$84darYQhhvlZ/4y8mt2vH.
admin1:$apr1$Dtb0Oxpk$VMqXbyCPFtFky3k5z3j5q.
[root@station conf.d]# vim adefault.conf
--> <Directory "/var/www/html/test"> ##访问这个目录时
AuthUserFile /etc/httpd/userpass ##先找这个文件
AuthName "Please input your name and password" ##浏览器输入用户名和密码界面会显示的内容
AuthType basic ##类型为基本的类型
Require user admin ##只允许admin用户登陆,而上面设置的admin1用户不会登陆进入访问页面
#Require valid-user ##表示允许有效用户登陆,则userpass文件里面的所有用户均可以登陆
##上面两行写一行即可,可根据需要更改用户名
</Directory>
[root@station conf.d]# systemctl restart httpd
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
运行结果如下:<5>
用admin用户登陆
用admin1用户登陆,不会显示测试页,而是还是输入用户名和密码的页面
6) Apache所支持的语言
1> html,从前面的配置可以看出,用的都是html语言,所以这里就不再解释。
2> php,需要下载php的安装包,可以直接yum下载
[root@station conf.d]# yum install php -y
[root@station conf.d]# vim /var/www/html/index.php
--> <?php
phpinfo();
?>
- 1
- 2
- 3
- 4
- 5
测试结果如下图:
3> cgi,前面下载了httpd-manual,关于cgi的配置可以在这上面找到,这里举一个例子即可。
[root@station conf.d]# mkdir /var/www/html/cgi
[root@station conf.d]# vim /var/www/html/cgi/index.cgi
--> #!/usr/bin/perl
print "Content-type: text/html\n\n";
print `date`; ##打印出date命令执行的结果
[root@station conf.d]# chmod +x /var/www/html/cgi/index.cgi
[root@station conf.d]# vim adefault.conf
--> <Directory "/var/www/html/cgi">
Options ExecCGI
AddHandler cgi-scripts .cgi
</Directory>
[root@station conf.d]# systemctl restart httpd
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
7) https:https是http+ssl,传输通道加密,https的端口是443
[root@station cgi]# yum install crypto-utils mod_ssl -y
[root@station cgi]# keygen www.lcl.com ##进行加密,设置完成后会在界面出现证书和密钥的位置及文件
[root@station cgi]# systemctl restart httpd
- 1
- 2
- 3
此时用浏览器输入https://www.lcl.com 就可以看到浏览器让下载证书,下载后,可以正常访问
测试及配置结果如下:
配置
证书位置和key位置
测试过程
下载证书
8) 设置https虚拟化主机并设置网页重定向功能
[root@station ~]# mkdir -p /var/www/virtual/login.lcl.com/html
[root@station ~]# vim /var/www/virtual/login.lcl.com/html/index.html
<h1>login.lcl.com </h1>
[root@station conf.d]# vim /etc/httpd/conf.d/login.conf
1 <VirtualHost *:443> ##用443端口访问login.lcl.com
2 ServerName login.lcl.com
3 DocumentRoot "/var/www/virtual/login.lcl.com/html"
4 CustomLog "logs/login.logs" combined
5 SSLEngine on ##SSL加密模式开启,可从httpd-manual里面查看
6 SSLCertificateFile /etc/pki/tls/certs/www.lcl.com.crt ##生成的证书位置
7 SSLCertificateKeyFile /etc/pki/tls/private/www.lcl.com.key ##生成的key位置
8 </VirtualHost>
9 <Directory "/var/www/virtual/login.lcl.com/html">
10 Require all granted
11 </Directory>
12 <VirtualHost *:80>
13 ServerName login.lcl.com
14 RewriteEngine On
15 RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1 [redirect=301] ##端口为80的http的访问login.lcl.com转到https
16 </VirtualHost>
##^(/.*)$ ##客户在浏览器地址栏中输入的所有字符
##https:// ##强制客户加密访问
##%{HTTP_HOST} ##客户请求主机
##$1 ##和^(/.*)$值一样
##[redirect=301] ##临时重写,302表示永久转换
客户端也需要做好地址解析,才能访问
- 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
测试结果如图:
可以看出自动转到https
其他则不会转到https
还没有评论,来说两句吧...