目录
二、下载apache http server程序实现服务端的简单访问
1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!!
一、Web服务器搭建简介:
能够通过一个web服务程序也就是我们常说的apache,基于http超文本传输协议将当前服务端主机的资源文件传送到客户端主机。
服务器所提供的最主要数据是超文本标记语言(Hyper Text Markup Language,HTML)、多媒体文件(图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML只是一些纯文本数据,通过所谓的标记来规范所要显示的数据格式。
web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在redhat中,这个目录默认在 /var/www/html 。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的。
URL:Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址
http请求方法: 在http通信中,每个http请求报文都包含一个方法,用以告诉web服务器端需要执行哪些具体的动作,这些动作包括:获取指定web页面、提交内容到服务器、删除服务器上资源文件等。
二、下载apache http server程序实现服务端的简单访问
基本配置:主要是在服务端server
首先需要关闭防火墙和selinux
[root@Jcl ~]# systemctl stop firewalld
[root@Jcl ~]# setenforce 0
挂载yum源
[root@Jcl ~]# mount /dev/sr0 /mnt
mount: /mnt: /dev/sr0 已挂载于 /run/media/root/RHEL-9-1-0-BaseOS-x86_64.
如果之前有编辑过yum源配置文件最好先清空再重新编辑
[root@Jcl ~]# rm -rf /etc/yum.repos.d/*
[root@Jcl ~]# vim /etc/yum.repos.d/base.repo[BaseOS]
name=BaseOS
baseurl=file:///mnt/BaseOS
gpgcheck=0
[AppStream]
name=AppStream
baseurl=file:///mnt/AppStream
gpgcheck=0
编辑完保存退出就可以下载httpd程序了
[root@Jcl etc]# yum install httpd -y
正在更新 Subscription Management 软件仓库。
无法读取客户身份本系统尚未在权利服务器中注册。可使用 subscription-manager 进行注册。
BaseOS 135 MB/s | 1.7 MB 00:00
AppStream 66 MB/s | 6.1 MB 00:00
软件包 httpd-2.4.53-7.el9.x86_64 已安装。
依赖关系解决。
无需任何处理。
完毕!
最后启动httpd
[root@Jcl etc]# systemctl start httpd
在任意的客户机浏览器中通过:http://服务器ip
例如:http://192.168.248.132
可以进入到红帽的官方测试界面中,什么原因导致会访问到redhat的测试界面中呢,其实就是服务器默认的通过apache服务程序访问到默认目录下的一个资源文件。
三、配置文件的主要参数
接下来我们怎样自定义资源文件呢?
1、首先在我们的/etc/httpd目录下有这些文件
├── conf
│ ├── httpd.conf
│ └── magic
├── conf.d
│ ├── autoindex.conf
│ ├── README
│ ├── userdir.conf
│ └── welcome.conf
├── conf.modules.d
│ ├── 00-base.conf
│ ├── 00-dav.conf
│ ├── 00-lua.conf
│ ├── 00-mpm.conf
│ ├── 00-proxy.conf
│ ├── 00-systemd.conf
│ └── 01-cgi.conf
├── logs -> ../../var/log/httpd
├── modules -> ../../usr/lib64/httpd/modules
└── run -> /run/httpd
配置文件:
(1)主要的配置文件 /etc/httpd/conf/httpd.conf 。
(2)额外的参数文件 /etc/httpd/conf.d/*.conf 。
如果你不想要修改原始配置文件httpd.conf的话,那么你可以将你自己的额外参数文件独立出来,例如你想要有自己的额外设置值,可以将它写入 /etc/httpd/conf.d/zhuji.conf (注意,扩展名一定是.conf),而启动Apache时,这个文件就会被读入主要配置文件当中了。
(3)默认的首页所在目录 /var/www/html/ ,当输入网址时所显示的数据,就是放在这个目录当中的首页文件(默认为index.html)。
(4)默认给一些可执行的CGI(网页程序)程序放置的目录 /var/www/cgi-bin/ ,当输入网址/cgi-bin/时所显示的数据所在。
(5)默认的Apache日志文件都放在 /var/log/httpd/ ,对于流量比较大的网站来说,一个星期的日志文件的数据可以达到1GB左右。
2、参看配置文件的主要参数
[root@localhost ~]# vim /etc/httpd/conf/httpd.conf
31 ServerRoot "/etc/httpd" #http服务的顶级目录为/etc/httpd
42 Listen 80 #监听在80端口,80为web服务器的默认端口
56 Include conf.modules.d/*.conf #包括/etc/httpd/conf.modules.d/*.conf的所有文件
66 User apache #服务的用户(ps -ef | grep httpd,先以root用户把/usr/sbin/httpd服务启动起来)。启动服务后转换的身份,在启动服务时通常以root身份,然后转换身份,这样增加系统安全
67Group apache
86 ServerAdmin root@localhost #你的邮箱,有事的时候给你发邮件
95 #ServerName www.example.com:80 ServerName 0.0.0.0:80匹配任意IP地址,监听端口在80端口
注:默认是不需要指定的,服务器通过名字解析过程来获得自己的名字,但如果解析有问题(如反向解析不正确),或者没有DNS名字,也可以在这里指定ip地址,当这项不正确的时候服务器不能正常启动。解决办法就是启动该项把www.example.com:80修改为自己的域名或者直接修改为localhost
102 <Directory /> #目录为根,<>为起始标志,</>为结束标志
103 AllowOverride none #不允许这个目录下的访问控制文件来改变这里的配置,这也意味着不
用查看这个目录下的访问控制文件。
104 Require all denied #拒绝访问根
105 </Directory> #和<Directory />是一组标签,目录控制容器
119 DocumentRoot "/var/www/html" #网页文件存放的目录
124 <Directory "/var/www">
125 AllowOverride None
126 # Allow open access:
127 Require all granted
128 </Directory>
131 <Directory "/var/www/html">
144 Options Indexes FollowSymLinks #索引,跟踪软链接
151 AllowOverride None
156 Require all granted
157 </Directory>
163 <IfModule dir_module> #加载一个目录模块
164 DirectoryIndex index.html
165 </IfModule>
171 <Files ".ht*"> #不能访问隐藏文件
172 Require all denied
173 </Files>
182 ErrorLog "logs/error_log"
189 LogLevel warn
191 <IfModule log_config_module>
#日志配置模块 /var/log/httpd,日志模块:通过时间节点去记录(man date)
196 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{ Referer}i\" \"%{UserAgent}i\"" combined
197 LogFormat "%h %l %u %t \"%r\" %>s %b" com mon
198
199 <IfModule logio_module>
201 LogFormat "%h %l %u %t \"%r\" %>s %b \" %{Referer}i\" \"%{UserAgent}i\" %I %O" combi nedio
202 </IfModule>
217 CustomLog "logs/access_log" combined
218 </IfModule>
220 <IfModule alias_module> #别名模块
247 ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
248
249 </IfModule>
#cgi(通用网关接口)是web服务器运行时外部程序的规范,按cgi编写的程序可以扩展服务器的功能。cgi应用程序能与浏览器进行交互,还可通过数据库API与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据
255 <Directory "/var/www/cgi-bin">
256 AllowOverride None
257 Options None
258 Require all granted
259 </Directory>
261 <IfModule mime_module> #多用途互联网邮件扩展模块
266 TypesConfig /etc/mime.types
283 AddType application/x-compress .Z
284 AddType application/x-gzip .gz .tgz
305 AddType text/html .shtml
306 AddOutputFilter INCLUDES .shtml
307 </IfModule>
#mime多用途互联网邮件扩展类型,是设定某种扩展名的文件用一种应用程序来打开的方式类型,当该扩展名文件被访问时,浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名,以及一些媒体文件打开方式。
316 AddDefaultCharset UTF-8 #默认字符集
318 <IfModule mime_magic_module>
324 MIMEMagicFile conf/magic
325 </IfModule>
348 EnableSendfile on
353 IncludeOptional conf.d/*.conf
3、欢迎测试界面的来由
之所以会访问到测试界面是因为http默认访问的是/etc/httpd/conf.d/welcome.conf文件
接下来我们vim进去看一下里面的配置有哪些
<LocationMatch "^/+$">
Options -Indexes
ErrorDocument 403 /.noindex.html
</LocationMatch> 基于一个模块选择索引这里不详细介绍<Directory /usr/share/httpd/noindex>
AllowOverride None 不允许被覆盖
Require all granted 设置允许访问
</Directory>以下代码就是为网页做一个别名,/不是系统文件的根目录而是我们网页默认的根目录即/var/www/html
Alias /.noindex.html /usr/share/httpd/noindex/index.html--存储了欢迎界面的代码信息
Alias /poweredby.png /usr/share/httpd/icons/apache_pb3.png
1、解释
以上我们说了默认查找网页文件目录就是/var/www/html文件,但其实这个文件里面什么也没有为什么依旧能访问到我们的欢迎界面呢
其实就是因为Alias /.noindex.html /usr/share/httpd/noindex/index.html这一句配置将后面的真实欢迎界面文件路径虚拟定义到网页的根目录下成为一个隐藏的索引文件,然后/var/www/html/index.html文件不存在,所以就自动访问定义的别名也就是前面的隐藏文件路径
4、自定义网页访问资源文件
以上我们说了因为网页根目录下没有那个文件所以自动访问了隐藏文件,那我们在/var/www/html文件下自定义一个文件就默认访问的是我们自定义的资源文件
所以接下来我们切换到html目录下编辑一个资源文件
再重新访问一下这个服务器
[root@Jcl noindex]# vim /var/www/html/index.html
hello 李聪
就可以看到网页成为我们自己定义的了
四、搭建虚拟静态web网站
前面我们说到了web服务端默认的主配置文件,只需要在/var/www/html/index.html下更改资源文件就行了,那如果我们需要访问多个网页资源文件,那就需要自己再创建一个子配置目录下配置一个虚拟的主机及我们的资源文件
怎么配置呢,可以查看一下事例文件 ,路径:/usr/share/doc/httpd-core/httpd-vhosts.conf
<VirtualHost *:80>
ServerAdmin webmaster@dummy-host.example.com 设置服务的管理员
DocumentRoot "/var/www/dummy-host.example.com" 局部生效的文件路径
ServerName dummy-host.example.com 服务名是通过域名还是ip访问
ServerAlias www.dummy-host.example.com 服务别名
ErrorLog "/var/log/httpd/dummy-host.example.com-error_log" 错误日志保存路径
CustomLog "/var/log/httpd/dummy-host.example.com-access_log" common 访问日志保存路径
</VirtualHost>
1、如果我们要访问不同的网页怎么实现
可以通过不同的传输协议:http https
不同的域名(多域名)
不同的ip(多ip)
不同的端口(多端口)
2、创建虚拟主机配置文件
[root@Jcl conf.d]# pwd
/etc/httpd/conf.d
[root@Jcl conf.d]# vim vhost.conf
1)通过多ip访问多网站
(1)当前主机添加多个ip
这里不多介绍参照:红帽(RedHat9.0)IP配置_redhat怎么改ip-CSDN博客
(2)配置文件中配置多个虚拟主机标签(通过虚拟主机访问不同的网站)
[root@Jcl ~]# vim /etc/httpd/conf.d/vhost.conf
1<VirtualHost 192.168.248.132:80> 建立132ip的虚拟主机监听端口为80
2 # ServerAdmin webmaster@dummy-host.example.com
3 DocumentRoot /www/132 设置主目录
4 ServerName 192.168.248.132 设置主机名
5 #ServerAlias www.dummy-host.example.com
6 # ErrorLog "/var/log/httpd/dummy-host.example.com-error_log"
7 #CustomLog "/var/log/httpd/dummy-host.example.com-access_log" common
8 </VirtualHost>
9 <VirtualHost 192.168.248.100:80> 建立100IP的虚拟主机监听端口为80
10 DocumentRoot /www/100
11 ServerName 192.168.248.100
12 </VirtualHost>
13
14 <VirtualHost 192.168.248.110:80>
15 DocumentRoot /www/110
16 ServerName 192.168.248.110
17 </VirtualHost>
18 <Directory /www> 设置主目录访问控制
19 AllowOverride none 不能被覆盖
20 Require all granted 允许被访问
21 </Directory>
(3)根据配置创建资源文件
[root@Jcl ~]# mkdir /www/{132,100,110} -pv p表示多级创建 v表示显示详情信息
mkdir: 已创建目录 '/www'
mkdir: 已创建目录 '/www/132'
mkdir: 已创建目录 '/www/100'
mkdir: 已创建目录 '/www/110'
[root@Jcl ~]# echo This is 132 > /www/132/index.html 将网页资源文件写入neir
[root@Jcl ~]# echo This is 100 > /www/100/index.html
[root@Jcl ~]# echo This is 110 > /www/110/index.html
[root@Jcl ~]# systemctl restart httpd 重新启动服务程序
(4)启动服务测试
浏览器中输入http://192.168.248.110及100、132
2)通过多端口访问网站
(1)监听端口
在/etc/httpd/conf.d/vhost.conf下加入
Listen 自定义的高位端口号
(2)配置虚拟标签
[root@Jcl ~]# vim /etc/httpd/conf.d/vhost.conf
18 Listen 8001
19 <VirtualHost 192.168.248.100:8001>
20 DocumentRoot /www/8001
21 ServerName 192.168.248.100
22 </VirtualHost>保存退出,创建资源文件,因为想要访问不同的网页其实就是不同的资源文件
[root@Jcl ~]# mkdir -pv /www/8001
mkdir: 已创建目录 '/www/8001'
[root@Jcl ~]# echo This is 8001 > /www/8001/index.html
(3)启动服务关闭防火墙及selinux测试
[root@Jcl ~]# systemctl restart httpd
[root@Jcl ~]# systemctl stop firewalld
[root@Jcl ~]# setenforce 0[root@Jcl ~]# netstat -tuanlp | grep httpd -> 如果上面的配置文件中没有监听端口这里只会显示80端口
tcp6 0 0 :::8001 :::* LISTEN 5685/httpd
tcp6 0 0 :::80 :::* LISTEN 5685/httpd
[root@Jcl ~]# curl http://192.168.248.100:8001 通过curl也可以测试,指定端口
This is 8001
3)通过多域名访问多网页
(1)设置IP对应的域名(多个IP可以对应多个域名)
基于域名的网站,需要用到域名解析。 域名------->ip地址 浏览器如何通过域名去查询URL对应的IP(对应服务器地址):
1、浏览器缓存:浏览器会按照一定的频率缓存DNS记录。
2、操作系统缓存:如果浏览器缓存中找不到需要的DNS记录,那就去操作系统中的hosts文件找。hosts是一个没有扩展名的系统文件,其作用就是将一些常用的网址域名与其对应的IP地址建立一个关联"数据库",当用户在浏览器中输入一个需要登录的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会再将网址提交DNS域名解析服务器进行IP地址的解析。 windows下的hosts文件路径:C:\Windows\System32\drivers\etc\hosts Linux下的hosts文件路径:/etc/hosts
3、路由缓存:路由器也有DNS缓存。
4、ISP的DNS服务器:ISP是互联网服务提供商(Internet Service Provider)的简称,ISP有专门的DNS服务器应对DNS查询请求。 5、根服务器:ISP的DNS服务器还找不到的话,它就会向根服务器发出请求,进行递归查询(DNS服务器先问根域名服务器.com域名服务器的IP地址,然后再问.com域名服务器,依次类推)
本篇文章主要演示的是方法二,利用配置host文件来设置域名
[root@Jcl etc]# vim hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.248.100 www.zly.com www.jcl.com
(2)配置虚拟标签
[root@Jcl etc]# vim /etc/httpd/conf.d/vhost.conf
<VirtualHost 192.168.248.100:80>
DocumentRoot /www/haha
ServerName www.zly.com
</VirtualHost><VirtualHost 192.168.248.100:80>
DocumentRoot /www/xixi
ServerName www.jcl.com
</VirtualHost>
[root@Jcl etc]# mkdir /www/{haha,xixi} -pv
mkdir: 已创建目录 '/www/haha'
mkdir: 已创建目录 '/www/xixi'
[root@Jcl etc]# echo This is haha > /www/haha/index.html
[root@Jcl etc]# echo This is xixi > /www/xixi/index.html
(3)重启服务测试
[root@Jcl etc]# systemctl restart httpd
[root@Jcl etc]# curl http://www.zly.com
This is haha
[root@Jcl etc]# curl http://www.jcl.com
This is xixi
五、搭建动态网站-论坛
附上连接:
Linux之动态网页---搭建论坛_在linux发布动态网页总结与展望-CSDN博客
综合练习:
请给openlab搭建web网站
网站需求:
1.基于域名[www.openlab.com](http://www.openlab.com)可以访问网站内容为 welcome to openlab!!!
(1)查看是否安装httpd软件包
[root@localhost ~]# rpm -qa | grep httpd
安装
先挂载 再yum install httpd
(2)编辑web配置文件
[root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf
#多域名配置
<VirtualHost 192.168.248.110:80>
DocumentRoot /www/openlab
ServerName www.openlab.com
</VirtualHost>
<Directory /www>
AllowOverride none
Require all granted
</Directory>
(3)编辑域名配置文件
[root@localhost ~]# vim /etc/hosts
192.168.248.132 www.openlab.com
(4)创建资源文件并输入内容
[root@localhost ~]# mkdir /www/openlab -pv
mkdir: 已创建目录 '/www'
mkdir: 已创建目录 '/www/openlab'
[root@localhost ~]# bash
[root@localhost ~]# echo welcome to openlab!!! > /www/openlab/index.html
echo welcome to openlabip a! > /www/openlab/index.html
(5)关闭防火墙selinux,重启服务
[root@localhost openlab]# systemctl stop firewalld
[root@localhost openlab]# setenforce 0
[root@localhost openlab]# systemctl restart httpd
(6)客户机测试
[root@localhost openlab]# curl http://www.openlab.com
welcome to openlab!
2.给该公司创建三个子界面分别显示学生信息,教学资料和缴费网站,基于[www.openlab.com/student](http://www.openlab.com/student) 网站访问学生信息,[www.openlab.com/data](http://www.openlab.com/data)网站访问教学资料
[www.openlab.com/money网站访问缴费网站](http://www.openlab.com/money网站访问缴费网站)。
多网站:
自定义多个索引文件
[root@localhost www]# cd openlab
[root@localhost openlab]# echo this is student.page > student
[root@localhost openlab]# echo this is data.page > data
[root@localhost www]# echo this is money.page > /www/openlab/money
[root@localhost openlab]# curl http://www.openlab.com/money
this is money.page
[root@localhost openlab]# curl http://www.openlab.com/student
this is student.page
[root@localhost openlab]# curl http://www.openlab.com/data
this is data.page
3.要求 用户访问控制
1)学生信息网站只有song和tian两人可以访问,其他用户不能访问。
(1)创建httpd验证用户
第一次创建
[root@localhost ~]# htpasswd -c /etc/httpd/users song
New password: (设置密码)
Re-type new password:
Adding password for user song
第二次创建
[root@localhost ~]# htpasswd /etc/httpd/users tian
New password:
Re-type new password:
Adding password for user tian
(2)配置用户访问控制
[root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf
<Directory /www/openlab/student>
AuthType Basic
AuthName "login..."
AuthuserFile /etc/httpd/users
Require user song tian
</Directory>
[root@localhost ~]# systemctl restart httpd
[root@localhost ~]# curl http://www.openlab.com/student -u song
Enter host password for user 'song':(输入密码)
this is student.page
[root@localhost ~]# curl http://www.openlab.com/student -u tian
Enter host password for user 'tian':
this is student.page
2)访问缴费网站实现数据加密基于https访问。
(1)下载ssl软件包
[root@localhost ~]# yum install mod_ssl -y
(2)编辑配置文件
[root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf
<VirtualHost 192.168.248.110:443>
DocumentRoot /www/private
alias /money /www/openlab/money
ServerName www.openlab.com
SSLEngine on
SSLCertificateFile /etc/pki/tls/certs/openlab.crt
SSLCertificatekeyFile /etc/pki/tls/private/openlab.key
</VirtualHost>
(3)创建资源文件
[root@localhost ~]# mkdir /www/private
(4)生成自签名证书
[root@localhost certs]# openssl req -newkey rsa:4096 -keyout /etc/pki/tls/private/openlab.key -x509 -days 365 -out /etc/pki/tls/certs/openlab.crt
...+....+........+.......+......+..............+...+...+.........+...+..........+...+.....+......+.........+......+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
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]:86
State or Province Name (full name) []:sichuan
Locality Name (eg, city) [Default City]:shifang
Organization Name (eg, company) [Default Company Ltd]:openlab
Organizational Unit Name (eg, section) []:ce
Common Name (eg, your name or your server's hostname) []:localhost
Email Address []:admin@admin.com
(5)重启服务需要输入私钥密码
[root@localhost certs]# systemctl start httpd
🔐 Enter TLS private key passphrase for www.openlab.com:443 (RSA) : ******
(6)客户端测试:https://www.openlab.com/money