• RHCE---Web 服务器



    前言

       通过上一个章节的学习了解了时间服务器以及远程连接服务器,上述两种服务器可能比较陌生,然而对于身处于互联网时代的我们,无时无刻不在接触互联网,提到互联网和我们息息相关的莫过于浏览器了,使用浏览器的同时必然绕不开Web服务器,什么是Web服务器呢,接下来让我们了解以下。


    一.Web服务器概述

            Web服务器是一种计算机程序,用于从Web浏览器接收HTTP请求并提供响应。它是在Web上发布和提供信息的必需组件之一。它可以是一台专用服务器或运行Web服务器软件的计算机。Web服务器主要有三种类型:Apache、Nginx和Microsoft Internet Information Services(IIS)。这些服务器软件可以在不同的操作系统上运行,如Windows、Linux、Unix等。

    网址及HTTP协议概述:

        web服务器提供的这些数据大部分都是文件,那么我们需要在服务器端先将数据文件写好,并且放置在某个特殊的目录下面,这个目录就是我们整个网站的首页,在redhat中,这个目录默认在 /var/www/html 。浏览器是通过你在地址栏中输入你所需要的网址来取得这个目录的数据的。  

    URL:

        URL 是 Uniform Resource Locator(统一资源定位器)的缩写,用于指定一种网络上的资源,如网页或文件,以及访问该资源的方式。URL 通常包含以下信息:

    • 协议(Protocol):指定访问该资源的协议,如 HTTP(80端口)、FTP、HTTPS(443端口) 等。
    • 主机名(Host):指定资源所在的主机名或 IP 地址。
    • 端口号(Port):指定用于访问该资源的端口号,如果没有指定端口号,则使用默认端口号。
    • 路径(Path):指定资源在服务器上的路径,表示资源所在的目录或文件名。
    • 查询参数(Query):向服务器传递额外的参数,通常用于指定要请求的资源或信息。

     HTTP协议请求过程:

     客户端在浏览器上输入URL(网址),浏览器根据URL上的主机地址(主机IP地址)寻找服务器,如果是主机名则需要先访问DNS服务器进行DNS解析,DNS服务器返回给给浏览器一个IP服务器IP地址,浏览器再根据此IP寻找服务器建立TCP连接。

    当浏览器获得请求服务器的IP地址后,浏览器向服务器发起HTTP请求报文,Web服务器收到该请求后,会根据请求报文中的URL解析出程序端口,再根据端口查询到对应程序,该程序会向浏览器返回一个HTTP响应报文(包含'请求网页的html文件,该文件保存在LIinux服务器 的/var/www/html 目录中),浏览器收到该响应后解析HTTP响应报文中的html 文件,最终呈现出我们所看见的网页。

     http请求方法

    在http通信中,每个http请求报文都包含一个方法,用以告诉web服务器端需要执行哪些具体的动作,这些动作包括:获取指定web页面、提交内容到服务器、删除服务器上资源文件等。

     常见的状态码:

    • 200 OK:客户端请求成功

    • 400 Bad Request:客户端请求有语法错误,不能被服务器所理解

    • 401 Unauthorized:请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用

    • 403 Forbidden:服务器收到请求,但是拒绝提供服务

    • 404 Not Found:请求资源不存在,举个例子:输入了错误的URL

    • 500 Internal Server Error:服务器发生不可预期的错误

    • 503 Server Unavailable:服务器当前不能处理客户端的请求,一段时间后可能恢复正常

    HTTP报文格式:

    HTTP请求报文: 

     HTTP响应报文:

     二.搭建动态HTTP网页

    动态网页概述:

    使用lamp/lnmp架构

          这种类型的网站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过“网页程序语言”来实现与用户互动的行为。常见的例如:PHP网页程序语言,配合数据库系统来进行数据的读、写。当你在向服务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数据库,变动的是数据库的内容,网页程序并没有任何改变。         

    配置命令+实验:

    1. #安装Apache服务器软件
    2. [root@localhost ~]# yum install httpd -y
    3. #打开红帽软件管理器列出安装httpd所使用的文件
    4. [root@localhost ~]# rpm -ql httpd
    5. [root@localhost httpd]# tree /etc/httpd
    •  关闭防火墙
    [root@timeserver ~]# systemctl disable --now firewalld
    • 关闭SElINUX 
    1. [root@timeserver ~]# vim /etc/selinux/config
    2. #查看selinux 修改情况
    3. [root@server html]# getenforce
    •  启动Apache服务器httpd
    1. [root@timeserver ~]# systemctl enable --now httpd
    2. #查看httpd启动情况
    3. [root@timeserver ~]# systemctl status httpd
    4. #查看监听情况
    5. [root@timeserver ~]# netstat -lntup
    6. #关闭HTTP服务
    7. [root@VM-16-13-centos ~]# systemctl stop httpd
    8. #查看端口监听情况
    9. [root@VM-16-13-centos ~]# netstat -tuln | grep 80
    10. #强制关闭端口用于解除端口占用
    11. [root@VM-16-13-centos ~]# kill 146355 #进程ID:PID
    • 上传html文件

    首先在桌面创建一个以html结尾的文件,用记事本打开,输入对应内容 以下图为例子:

    保存后,切换到 /var/www/html/目录,通过Xftp 7将文件上传到该文件中

     

     此时简单的web服务器搭建完成。可通过浏览器输入HTTP//:+服务器的IP 地址访问 

    实验2:建立两个基于ip地址访问的网站,要求如下

    • 该网站ip地址的主机位为100,设置DocumentRoot为/www/ip/100,网页内容为:this is 100。

    • 该网站ip地址主机位为200,设置DocumentRoot为/www/ip/200,网页内容为:this is 200。

     1.配置网站的IP地址

    1. #打开编辑器
    2. [root@timeserver html]# nmtui

    1. #查询虚拟机网关命令
    2. #在虚拟机控制命令界面输入
    3. [zt@timeserver ~]$ nmcli connection show ens160 | grep -i gateway

    需要重新建立连接

    此时虚拟机IP地址变为 192.168.186.100/192.168.186.200

     2.创建目录

    1. [root@timeserver html]# mkdir -pv /www/ip/{100,200}
    2. #写入内容 this is 100 / this is 200 到对应文件中
    3. [root@timeserver html]# echo 'this is 100' > /www/ip/100/index.html

    3.配置虚拟主机

    注: 需要在/etc/httpd/conf/httpd.conf中修改浏览器访问web服务器的默认路径为指定路径。

    1. [root@timeserver ~]# vim /etc/httpd/conf.d/ip.conf
    2. #编辑以下内容虚拟出两个网站
    3. <virtualhost 192.168.186.100:80> #80代表端口号
    4. servername 192.168.186.100 #代表服务器 IP地址
    5. documentroot /www/ip/100 #代表访问服务器的目录
    6. </virtualhost>
    7. #上述内容代表:可通过IP 192.168.186.100 80端口号访问目录 /www/ip/100 的内容
    8. ~
    9. <virtualhost 192.168.186.200:80> #80代表端口号
    10. servername 192.168.186.200
    11. documentroot /www/ip/200
    12. </virtualhost>
    13. #设置允许规则
    14. <directory /www>
    15. allowoverride none
    16. require all granted #代表所有人都可以访问
    17. </directory>

    实验3:建立两个基于不同端口访问的网站,要求如下:

    • 建立一个使用web服务器默认端口的网站,设置DocumentRoo为/www/port/80,网页内容为:the port is 80。

    • 建立一个使用10000端口的网站,设置DocumentRoot为/www/port/10000,网页内容为:the port is 10000。

    1. #创建目录
    2. [root@timeserver ~]# mkdir -pv /www/port/10000
    3. #编辑文件
    4. [root@timeserver ~]# vim /etc/httpd/conf.d/ip.conf
    5. #添加以下内容到文件中
    6. listen 10000 #设置监听端口
    7. <virtualhost 192.168.186.100:10000>
    8. servername 192.168.186.100
    9. documentroot /www/port/10000
    10. </virtualhost>
    11. #重启服务器
    12. [root@timeserver 10000]# systemctl restart httpd

     可通过浏览器输入HTTP//:+服务器的IP:+端口号地址访问 

    实验4:建立两个基于域名访问的网站,要求如下:

    • 新建一个网站,域名为www.ceshi.com,设置DocumentRoot为/www/name,网页内容为this is test。

    • 新建一个网站,域名为rhce.first.day,同时可通过ce.first.day访问,设置DocumentRoot为/www/ce,网页内容为:today is first day of class。

    当客户端通过域名访问Web主机的时候,会优先查找本地解析文件

    C盘  > windows > system32 > drivers > etc > hosts 使用 Visual Studio 打开 

    添加如下内容

    实验5:基于虚拟目录和用户控制的web网站

    Linux中,Web服务器的虚拟目录是指在Web服务器上创建一个或多个虚拟的目录,这些目录与物理路径不同,而是指向Web服务器上已有的某个目录虚拟目录可以在URL上和物理路径上分别有不同的路径名称,以便在Web服务器上的多个站点中实现更好的隔离和管理。虚拟目录可以通过使用Web服务器的配置文件进行设置和管理。例如,在Apache服务器中,可以通过修改httpd.conf文件或通过.htaccess文件来配置设置虚拟目录。

    1. #创建目录
    2. [root@timeserver ~]mkdir /www/xuni
    3. [root@timeserver ~]# echo xuni > /www/xuni/index.html
    4. #编辑文件内容
    5. [root@timeserver ~]# vim /etc/httpd/conf.d/ip.conf
    6. #添加一条内容 alias /virtual /www/xuni
    7. <virtualhost 192.168.186.100:80> #80代表端口号
    8. servername 192.168.186.100 #代表服务器 IP地址
    9. alias /virtual /www/xuni
    10. #代表访问/virtual时自动访问/www/xuni目录里的内容,服务器实际不存在/virtual这个目录
    11. documentroot /www/ip/100 #代表网址
    12. </virtualhost>

     设置用户控制

    1. #创建用户服务账号,并非服务账号类似于ACL列表
    2. [root@timeserver ~]htpasswd -c(指定账户存入的文件) /etc/httpd/mima haha
    3. #创建不会覆盖的用户服务账号
    4. [root@timeserver ~]htpasswd /etc/httpd/mima haha
    5. #设置该虚拟目录只有创建的服务账号可以查看
    6. [root@timeserver ~]# vim /etc/httpd/conf.d/ip.conf
    7. #编辑以下内容
    8. <directory /www/xuni>
    9. authtype basic #使用基本认证
    10. authname "please login:" #设置一个登录提示
    11. authuserfile /etc/httpd/mima #认证的文件
    12. require user haha #允许的用户
    13. </directory>

     三,搭建HTTPS网页

    HTTPS协议概述:

       超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。

        HTTPS并不是一个新协议,而是HTTP+SSL(TLS)。原本HTTP先和TCP(假定传输层是TCP协议)直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信,相当于SSL被嵌在了HTTP和TCP之间。

     哈希算法:

         哈希算法(Hash Algorithm)是一种将任意数据转换为固定长度数据的算法。通常情况下,哈希算法将数据处理为一段数字,即哈希值或摘要(digest)。哈希算法的主要特点是,对于相同的输入数据,始终产生相同的哈希值;而对于不同的输入数据,产生不同的哈希值的概率非常大。

    数据通过哈希算法转化后会得到一个散列值,对端收到后,将该数据使用使用哈希算法转化得到散列值,如果相同则数据未被篡改。

    哈希算法特点:

    • 哈希算法不能解密,可以用于数据校验 

    HTTPS协议工作流程 :

     特殊情况:钓鱼网站

       钓鱼网站用过冒充服务器与客户端建立连接,获得客户端发送给服务器的信息

    再通过冒充客户端与服务器建立连接,将真客户端的信息发送给服务器。

    简单理解为:钓鱼网站就是第三方非法中转站,会造成数据泄露。

    为了防止钓鱼网站造成数据泄露,服务器会拥有证书证明自己的身份。

    当客户端访问时,服务器会将证书发送给客户端,客户端会将证书中包含的服务器的基本信息用哈希算法转化为一个散列值1,然后再通过向证书颁发机构申请的公钥去解开数字签名,获得数字签名当中包含的散列值2(通过哈希算法转化的服务器基本信息),如果散列值 1 = 散列值 2 则代表数据未被泄露或篡改。

    配置命令:

    1. #安装支持SSH协议的软件包
    2. [root@www conf.d]# yum install mod_ssl httpd -y
    3. #生成证书
    4. [root@www conf.d]# cd /etc/pki/tls/certs/
    5. [root@www certs]# openssl genrsa -aes128 2048 > jiami.key #jiami.key是私钥文件
    6. #设置私钥文件密码
    7. Enter PEM pass phrase: 1234
    8. #确认密码
    9. Verifying - Enter PEM pass phrase: 1234
    10. #给私钥设置一个证书
    11. #-new:新证书 -key:指定私钥文件 -x509:证书标准 -days:证书有效期 -out:指定生成证书的名字
    12. [root@www certs]# openssl req -utf8 -new -key jiami.key -x509 -days 100 -out jiami.crt
    13. #输入私钥密码
    14. Enter pass phrase for jiami.key:1234
    15. #输入国家代码
    16. Country Name (2 letter code) [XX]:86
    17. #输入身份
    18. State or Province Name (full name) []:jiangsu
    19. #输入城市
    20. Locality Name (eg, city) [Default City]:nanjing
    21. #输入组织
    22. Organization Name (eg, company) [Default Company Ltd]:nanjinghangkong
    23. #输入课程名
    24. Organizational Unit Name (eg, section) []:rhce
    25. #输入域名
    26. Common Name (eg, your name or your server's hostname) []:www.ceshi.com
    27. #输入邮箱
    28. Email Address []:admin@ceshi.com
    29. #编辑 /etc/httpd/conf.d/ip.d/ 文件 搭建https网站
    30. servername www.ceshi.com
    31. documentroot /www/https
    32. #打开虚拟主机192.168.186.100的SSL功能
    33. #shift+:输入sp ssl.conf 找到以下三行内容复制,注意文件路径
    34. SSLEngine on
    35. SSLCertificateFile /etc/pki/tls/certs/jiami.crt #证书文件路径
    36. SSLCertificateKeyFile /etc/pki/tls/certs/jiami.key #证书私钥文件路径
    37. #设置允许规则
    38. allowoverride none
    39. require all granted
    40. #重启服务
    41. [root@timeserver ~]# systemctl restart httpd
    42. #输入私钥文件对应密码
    43. Enter TLS private key passphrase for www.ceshi.com:443 (RSA) : (press TAB for no echo) 1234

    由于生成的私钥证书是自己的签名并非证书颁发机构签名CA的签名,访问时会弹出警告,此时点击高级,继续访问即可。

    四.NFS服务器

    NFS服务器可以实现不同操作系统之间的文件共享,比如Linux、Unix、MacOS和Windows等。通过NFS服务器,用户可以在各个客户端之间共享文件,实现诸如数据备份、文件共享和统一管理等功能。

    NFS服务器通常会安装在Linux操作系统上,用户可以通过配置NFS服务器实现文件共享。NFS服务器可以通过设置共享目录、控制用户的访问权限等方式来保护共享文件的安全性。

    配置命令:

    1. #服务端
    2. [root@localhost ~]# yum install nfs-utils
    3. #创建共享文件
    4. [root@localhost ~]# mkdir /data
    5. [root@localhost ~]# echo "this is nfs test" > data/file1
    6. #编辑文件
    7. [root@localhost ~]vim /etc/exports
    8. #写入以下内容实现共享文件
    9. #可以使用完整的IP或者是网络号,例如172.24.8.128或172.24.8.0/24或者172.24.8.128/255.255.255.0;#也可以使用*表示所有主机
    10. /data *(rw) # * 和括号之间不能有空格
    11. #关闭防火墙以及SElinux
    12. #开启服务
    13. [root@localhost ~]systemctl enable --now nfs-server.service
    14. #查看共享文件
    15. [root@localhost ~]showmount -e 192.168.186.100
    16. #客户端
    17. #安装软件包
    18. [root@localhost ~]# yum install nfs-utils -y
    19. #查看共享文件
    20. [root@localhost ~]#show mount -e 192.168.186.100
    21. #创建挂载点目录
    22. [root@localhost ~]# mkdir /nfsclient
    23. #将文件挂载到挂载点目录
    24. [root@localhost ~]# cd /nfsclien
    25. [root@localhost ~]# mount 192.168.186.100:/data /nfclient
    26. #客户端对于服务端的挂载文件属于nobody只有 r 权限,因此需要在服务端修改权限
    27. [root@localhost ~]# chmod o+w /data/file1
    28. #使客户端的root被识别为服务端的root
    29. [root@localhost ~]# vim .etc.exports
    30. #编辑以下内容
    31. /data *(no_root_squash,rw)

    实验1:服务端在挂载点目录创建文件时身份显示为 小明 账号

    1. #新建小明账号
    2. [root@localhost ~]# useradd xiaomng
    3. #查看xiaoming 账号身份id
    4. [root@localhost ~]# id xiaoming
    5. [root@localhost ~]#vim /etc/exports
    6. #编辑以下内容
    7. /data *(anonuid=1001.rw)
    8. #重启服务
    9. [root@localhost ~]#systemctl restart nfs-server

    配置autofs自动挂载

     当客户端访问挂载目录 /nfsclient 时自动将/data目录自动挂载过来无需配置挂载

    1. #客户端安装软件
    2. [root@client ~]# yum install autofs -y
    3. [root@client ~]# vim /etc/auto.master
    4. #编辑以下内容

    1. [root@client ~]# vim /etc/auto.suibian #文件名可以自己起名
    2. #编辑以下内容
    3. data 192.168.186.100:/data
    4. #启动服务
    5. [root@client ~]# systemctl enable --now autofs


    总结

  • 相关阅读:
    垃圾回收-《JavaScript 高级程序设计》阅读笔记
    【弱监督点云分割】All Points Matter:用于弱监督三维分割的熵细化分布对齐
    云计算要学习哪些技术?
    Scrum 四个会议的正确召开方式
    威联通NAS安装Openwrt旁路由教程
    grpc系列2-针对k8s vip超时设置,自定义服务端和客户端镜像
    数据结构与算法------数组
    MATLAB中findsignal函数使用
    c++线程
    【reverse IDA使用技巧】IDA动态调试Linux_ELF配置+例题:SCUCTF新生赛2021-DebugMe
  • 原文地址:https://blog.csdn.net/zhoutong2323/article/details/133252373