apache服务

apache服务

一些概念:

虚拟主机:是一个技术

Apache中的虚拟主机是一种技术,允许你在一台服务器上运行多个Web网站,每个网站都有自己的域名或IP地址。这通过在Apache服务器上配置特定的配置文件来实现,该配置文件会为每个网站指定一个独立的目录。虚拟主机使用一种技术叫做虚拟目录,该技术可以将不同的网站内容动态地指向服务器上的不同目录。

 

安装包 httpd
服务名称:httpd

 

是一个网站服务,用于去访问主页的服务  

 

配置文件名称:
服务的根目录:/etc/httpd
主配置文件:/etc/httpd/conf/httpd.conf
网站数据目录:/var/www/html
访问日志:/var/log/httpd/access_log
错误日志:/var/log/httpd/error_log

 

参数介绍:

ServerRoot 服务目录
ServerAdmin 管理员邮箱
User 运行服务的用户
Group 运行服务的用户组
ServerName 网站服务器的域名
DocumentRoot 文档的根目录(网站数据目录)
Directory 网站数据目录的权限
Listen 监听的ip地址与端口号
DirectoryIndex 默认的索引页面
ErrorLog  错误日志文件
CusetomLog  访问的日志文件
Timeout 网页超时时间,默认为300秒

 

关于权限:

options:用来定义目录有哪些的特性,FollowSymLinks,可以在目录中使用符号链接,可以使用+或-,添加或者取消某个值

AllowOverride:用于设置.htaccess文件中的指令类型,None表示禁止使用.htaccess

allow和deny
order allow,deny
表示默认情况禁止所有客户端访问,且Allow字段在Deny字段之前被匹配,如果Allow字段又匹配Deny字段,则Deny字段最终生效,也就是Deny会覆盖Allow


order deny,allow
默认情况下,允许所有客户端访问,如果有相同的字段,allow会覆盖deny

案列:
1)允许所有客户端访问
Order allow,deny
Allow from all


2)拒绝ip和域名
Order deny,allow
deny from ip
deny from 域名


3)只有某一个ip能访问,其余都不能访问
Order deny,allow
deny from all
allow from Ip
(先拒绝所有的,在来允许某一个)

4)仅允许某个网段能访问,但是其中有一个ip不能访问
Order allow,deny
allow from ip/24
deny from ip

  

常见的操作:

一:搭建用户认证的目录

就是用户访问网页时,需要输入账号和密码才能去访问

添加账户和密码

添加账户和密码
htpasswd -c /etc/httpd/conf/authpasswd qcy

  

[root@controller conf.d]# vim auth.conf
<VirtualHost *:80>
 DocumentRoot /qq
 ServerName www.a.com
</VirtualHost>
<Directory /qq>
 AuthType Basic
 AuthName "auth"
 AuthUserFile /authpasswd
 Require user auth qcy
</Directory>

 

设置selinux

[root@controller conf.d]# semanage fcontext -t httpd_sys_content_t  -a '/qq(/.*)?'
[root@controller conf.d]# restorecon -RFv /qq/

[root@controller /]# ll -Z qq
total 4
-rw-r--r--. 1 root root system_u:object_r:httpd_sys_content_t:s0 16 Nov 23 19:22 index.html
[root@controller /]# ll -Z qq -d
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Nov 23 19:22 qq
[root@controller /]# 

 

设置防火墙

[root@controller /]# firewall-cmd --permanent --add-service=http
[root@controller /]# firewall-cmd --reload
[root@controller /]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160 ens192
  sources: 
  services: cockpit dhcpv6-client ssh http
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
[root@controller /]# 

  

访问Ip和域名都行

http://192.168.10.111
输入账户和密码

 

二:搭建个人网站

就是基于自己的用户的网站,就是要开放权限,就是httpd默认是不允许访问自己的用户目录

更改一下的参数

vim /etc/htpd/conf.d/userdir.conf
修改里面的几个参数
UserDir enabled   # 开启访问用户
UserDir public_html  # 访问用户目录的名字

还需要在家目录下创建访问用户网站的目录

mkdir /home/q7/public_html
echo "this is my web" >> /home/q7/public_html/index.html

