搭建web服务器
- www 简介
- 网址及 HTTP 简介
- HTTP 协议请求的工作流程
- www 服务器的基本配置
- 实验
- 实验一
- 实验二、基于多个虚拟主机IP、基于多个虚拟端口、基于个人Web站点的Web网站
www 简介
网址及 HTTP 简介
web 服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在 redhat 中,这个目录默认在/var/www/html。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的
-
URL:Uniform Resource Locator,统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址。
-
网址格式:<协议>://<主机或主机名>[:port]/<目录资源,路径>
-
浏览器常支持的协议有:http、https、ftp 等
-
主机地址或者主机名:主机地址就是服务器在因特网所在的 IP 地址。如果是主机名的话,那么就需要域名解析了
-
端口号(port):http 为 80,https 为 443 (IANA:互联网数字分配机构)
-
0-1023:众所周知,永久地分配给固定的应用程序使用,特权端口(只有管理员有权限启用并让进程监听)
-
1024-41951:亦为注册端口,但要求不是特别严格,分配给程序注册为某应用使用:3306/TCP
-
41952-60000:客户端程序随机使用的端口,动态端口,或私有端口
-
-
http 请求方法:在 http 通信中,每个 http 请求报文都包含一个方法,用以告诉 web 服务器端需要执行哪些具体的动作,这些动作包括:获取指定 web 页面、提交内容到服务器、删除服务器上资源文件等。
-
状态代码:由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值。
-
1xx:指示信息 —— 表示请求已接收,继续处理
-
2xx:成功 —— 表示请求已被成功接收、理解、接受
-
3xx:重定向 —— 要完成请求必须进行更进一步的操作
-
4xx:客户端错误 —— 请求有语法错误或请求无法实现
-
5xx:服务器端错误 —— 服务器未能实现合法的请求
-
常见状态代码、状态描述的说明如下:
-
200 OK:客户端请求成功
-
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
-
401 Unauthorized:请求未经授权,这个状态代码必须和WWW-Authenticate 报头域一起使用
-
403 Forbidden:服务器收到请求,但是拒绝提供服务
-
404 Not Found:请求资源不存在,举个例子:输入了错误的URL
-
500 Internal Server Error:服务器发生不可预期的错误
-
503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常
-
-
HTTP 报文:http 报文中有很多行内容,这些行的字段内容都是由一些 ASCII码串组成,但各个字段的长度是不同的。http 报文可分为两种,一种是从web 客户端发往 web 服务器的 http 报文,称为请求报文。另外一种是从 web服务器发往 web 客户端的报文,称为响应报文
HTTP 协议请求的工作流程
(1)终端客户在 web 浏览器地址栏输入访问地址http://www.ceshi.com:80/index.html
(2)web 浏览器请求 DNS 服务器把域名 www.ceshi.com 解析成 web 服务器的 IP地址
(3)web 浏览器将端口号(默认是 80)从访问地址(URL)中解析出来
(4)web 浏览器通过解析后的 ip 地址及端口号与 web 服务器之间建立一条 TCP连接
(5)建立 TCP 连接后,web 浏览器向 web 服务器发送一条 HTTP 请求报文
(6)web 服务器响应并读取浏览器的请求信息,然后返回一条 HTTP 响应报文。
(7)web 服务器关闭 HTTP 连接,关闭 TCP 连接,web 浏览器显示访问的网站内容到屏幕上。
www 服务器的基本配置
使用yum命令查找httpd服务yum search httpd
下载安装httpd服务yum install httpd.x86_64 -y
启动httpd服务,并查看httpd服务状态情况
systemctl start httpd
systemctl status httpd
在我们的物理机上做访问WEB网页的实验 首先要保证物理机与虚拟机在同一个网段,而且能够ping通
之后开启防火墙的80端口
[root@localhost redhat]# firewall-cmd --permanent --add-port=80/tcp
success
[root@localhost redhat]# firewall-cmd --permanent --add-service=http
success
[root@localhost redhat]# firewall-cmd --reload
success
[root@localhost redhat]#
此时已经可以在物理机的浏览器输入虚拟机IP地址查看到HTTP的首页
如果发现超时那就是因为防火墙的问题,检查一下自己的虚拟机防火墙端口和服务都开放了么
如果都开放了还提示:HTTP/1.1 Forbidden
被拒绝,意思是权限不够,可以关闭物理机的防火墙试试
下面就可以开始编辑配置文件来搭建个人网页了
[root@x1 redhat]# cd /etc/httpd/conf
[root@x1 conf]# ls
httpd.conf httpd.conf.bak magic
[root@x1 conf]# vim httpd.conf
补充:命令模式下:set nu
可以显示文件行数
配置所有的访问请求都授权了
在httpd.conf这个配置文件中配置浏览器访问的网页根目录:可以自定义更改
开放访问/var/www目录的权限
Options Indexes FollowSymLinks
语句:如果该虚拟目录下没有 index.html,浏览器会显示该虚拟目录的目录结构,列出该虚拟目录下的文件和子目录。
AllowOverride None
: 完全忽略.htaccess
文件(超文本文件)
设置浏览器默认访问的网页为index.html
创建一个简单的测试网页
[root@x2 ~]# cd /etc/httpd/conf
[root@x2 conf]# ls
httpd.conf magic
[root@x2 conf]# vim httpd.conf
[root@x2 conf]# cd /var/www/html
[root@x2 html]# mkdir stu
[root@x2 html]# cd stu/
[root@x2 stu]# echo "this student score web">index.html
[root@x2 stu]# cat index.html
this student score web
实验
实验一
搭建一个 web 服务器,访问该服务器时显示“hello world”欢迎界面。
[root@x2 ~]# echo hello world > /var/www/html/index.html
[root@x2 ~]# curl 192.168.80.130
hello world
实验二、基于多个虚拟主机IP、基于多个虚拟端口、基于个人Web站点的Web网站
1.搭建基于IP地址的虚拟主机
[root@localhost redhat]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
ifcfg-ens160
[root@localhost network-scripts]# vim ifcfg-ens160
在文件中的IP地址字段下面添加两个IP地址
重启网络服务,查看虚拟机的IP地址,发现确实多了两个IP地址
[root@localhost network-scripts]# ifup ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
[root@localhost network-scripts]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000link/ether 00:0c:29:6b:46:66 brd ff:ff:ff:ff:ff:ffinet 192.168.80.129/24 brd 192.168.80.255 scope global dynamic noprefixroute ens160valid_lft 1796sec preferred_lft 1796secinet 192.168.80.100/24 brd 192.168.80.255 scope global secondary noprefixroute ens160valid_lft forever preferred_lft foreverinet 192.168.80.200/24 brd 192.168.80.255 scope global secondary noprefixroute ens160valid_lft forever preferred_lft foreverinet6 fe80::20c:29ff:fe6b:4666/64 scope link noprefixroute valid_lft forever preferred_lft forever
尝试用物理机ping虚拟机新加的地址
配置虚拟主机IP地址的网页访问主目录和网页index.html文件
[root@localhost network-scripts]# cd /var/www/
[root@localhost www]# mkdir 100 200
[root@localhost www]# echo 192.168.80.100 test website > 100/index.html
[root@localhost www]# echo 192.168.80.200 test website > 200/index.html
配置虚拟主机ip地址的httpd配置文件
回到配置文件的目录下面,创建一个vhost目录,里面专门存放虚拟IP地址的配置文件,然后在httpd服务的主配置文件中引用这个目录
[root@localhost 100]# cd /var/www/200/
[root@localhost 200]# vim index.html
[root@localhost 200]# cd /etc/httpd/conf
[root@localhost conf]# cd ..
[root@localhost httpd]# ls
conf conf.d conf.modules.d logs modules run state
[root@localhost httpd]# mkdir vhost
[root@localhost httpd]# cd vhost/
[root@localhost vhost]# touch 100.conf 200.conf
[root@localhost vhost]# ls
100.conf 200.conf
配置虚拟主机IP的配置文件
[root@localhost vhost]# vi 100.conf
[root@localhost vhost]# cat 100.conf
<VirtualHost 192.168.80.100>DocumentRoot "/var/www/100"DirectoryIndex index.html<Directory "/var/www/100">Options Indexes FollowSymLinksAllowOverride NoneRequire all granted</Directory>
</VirtualHost>
[root@localhost vhost]# vi 200.conf
[root@localhost vhost]# cat 200.conf
<VirtualHost 192.168.80.200>DocumentRoot "/var/www/200"DirectoryIndex index.html<Directory "/var/www/200">Options Indexes FollowSymLinksAllowOverride NoneRequire all granted</Directory>
</VirtualHost>
[root@localhost vhost]#
配置/etc/httpd/conf/httpd.conf
主配置文件引用vhost
目录里的虚拟主机IP的.conf
配置文件
补充:快捷键Shift+g
可以直接到达文件最后一行
在主配置文件的末尾加上
重启httpd服务,在物理机浏览器查看虚拟主机IP的网页配置
[root@localhost vhost]# systemctl restart httpd
2.搭建基于端口号的虚拟主机
首先创建网页文件html
[root@localhost redhat]# cd /var/www/
[root@localhost www]# mkdir 8081 8082
[root@localhost www]# ls
100 200 8081 8082 cgi-bin html
[root@localhost www]# echo 8081 port test web > 8081/index.html
[root@localhost www]# echo 8082 port test web > 8082/index.html
然后在vhost目录下配置这两个虚拟端口的配置文件
[root@localhost www]# cd /etc/httpd/
[root@localhost httpd]#
[root@localhost httpd]# cd vhost/
[root@localhost vhost]# cp 100.conf 8081.conf
[root@localhost vhost]# cp 100.conf 8082.conf
[root@localhost vhost]# ls
100.conf 200.conf 8081.conf 8082.conf
[root@localhost vhost]# vi 8081.conf
[root@localhost vhost]# vi 8082.conf
[root@localhost vhost]# cat 8081.conf
<VirtualHost 192.168.80.129:8081>DocumentRoot "/var/www/8081"DirectoryIndex index.html<Directory "/var/www/8081">Options Indexes FollowSymLinksAllowOverride NoneRequire all granted</Directory>
</VirtualHost>
[root@localhost vhost]# cat 8082.conf
<VirtualHost 192.168.80.129:8082>DocumentRoot "/var/www/8082"DirectoryIndex index.html<Directory "/var/www/8082">Options Indexes FollowSymLinksAllowOverride NoneRequire all granted</Directory>
</VirtualHost>
配置/etc/httpd/conf/httpd.conf
主配置文件引用vhost目录里的虚拟主机IP的.conf
配置文件,上面已经写了这一步了,然后还要配置端口号
[root@localhost vhost]# vi ../conf/httpd.conf
在监听端口低下添加监听8081与8082端口
配置完成保存退出,防火墙运行端口8081和8082通过,重启httpd服务,测试虚拟端口是否可用
[root@localhost vhost]# firewall-cmd --permanent --add-port=8081/tcp
success
[root@localhost vhost]# firewall-cmd --permanent --add-port=8082/tcp
success
[root@localhost vhost]# firewall-cmd --reload
success
[root@localhost vhost]# setenforce 0
[root@localhost vhost]# getenforce
Permissive
[root@localhost vhost]# systemctl restart httpd
3.个人Web站点的发布
[root@localhost vhost]# cd /etc/httpd/conf.d
[root@localhost conf.d]# ls
autoindex.conf README userdir.conf welcome.conf
[root@localhost conf.d]# cp userdir.conf userdir.conf.bak
[root@localhost conf.d]# vi userdir.conf
进入文件目录中修改一些配置
配置完成,重启httpd服务
[root@localhost conf.d]# systemctl restart httpd
使用用户user1访问个人网站
新增用户user1,并设置密码
[root@localhost conf.d]# useradd user1
[root@localhost conf.d]# passwd user1
Changing password for user user1.
New password:
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic
Retype new password:
passwd: all authentication tokens updated successfully.
创建个人站点网页文件
[root@localhost conf.d]# su - user1
[user1@localhost ~]$ cd ..
[user1@localhost home]$ chmod -Rf 711 user1
[user1@localhost home]$ mkdir -p user1/public_html/
[user1@localhost home]$ echo user1 test website > user1/public_html/index.html
测试: