1、什么是Apache
(1)世界使用最流行的Web服务器之一;
(2)可以在大多数计算机操作系统中运行;
(3)特点:简单、速度快、性能稳定,可做代理服务器;
(4)作用:在web访问时,定义的http://的协议方式(国内还有其他公司用的一些自主平台:京东(jfe);百度(nginx));
【注】可通过curl - I 域名 可查看一些域名的服务器类型
2、Apache的基本信息
用户:apache
服务名称:httpd
日志:/etc/httpd/logs
默认发布文件:index.html
默认端口:80(http);443(https)
3、Apache的安装和启用
3.1 安装的软件包: httpd.x86_64
3.2 Apache启用:systemctl start httpd
【注】若火墙中的http服务并未打开,则依旧无法访问。
查看火墙信息:firewall-cmd --list-all
查看可开启的服务:firewall-cmd --get-services
永久开启http服务:firewall-cmd --permanent --add-service=htttp(https)
刷新火墙设定,使设定生效:firewall-cmd --reload
4、Apache的基本配置
配置选项 | 修改配置文件:/etc/httpd/conf/httpd.conf | 注意事项 |
端口修改 | Listen 8080 | 1. 此参数改变需要修改配置文件 2. 端口生效时需要selinux和火墙均允许此端口 firewall-cmd --permanent --add-port=8080/tcp semanage port -l | grep http semanage port -a -t http_port_t -p tcp 8080 3. 修改完成后需要重启httpd服务 |
默认发布目录修改 | DocumentRoot "/www/html" <Directory "/www/html"> Require all granted </Directory> | 1.测试发布不成功可能会因为sselinuxs所设置的安全上下文有关,可进行如下设置: semanange fcontext -a -t httpd_sys_content_t '/www(/.*)?' restorecon -RvvF /www/ 2. 修改完成后需要重启服务 |
默认发布文件修改 | DirectoryIndex index.html |
【注】1. 查看当前http服务的端口号:netstat -antulpe | grep http
2. index.html 文件内容为HTML语言,若读者有兴趣可自行学习,配置。
5、Apache的访问控制
访问控制条件 | 修改配置文件:/etc/httpd/conf/httpd.conf | 注意事项 |
基于客户端IP的访问 | 白名单: <Directory "/var/www/html/westos"> Order Deny,Allow Allow from 192.168.0.10 Deny from All </Directory> | 1.根据order访问顺序可调整所跟的客户IP为黑名单或白名单 2. 这里只能进行IP的添加,不可用文件的形式进行传递 |
黑名单: <Directory "/var/www/html/westos"> Order Allow,Deny Allow from All Deny from 192.168.0.10 </Directory> | ||
基于用户认证的访问 | <Directory "/var/www/html/westos"> AuthUserfile /etc/httpd/htpasswdfile AuthName "Please input your name and password" AuthType basic Require user admin </Directory> | Require 后面所跟的参数可以限制用户的访问权限; valid-user 允许所有用户通过认证 user username 允许对应的用户名可访问 |
生成认证文件: htpasswd -cm /etc/httpd/htpasswdfile admin | 若/etc/httpd/htpasswdfile存在,则添加用户时不要加-c参数否则会覆盖源文件内容 |
【注】在访问过程中,由于浏览器存在缓存,可能会影响实验想过,故在每次验证前,建议清楚浏览器的缓存。
6、Apache的虚拟主机服务
为了使不同的网页信息,在同一站点下,故可使用虚拟的主机服务,在同一站点下,给不同网页分配不同的配置也页,从而达到目的。
6.1 为了效果明显我们建立以下素材:
mkdir -p /var/www/test.com/{news,wenku}
echo "wenku's page" > /var/www/test.com/wenku/index.html
echo "news's page" > /var/www/test.com/news/index.html
echo "default's page" > /var/www/html/index.html
6.2 虚拟站点的配置设置
(2)编写Virtualhost文件内容:
文件设置 | 配置结果 |
<Virtualhost _default_:80> Documentroot "/var/www/html" Customlog logs/default.log combined </Virtualhost> | 配置默认登录界面
|
<Virtualhost *:80> Servername wenku.test.com Documentroot "/var/www/test.com/wenku" Customlog logs/wenku.logs combinded </Virtualhost> | 配置域名访问为wenku.test.com的页面 |
<VirtualHost *:80> ServerName news.test.com DocumentRoot "/var/www/test.com/news" CustomLog logs/news.log combined </VirtualHost> | 配置域名访问为news.test.com的页面 |
【注】日志的存放路径在上述配置文件中写的是相对路径,因为路径在主配置文件中已经写过。
(3)内容测试:在客户主机中输入所要访问的IP,若需要通过域名访问,可在/etc/hosts的本地解析中添加解析:
【例】192.168.1.10 www.test.com wenku.test.ocm news.test.com
7、Apache支持的语言
默认 | HTML |
常用 | php,cgi |
HTML:可直接使用
【例】vim /var/httpd/index.html(php的测试页)
<?php
phpinfo();
?>
测试页(/var/www/html/cgidir)内容:
#!/usr/bin/perl
print "Content-type: text/html\n\n";
print `date`;
配置文件(/etc/httpd/conf.d/vhost.conf)内容:
<Directory "/var/www/html/cgidir">
Options +ExecCGI
AddHandler cgi-script .cgi
</Directory>
8、Apache的加密访问
rhel7中,可以通过genkey,来直接生成证书;
【例】genkey IP(站点)
安装软件:mod_ssl.x86_64,crypto-utils
生成之后,可同伙https://进行访问,并查看证书。
rhel8中,需要通过openssl服务生成证书。
【例】采用工具openssl产生密钥,并对证书进行签密
(1)安装mod_ssl软件包;
(2)产生密钥:openssl genrsa -out /etc/pki/tls/private/www.test.com.key 2048(genrsa:以rsa的方式加密,-out:输出密钥到文件***,2048:加密长度);
(3)生成证书签密文件:openssl req -new -key /etc/pki/tls/private/www.test.com.key -out /etc/pki/tls/certs/www.test.com.csr(根据新的密产生证书);
(4)证书生成:openssl x509 -req -days 365 -in /etc/pki/tls/certs/www.test.com.csr -signkey /etc/pki/tls/private/www.test.com.key -out /etc/pki/tls/certs/www.test.com.crt(-req:证书请求,-days:加密有效天数;-in:加载密签名称,-signkey:加密的密钥)
(5)修改ssl.conf(对所有网页均生效):
SSLCertificateFile /etc/pki/tls/certs/www.test.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.test.com.key
<VirtualHost *:443>
ServerName login.test.com
DocumentRoot "/www/test.com/login"
CustomLog logs/login.log combined
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/www.test.com.crt
SSLCertificateKeyFile /etc/pki/tls/private/www.test.com.key
</VirtualHost>
【注】因为加密是443端口,所以需要设定端口为443;此时在访问特定页面时需要手动添加https的服务;
(7)将手动添加转化为自动转化
<VirtualHost *:80>
ServerName login.test.com
RewriteEngine on
RewriteRule ^(/.*)$ https://%{HTTP_HOST}$1
</VirtualHost>
9、Squid+Apache
(1)Squid正向代理(代理主机<翻墙>)
实验环境:设定单网卡主机不可上网;双网卡主机可以上网;
步骤:
<1> 在双网卡主机中安装squid服务;
<2>编辑squid的配置文件(/etc/squid/squid.conf):http_access allow all;cache_dir ufs /var/spoll/squid 100 16 256;
<3>启动squide服务,设定火墙允许squid端口工作(firewall-cmd --add-port=3218/tcp)
<4>在当网卡主机中的浏览器中,选择NetWork Proxy;输入双网卡中可连接的主机IP和端口,即可在浏览器中上网。
(2)Squid反向代理(缓存网页)
实验环境:在192.168.1.10 中安装Apace服务(交互界面);在192.168.1.200 中安装Squid (负责上网) ;
步骤:
<2> 重启squid服务:ystemctl restart squid;
<3> 在网页中访问192.168.1.100即可看到192.168.1.10的配置也页内容。