#并且要赋予权限,让其他人能够访问这个目录
chmod o+x /home/q7/

开启防火墙和selinux

[root@localhost /]# firewall-cmd --permanent --add-service=http
[root@localhost /]# firewall-cmd --reload 

#selinux开启访问家目录的布尔值
[root@localhost /]# setsebool httpd_enable_homedirs on

 

用户家目录的文件的selinux的的类型为httpd_user_content_t,不用刻意设置,创建好文件后,重启服务,会自动的设置 

 

使用浏览器来访问

http://192.168.10.101/~q7
就能显示内容了

三:基于域名访问的虚拟主机

就是使用同一个ip,不同的域名来实现访问不同的页面,就是一台服务器运行好几个网站

vim /etc/httpd/conf.d/a.conf

<VirtualHost *:80>
 DocumentRoot /a
</VirtualHost>
<Directory /a>
 Require all granted
</Directory> 

vim /etc/httpd/conf.d/b.conf

<VirtualHost *:80>
 DocumentRoot /b
</VirtualHost>
<Directory /b>
 Require all granted
</Directory>

 

防火墙和selinux都要设置

# 设置网站目录的上下文类型与httpd保持一致
[root@controller www]# semanage fcontext -a -t httpd_sys_content_t '/www/superqiao(/.*)?'
[root@controller www]# restorecon -RFv /www/superqiao/

 

[root@controller www]# firewall-cmd --permanent --add-service=http
success
[root@controller www]# firewall-cmd --reload 
success
[root@controller www]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160 ens192
  sources: 
  services: cockpit dhcpv6-client http mountd nfs rpc-bind samba ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
[root@controller www]# 

 

访问这2个域名

在浏览器上面访问 www.a.com

在windows中访问的话,要修改域名解析的文件 C:\Windows\System32\drivers\etc 这个目录下的hosts文件,就可以在本地主机上的浏览器去访问了

 

四:基于端口来访问虚拟主机

就是基于端口来访问虚拟主机

修改httpd的主配置文件

添加端口

Listen 8088
Listen 8089 

创建端口,类型与80端口保持一致

semanage port -a 8088 -t http_port_t -p tcp
semanage port -a 8089 -t http_port_t -p tcp 

防火墙放行这2个端口

firewall-cmd --permanent --add-port=8088/tcp
firewall-cmd --permanent --add-port=8089/tcp
firewall-cmd --reload 

 

创建端口的配置文件

[root@controller conf.d]# vim 8089.conf 
<VirtualHost 192.168.10.110:8089>
 DocumentRoot /www/8089
</VirtualHost>
<Directory /www/8089>
 Require all granted
</Directory>

 

修改selinux的上下文

[root@controller www]# semanage fcontext -a -t httpd_sys_content_t '/www/8089(/.*)?'
[root@controller www]# restorecon -RFv /www/8089

 

重启http服务

 

基于端口去访问

192.168.10.110:8089

 

5:基于端口来访问具有不同的页面呈现

原理很简单,就是配置2个端口的配置文件和一个默认的80的配置文件,域名和ip一一对应的上,就能实现

1:创建网页文件

[root@controller www]# ls
8088  8089  q7
[root@controller www]# echo "welcome 8088 port " >> 8088/index.html
[root@controller www]# echo "welcome 8089 port " >> 8089/index.html
[root@controller www]# echo "welcome 80 port " >> q7/index.html
[root@controller www]# 

 

2:在httpd主配置文件里面添加2个端口

Listen 80
Listen 8088
Listen 8089

添加完之后,不能重启httpd服务,因为没有这2个端口号,需要添加这2个端口号,才能重启,且端口的上下文类型要与默认的httpd端口的类型保持一致性
[root@controller /]# semanage port -a 8088 -t http_port_t -p tcp
[root@controller /]# semanage port -a 8089 -t http_port_t -p tcp
[root@controller /]# semanage port -l |grep 80
amanda_port_t                  tcp      10080-10083
amanda_port_t                  udp      10080-10082
conntrackd_port_t              udp      3780
cyphesis_port_t                tcp      6767, 6769, 6780-6799
geneve_port_t                  tcp      6080
hadoop_namenode_port_t         tcp      8020
hplip_port_t                   tcp      1782, 2207, 2208, 8290, 8292, 9100, 9101, 9102, 9220, 9221, 9222, 9280, 9281, 9282, 9290, 9291, 50000, 50002
http_cache_port_t              tcp      8080, 8118, 8123, 10001-10010
http_port_t                    tcp      8089, 8088, 80, 81, 443, 488, 8008, 8009, 8443, 9000

