RedHat Linux 8中 Apache服务
Apache的作用在日常中,我们使用浏览器访问web时通常使用http://的方式“http:// ”是指超文本传输协议。而提供 http:// 超文本传输协议的软件种类也有很多,我们可以查看看看:命令:curl -I 网址例如百度用的就是Apache服务qq.com:stgw/1.3.12.4_1.13.5weibo.com:WeiBodouyin.com:nginxhuawe...
Apache的作用
在日常中,我们使用浏览器访问web时通常使用http://的方式
“http:// ”是指超文本传输协议。
而提供 http:// 超文本传输协议的软件种类也有很多,我们可以查看看看:命令:curl -I 网址
例如百度用的就是Apache服务
qq.com:stgw/1.3.12.4_1.13.5
weibo.com:WeiBo
douyin.com:nginx
huawei.com:PAAS-WEB/PAAS-WEB
等等…
Apache的安装
Apache的服务程序就是httpd,搭建好软件仓库查找httpd安装包:dnf search httpd
然后安装
Apache的启用
命令:systemctl enable --now httpd,开启服务并设定服务位开机启动
命令:firewall-cmd --list-all ,查看火墙信息
可以看到火墙并没有支持httpd服务。
命令:firewall-cmd --permanent --add-service=http,在火墙中永久开启http访问
命令:firewall-cmd --permanent --add-service=https ,在火墙中永久开启https访问
命令:firewall-cmd --reload,刷新火墙使设定生效
然后就可以看到
Apache的基本信息
服务名称: httpd
配置文件:/etc/httpd/conf/httpd.conf ,主配置文件
/etc/httpd/conf.d/*.conf ,子配置文件
默认发布目录: /var/www/html,通过这个文件里放的内容可以被其他人访问http服务看到
默认发布文件: index.html
默认端口: 80 http ;443 https
用户: apache
日志存放位置: /etc/httpd/logs
Apache的基本配置
-
Apache端口修改
默认端口的是80,如果我们想改这个端口的话:
编辑 vim /etc/httpd/conf/httpd.conf,找到Listen 80,#注释掉,然后再下面写自己想要的端口号 Listen 888,
命令:firewall-cmd --permanent --add-port=888/tcp ,添加新的端口号到火墙里;命令:firewall-cmd --reload ,加载新的设定,
查看在selinux中对http允许使用的端口:semanage port -l | grep http
在允许的端口里没有我们设定的888,没有的话我们重启程序是会失败的,除非将selinux调成警告模式。
另一种方法在允许的端口中去添加888端口,命令:semanage port -a -t http_port_t -p tcp 888
重启服务:systemctl restart httpd,通过888端口浏览器就可以访问到主机了
-
默认发布文件
默认的发文目录是 /var/www/html,默认文件是里面的index.html,如果存在这个文件那我们看到的会是这个文件的内容,如果不存在显示的测试页。
我们先去编辑 vim /var/www/html/index.html 文件,随便写入内容来测试
明显看到访问到的默认页就出现变化了,显示的内容就是我刚写的。如果不想让默认访问到这个文件,那就需要编辑配置文件去更改。
新建另一个文件并写入内容vim /var/www/html/test.html,
编辑主配置文件:vim /etc/httpd/conf/httpd.conf,
在找到该配置,并在index.html的前面插入test.html 因为这个是有访问顺序的如果test.html不存在就会顺延访问后面的文件,
重启服务:systemctl restart httpd,再去访问http服务看效果
-
默认发布目录
默认的发文目录是 /var/www/html,我们先新建新的目录:mkdir -p /test/html
在目录里写文件 vim test.html 内容是/test/html’s page。
编辑主配置文件:vim /etc/httpd/conf/httpd.conf
#注销之前默认目录,写入 DocumentRoot “/westos/html”
还需要在下面写入授权,允许所有人访问
然后再更改新目录的安全上下文和之前的默认目录的一致:semanage fcontext -a -t httpd_sys_content_t ‘/westos(/.*)?’
刷新加载的安全上下文:restorecon -RvvF /westos/
重启服务:systemctl restart httpd ,访问http://192.168.0.10:888
Apache的访问控制
创建目录:mkdir /var/www/html/test
在这个目录里写文件:vim /var/www/html/test/index.html
内容:testdir’s page
用两台主机去访问http://192.168.0.10/test/ 可以看到两台主机都可以访问这个目录
-
基于客户端ip的访问控制
IP的白名单设置
编辑:vim /etc/httpd/conf/httpd.conf,在里面写入配置
<Directory “/var/www/html/test”>
Order Deny,Allow #先加载Deny,后加载Allow
Allow from 192.168.0.10 #允许10访问
Deny from All #禁止所有访问
< /Directory>
保存后重启服务,再用两台主机尝试访问
192.168.0.20的主机被拒绝了,但是192.168.0.10还是可以。
这个配置的意义就是,先加载的Deny,Deny写的是禁止所有,然后加载Allow去覆盖Deny的设定,允许192.168.0.10,就形成了仅允许 10 访问。
IP黑名单设置
同样去主配置文件里写配置
<Directory “/var/www/html/test”>
Order Allow,Deny #先加载Allow,后加载Deny
Allow from All #允许所有访问
Deny from #仅禁止192.168.0.10访问
< /Directory>
保存后重启服务,用两台主机尝试访问。
192.168.0.10主机访问自己的http服务被拒绝了,但是192.168.0.20和其他的IP都可以访问到。 -
基于用户认证
我们可以创建加密用户,从而让文件的访问需要输入用户和密码才可以访问,操作如下:
编辑配置文件 vim /etc/httpd/conf/httpd.conf,在里面写入
<Directory “/var/www/html/test”>
AuthUserfile /etc/httpd/htpasswdfile #指定认证文件,文件名可以自定义
AuthName “Please input your name and password” #认证提示语
AuthType basic #认证类型
Require valid-user #允许所有用户通过认证
< /Directory>
写完要重启服务生效
命令:htpasswd -cm /etc/httpd/htpasswdfile testuser ,生成认证文件和认证用户
命令:htpasswd -cm /etc/httpd/htpasswdfile testroot,再添加认证用户
**注意:**当/etc/httpd/htpasswdfile存在那么在添加用户时不要加-c参数否则会覆盖源文件内容
设定好后,通过firefox访问http://192.168.0.10/test 就需要用户登录,用户就是我们刚设置的,输入用户密码后就可以访问了
测试两个用户都可以访问,如果要设置只允许testroot用户通过验证,还需要去更改配置,将Require valid-user更改为Require user testroot,表示允许通过的认证用户 是testroot。
保存重启服务,清空浏览器缓存后再访问http://192.168.0.10/test ,测试testuser用户输入后无法跳转访问文件
但是testroot用户就可以正常访问
Apache的虚拟主机
一般情况下我们去使用Apache服务发布网站,想让其他人也可以来访问我们的网站,在正常情况下,别人只能通过访问我们的IP地址来访问网站,像这样:
如果想让我们的服务被人像baidu.com那样被人访问,简单的操作是我们可以在客户主机的/etc/hosts 文件里写上 192.168.0.11 www.test.com ,解析我们的IP就是test .com 这个网址。
然后去访问www.test.com这个网址就会自动解析到我们的IP上
浏览器去访问也是一样的
但是像百度这样的网站除了它的主网站www.baidu.com还有很多的子网站例如http://news.baidu.com/、https://tieba.baidu.com/ 等等网站
但是在我们目前的网站访问我们的IP可以看到的只有一个网站,如果我们也想要用户通过我们的网站不同的域名访问到我们不同的内容,那就需要搭建虚拟主机去设置不同的域名
- 首先建立目录mkdir -p /var/www/test.com/{news,tieba}
- 在/var/www/test.com/{news,tieba} 下面的文件index.html里写入一些不同的内容
- 编辑配置文件 vim /etc/httpd/conf.d/Vhost.conf
vim /etc/httpd/conf.d/Vhost.conf
在文件里写入内容:
<VirtualHost _default_:80> #访问端口用默认的80
DocumentRoot "/var/www/html"
CustomLog logs/default.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName tieba.test.com #指定服务名称
DocumentRoot "/var/www/test.com/tieba" #指定网站的路径
CustomLog logs/tieba.log combined #将tieba的日志都保存在该路径下
</VirtualHost>
<VirtualHost *:80>
ServerName news.test.com
DocumentRoot "/var/www/test.com/news"
CustomLog logs/news.log combined
</VirtualHost>
保存配置后重启服务。
- 在访问的主机 /etc/hosts 配置文件里,给192.168.0.11 www.test.com 后面加上news.test.com 和 tieba.test.com
- 然后用浏览器分别去访问www.test.com、news.test.com、tieba.test.com等网站
这样就满足了我们让其他人可以访问我们不同的域名看到不同类型的访问内容,并且都是在同一个IP的Apache服务下。
Apache的语言支持
- html 语言,这个是在Apache服务里默认支持的语言,其他的语言是需要下载各自的对应程序去使用
- php 语言
测试php语言首先我们需要使用软件仓库安装php
安装后在 /etc/httpd/conf.d 目录里就会有 php.conf 配置文件
建立php语言支持的默认页 vim /var/www/html/index.php 在里面用php语言编写它的测试页
然后使用firefox 访问 http://192.168.0.11/index.php,就可以访问到它的测试页了
- perl语言,这是一个动态脚本,它的作用是为了让我们Apache服务以外的程序可以通过Apache来共享,打开的功能其实是 cgi (通用网关接口)
测试这个cgi功能,首先我们建立一个目录来存放这些内容
mkdir /var/www/html/cgidir,编辑文件vim /var/www/html/cgidir/index.cgi,在里面写入语言内容编辑一个动态指令
这个指令可以在我们访问index.cgi文件时可以查看当前的系统时间。还需要用chmod +x /var/www/html/cgidir/index.cgi 添加可执行的权限,并且更改cgidir这个目录的安全上下文和/var/www/cgi-bin这个目录一致
刷新更改后的安全上下文
然后还需要配置 vim /etc/httpd/conf.d/Vhost.conf,在里面写入
重启httpd,再去用 firefox 访问http://192.168.0.11/cgidir/index.cgi
Apache的加密访问
加密认证访问就是在我们访问域名是前面会出现https这个标识,而这个认证正常是需要通过正规渠道去获取的
但是这里我们只是来演示这个功能的作用和效果,所以会自己来生成一个加密认证使用。
在rhel8中,Apache 的加密方式已经改为命令直接可以去生成,首先我们安装所需的插件 mod_ssl :
然后生成文件存放路径根据我们在 /etc/httpd/conf.d/ssl.conf 中看到的信息密匙和证书都存放在这个目录里
命令:openssl genrsa -out 输出路径 2048 ,生成密匙,加密的位数不写默认是2048,也可以自定义2048或者1024等;
命令:openssl req -new -key 密匙路径 -out 输出路径 ,生成证书签证;
命令:openssl x509 -req -days 365 -in 证书签证路径 -signkey 密匙路径 -out 输出路径,表示生成证书;
x509 表示证书格式,-req 表示请求,-in 表示加载签证命令, -signkey 表示加载密匙命令。
生成完成后,我们需要去编辑我们网站的配置文件 /etc/httpd/conf.d/Vhost.conf 写入如下配置:
<VirtualHost *:80>
ServerName www.test.com
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1
</VirtualHost>
<VirtualHost *:443>
ServerName www.test.com
DocumentRoot "/www/test.com"
CustomLog logs/host.log combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.test.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.test.com.key
</VirtualHost>
^(/.*)$ 表示客户地址栏中输入的地址;
%{HTTP_HOST} 表示客户主机;
$1 表示RewriteRule后面跟的第一串字符的值。
写完后保存重启服务,然后去用另一台有写本地地址解析的主机去访问www.test.com,就会直接变为https认证,因为我们没有通过认证,所以要访问的话需要下载证书
Squid和Apache服务
Squid 有两种方式,squid有两种方式:一种是正向代理,相当于我们常说的翻墙,就是将我们的不能直接去访问的国外网站,让我们在国内的主机通过可以去访问的国外主机去访问那些网站,如youtube,facebook等;
另一种是反向代理,为了让我们可以更快的访问服务器而在本地去搭建一个服务器去访问更快速便捷的访问公司的服务器,例如像百度腾讯这样的公司如果让离他们本公司的服务器很远的用户去访问,会被自身的网速和距离限制访问速度,所以在很多地方搭建服务器去访问他们的主服务器,使用户可以更快速的通过本地服务器去访问主服务器。
正向代理
实验环境:
一台单网卡主机设定ip不能上网,172.25.254.20;
一台双网卡主机设定ip1可以连接单网卡主机,设定ip2可以上网。192.168.0.10,172.25.254.10。
- 在双网卡主机操作
安装squid插件
编辑配置文件/etc/squid/squid.conf ,设置59行访问允许所有人,打开65行配置,并且可以看到squid所用的端口使3128
启动squid服务,在火墙里添加3128端口
- 在单网卡主机里
打开浏览器,在设置里找到网络设置
进入网络设置,然后设置如下
完成后点ok返回,再去访问www.baidu.com 发现就可以看到网页了,但是在shell中ping www.baidu.com 是不通的
所以可以发现,我们访问到的百度网页并不是真正从我们单网卡主机上网的,而是通过链接双网卡主机,通过它的代理去看到外网。
反向代理
实验环境:
第一台主机设定IP为192.168.0.20,开启squid服务;
第二台主机设定IP为192.168.0.10,搭建Apache服务器,设定一个网站,可以通过它的IP访问;
第三台主机设定IP为192.168.0.102,普通主机。
-
在192.168.0.20主机里安装squid,编辑squid的配置文件
vim /etc/squid/squid.conf,允许所有人访问,接口改为80,vhost 支持虚拟域名 vport 支持虚拟端口,
添加一条配置 “cache_peer 192.168.0.10 parent 80 0 proxy-only” 当192.168.0.20的80端口被访问会从192.168.0.10的80端口缓存数据
完成后重启服务,在火墙里添加80端口
-
然后去192.168.0.102主机浏览器访问访问20主机,可以发现访问到的内容是192.168.0.10 Apache服务器的网站
更多推荐
所有评论(0)