这样才能重启httpd服务,就不会报错
[root@controller /]# systemctl restart httpd

 

3:添加配置文件

在conf.d这个目录下创建配置文件

[root@controller conf.d]# cat 8088.conf 
<virtualhost 192.168.10.110:8088>
 documentroot /www/8088
</virtualhost>
<directory /www/8088>
 require all granted
</directory>
[root@controller conf.d]# cat 8089.conf 
<virtualhost 192.168.10.110:8089>
 documentroot /www/8089
</virtualhost>
<directory /www/8089>
 require all granted
</directory>
[root@controller conf.d]# cat q7.conf 
<virtualhost 192.168.10.110:80>
 documentroot /www/q7
 servername www.q7.com
</virtualhost>
<directory /www/q7>
 require all granted
</directory>
[root@controller conf.d]# 

重启httpd服务
[root@controller conf.d]# systemctl restart httpd
[root@controller conf.d]# 

 

4:接下来就是权限有关的问题了

首先是防火墙的放行

[root@controller conf.d]# firewall-cmd --permanent --add-service=http
success
[root@controller conf.d]# firewall-cmd --permanent --add-port=8088/tcp
success
[root@controller conf.d]# firewall-cmd --permanent --add-port=8089/tcp
success
[root@controller conf.d]# firewall-cmd --permanent --add-port=80/tcp
success
[root@controller conf.d]# firewall-cmd --reload 
success
[root@controller conf.d]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160 ens192
  sources: 
  services: cockpit dhcpv6-client http ssh
  ports: 8088/tcp 8089/tcp 80/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
[root@controller conf.d]#  

 

selinux的方面的管理

就是一个是文件的上下文类型,还有一个就是布尔值的操作

[root@controller www]# ls
8088  8089  q7
[root@controller www]# ll -Z
total 0
drwxr-xr-x. 2 root root unconfined_u:object_r:default_t:s0 24 Dec  6 14:20 8088
drwxr-xr-x. 2 root root unconfined_u:object_r:default_t:s0 24 Dec  6 14:20 8089
drwxr-xr-x. 2 root root unconfined_u:object_r:default_t:s0 24 Dec  6 14:21 q7
[root@controller www]# 

很明显的看出这个网页的上下文类型与httpd服务的类型不一致,所以无法被httpd服务所加载
更改这网页文件的上下文类型
[root@controller www]# semanage fcontext -a -t httpd_sys_content_t '/www(/.*)?'
[root@controller www]# restorecon -RFv /www/
Relabeled /www from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /www/8089 from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /www/8089/index.html from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /www/8088 from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /www/8088/index.html from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /www/q7 from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0
Relabeled /www/q7/index.html from unconfined_u:object_r:default_t:s0 to system_u:object_r:httpd_sys_content_t:s0
[root@controller www]# ll -Z
total 0
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec  6 14:20 8088
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec  6 14:20 8089
drwxr-xr-x. 2 root root system_u:object_r:httpd_sys_content_t:s0 24 Dec  6 14:21 q7
[root@controller www]# 

直接将这个这个网页文件的父目录设置为httpd服务的类型,因为selinux具有继承性,所以以后在这个里面创建文件,都会默认有httpd服务的上下文类型

  

5:前面忘了还有一个操作,就是域名解析

192.168.10.110 www.q7.com

 

测试端也要添加这个域名解析,否则会报错

7:访问

[root@nodes1 yum.repos.d]# curl www.q7.com:80
welcome 80 port 
[root@nodes1 yum.repos.d]# curl www.q7.com:8088
welcome 8088 port 
[root@nodes1 yum.repos.d]# curl www.q7.com:8089
welcome 8089 port 

 

这样就完成了基于同一个ip(域名)通过不同的端口所呈现的网页内容的不同,

在思考一下,如果网页文件很多,不是只有一个呢,后续完善,

当然,还有优先级的问题,就是在一个配置文件里面,如果有多个conf的配置文件,且有互相冲突的,就创建一个备份目录,移动到这个备份目录里面去,就可以了

冲突的原因:

就是用了一个ip或者一个域名有2个配置文件,就会有优先级的问题,这个时候,就创建一个备份目录(以conf结尾的目录),把目录移到里面去

 

 

 

 

6:加密

加密的话,访问某个网站就比较的安全

配置的步骤:

1)安装密钥的的包

[root@controller /]# yum -y install mod_ssl

2)生成密钥

[root@controller ~]# openssl genrsa > tlsweb.key

3)生成证书请求文件

[root@controller ~]# openssl req -new -key tlsweb.key > tlsweb.csr

4)生成证书文件(利用密钥和证书请求文件)

[root@controller ~]# openssl req -x509 -days 365 -key tlsweb.key -in tlsweb.csr > tlsweb.crt

 

5)修改ssl配置文件里面的参数和移动这些文件

SSLCertificateFile /etc/pki/tls/certs/tlsweb.crt #证书文件
SSLCertificateKeyFile /etc/pki/tls/private/tlsweb.key #密钥文件

 

移动这些文件

[root@controller ~]# mv tlsweb.key  /etc/pki/tls/private/
[root@controller ~]# mv tlsweb.crt /etc/pki/tls/certs/

 

6)重启服务,selinux必须关掉,才能重启,否则会阻拦

[root@controller ~]# setenforce 0
[root@controller ~]# systemctl restart httpd
[root@controller ~]# setenforce 1
[root@controller ~]# getenforce 
Enforcing
[root@controller ~]# 

 

为什么重启httpd会报错?

因为这个文件的上下文类型不一致,所以httpd服务不能加载这些文件,移动的话,文件的上下文类型不会改变,cp的话,文件的上下文类型被自动的继承父目录的上下文类型,也就是cert_t这个类型,修改成这个类型,就不会报错了

唉(这个selinux真的烦。。。)

7)防火墙放行和客户端访问

[root@controller ~]# firewall-cmd --permanent --add-service=https
success
[root@controller ~]# firewall-cmd --reload 
success
[root@controller ~]# 

在客户端的浏览器上输入https://192.168.10.110
点击advanced什么的
就能访问了,上面有个锁的标签,就成功

 

7:加密自定义网页内容的文件

就是关于这次的操作和以前的哪些的操作,都可以在/etc/httpd/conf.d这个目录下编辑配置文件

就是像基于域名那样的配置,在里面添加一些加密文件的参数,就可以了

几个参数的设置:

SSLCertificateFile /etc/pki/tls/certs/localhost.crt  这个书证书文件的路径
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key 这个是密钥
SSLEngine on 这个是ssl启动的设置

 

操作:

openssl genrsa > tlsweb.key
openssl req -new -key tlsweb.key > tlsweb.csr
openssl req -x509 -days 365 -key tlsweb.key -in tlsweb.csr > tlsweb.crt

cp tlsweb.key /etc/pki/tls/private/
cp tlsweb.crt /etc/pki/tls/certs/



<virtualhost 192.168.10.110:443>
 documentroot /var/www/html
 servername www.a.com
 SSLEngine on
 SSLCertificateFile /etc/pki/tls/certs/tlsweb.crt
 SSLCertificateKeyFile /etc/pki/tls/private/tlsweb.key
</virtualhost>
<directory /var/www/html>
 require all granted
</directory>

 

防火墙的放行

[root@controller /]# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens160 ens192
  sources: 
  services: cockpit dhcpv6-client http ssh
  ports: 443/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 
[root@controller /]# 

 

编写的网页配置文件

 

8:总结

就是这些操作,都可以基于身份认证来进行操作,

最后的就是做一些网页权限的操作,允许指定的网段能够访问这个网页,里面的参数必须要学会,就是不仅仅是老师教的

 

  

  

  

 

 

  

  

 

 

 

 

 

 

 

 

  

  

posted @ 2023-11-23 18:58  q_7  阅读(17)  评论(0编辑  收藏  举报