目录
(1)搭建一个web服务器,访问该服务器时显示“hello world”欢迎界面 。
1、web服务器简介
1、 www所用的协议: 浏览器怎样向web服务器请求数据以及服务器怎样把文档传送给浏览器呢?这就是 由http协议来定义的,(Hyper Text Transport Protocol,HTTP,超文本传输协议)。
2、www服务器需要提供可让客户端浏览的平台。目前最主流的Web服务器是Apache、Microsoft的 Internet信息服务器(Internet Information Services,IIS)和unix nginx。
3、服务器所提供的最主要数据是超文本标记语言(Hyper Text Markup Language,HTML)、多媒体 文件(图片、影像、声音、文字等,都属于多媒体或称为超媒体),HTML只是一些纯文本数据,通过所谓 的标记来规范所要显示的数据格式。
4、客户端收到服务器的数据之后需要软件解析服务器所提供的数据,最后将效果呈现在用户的屏幕上。那 么著名的浏览器就有内建在Windows操作系统内的IE浏览器了,还有Firefox浏览器和Google的 chrome浏览器。
2、web服务器的类型
(1)仅提供用户浏览的单向静态网页 单纯是由服务器单向提供数据给客户端,Server不需要与client端有互动,所以你可以到该网站上去浏 览,但是无法进行数据的上传。
(2)提供用户互动接口的动态网站 这种类型的网站可以让服务器与用户互动,常见的例如留言板,博客。这种类型的网站需要通过“网页程 序语言”来实现与用户互动的行为。常见的例如:PHP网页程序语言,配合数据库系统来进行数据的读、 写。当你在向服务器请求数据时,其实是通过服务器端同一个网页程序在负责将数据读出或写入数据 库,变动的是数据库的内容,网页程序并没有任何改变。
另外一种交互式的动态网页主要是在客户端实现。服务端将可执行的程序代码(JavaScript)传送给客户端,客户端的浏览器如果提供JavaScript的功能,那么该程序就可以在客户端的计算机上面工作了;另外 一种可在客户端执行的就是flash动画格式,在这种动画格式内还可以进行程序设计。搭建动态网站的需 求:
3、web服务器基本配置
#安装nginx软件包:
[root@server ~]# yum install nginx -y
#以树状图显示nginx配置文件目录:
[root@server ~]# tree /etc/nginx/
/etc/nginx/
├── conf.d #子配置文件目录
├── default.d
├── fastcgi.conf
├── fastcgi.conf.default
├── fastcgi_params #用以翻译nginx的变量供php识别
├── fastcgi_params.default
├── koi-utf
├── koi-win
├── mime.types #用以配置支持的媒体文件类型
├── mime.types.default
├── nginx.conf #主配置文件
├── nginx.conf.default
├── scgi_params
├── scgi_params.default
├── uwsgi_params #用以配置nginx的变量供python识别
├── uwsgi_params.default
└── win-utf
#显示nginx默认的网站根目录(通常包含静态网页文件)
[root@server ~]# tree /usr/share/nginx/html/
#显示nginx日志目录(通常包含访问日志和错误日志)
[root@server ~]# tree /var/log/nginx
#搜索匹配nginx的主配置文件中不以#开头的行(即非注释行)
[root@server ~]# grep ^[^#] /etc/nginx/nginx.conf
#关闭防火墙
[root@server ~]# systemctl disable firewalld --now
#将SELinux设置为宽容模式
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive
#重启nginx进程:
[root@server ~]# systemctl restart nginx
#curl:这是一个命令行进行数据传输的工具,支持多种协议包括http、https、ftp等等
#测试可以使用curl命令访问web服务器或者使用浏览器访问
[root@server ~]# curl -I localhost
HTTP/1.1 200 OK #表示使用的HTTP协议版本
Server: nginx/1.20.1 #服务器软件的名称和版本。这里显示的是Nginx 1.20.1
Date: Fri, 25 Oct 2024 15:48:29 GMT
Content-Type: text/html #返回内容的MIME类型。这里表示返回的内容是HTML文档
Content-Length: 2713881 #返回内容的长度(以字节为单位)。这里表示返回的HTML文档大小为2,713,881字节。
Last-Modified: Tue, 04 Jun 2024 22:57:12 GMT
Connection: keep-alive #连接管理方式。这里表示保持连接打开
ETag: "665f9bc8-296919" #实体标签,用于缓存验证。ETag是一个唯一标识符,用于判断资源是否被修改
Accept-Ranges: bytes #指示服务器是否接受范围请求。这里表示服务器接受按字节范围请求,允许客户端请求部分内容
4、实验 --- 基于http协议的静态网站
(1)搭建一个web服务器,访问该服务器时显示“hello world”欢迎界面 。
[root@server ~]# echo "hello world" > /usr/share/nginx/html/index.html
#测试
[root@server ~]# curl localhost
hello world
[root@server ~]# curl 192.168.88.5
hello world
(2)实验2:建立两个基于ip地址访问的网站
该网站ip地址的主机位为100,设置首页目录为/www/ip/100,网页内容为:this is 100
该网站ip地址的主机位为200,设置首页目录为/www/ip/200,网页内容为:this is 200。
首先确保虚拟机上有两个IP地址(可用nmtui图形界面配置,在使用nmcli connection up ens160命令激活)
#递归创建目录,并且显示每一个被创建的目录:
[root@server ~]# mkdir -pv /www/ip/{1,2}00
mkdir: created directory '/www'
mkdir: created directory '/www/ip'
mkdir: created directory '/www/ip/100'
mkdir: created directory '/www/ip/200'
#将内容写入到指定文件中:
[root@server ~]# echo this is 100 > /www/ip/100/index.html
[root@server ~]# echo this is 200 > /www/ip/200/index.html
#更改SELinux设置:
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive
#编辑nginx配置文件下的ip测试文件:
[root@server ~]# vim /etc/nginx/conf.d/test_ip.conf
server {
listen 192.168.88.100:80;
root /www/ip/100;
location / {
}
}
server {
listen 192.168.88.200:80;
root /www/ip/200;
location / {
}
}
#重启nginx服务:
[root@server ~]# systemctl restart nginx
#使用curl向配置文件中写入的IP地址发送HTTP请求:
[root@server ~]# curl 192.168.88.100
this is 100
[root@server ~]# curl 192.168.88.200
this is 200
(3)建立两个基于不同端口访问的网站
建立一个使用 web 服务器默认端口的网站,设置网站首页目录为 /www/port/80 ,网页内容为: the port is 80 。
建立一个使用 10000 端口的网站,设置网站首页目录为 /www/port/10000 ,网页内容为: the port
is 10000 。
#递归创建目录,并且显示每一个被创建的目录:
[root@server ~]# mkdir -pv /www/port/{80,10000}
mkdir: created directory '/www/port'
mkdir: created directory '/www/port/80'
mkdir: created directory '/www/port/10000'
#创建对应的网页文件并写入内容:
[root@server ~]# echo this port is 80 > /www/port/80/index.html
[root@server ~]# echo this port is 10000 > /www/port/10000/index.html
#进入图形界面添加IP,并激活网络:
[root@server ~]# nmtui
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
#编辑nginx的配置文件:
[root@server ~]# vim /etc/nginx/conf.d/test_port.conf
server {
listen 192.168.88.120:80;
root /www/port/80;
location / {
}
}
server {
listen 192.168.88.120:10000;
root /www/port/10000;
location / {
}
}
#重启nginx服务:
[root@server ~]# systemctl restart nginx
#向指定端口的IP地址进行HTTP的请求测试:
[root@server ~]# curl 192.168.88.120
this port is 80
[root@server ~]# curl 192.168.88.120:80
this port is 80
[root@server ~]# curl 192.168.88.120:10000
this port is 10000
(4)建立两个基于域名访问的网站
新建一个网站,域名为www.ceshi.com,设置网站首页目录为/www/name,网页内容为this is test。
新建一个网站,域名为rhce.first.day,同时可通过ce.first.day访问,设置网站首页目录 为/www/ce,网页内容为:today is first day of class。
#进入图形界面添加ip,并激活网络:
[root@server ~]# nmtui
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
#以递归的方式创建文件,并且显示被创建的文件:
[root@server ~]# mkdir -pv /www/{name,ce}
mkdir: created directory '/www/name'
mkdir: created directory '/www/ce'
#向指定文件写入内容:
[root@server ~]# echo this is a test > /www/name/index.html
[root@server ~]# echo today is first day of class > /www/ce/index.html
#编辑nginx网页配置文件:
[root@server ~]# vim /etc/nginx/conf.d/test_servername.conf
server {
listen 192.168.88.130:80;
server_name www.ceshi.com; #server_name 指令用于指定该服务器块处理的域名
root /www/name;
location / {
}
}
server {
listen 192.168.88.130:80;
server_name rhce.first.day ce.first.day;
root /www/ce;
location / {
}
}
[root@server ~]# vim /etc/hosts
192.168.88.130 www.ceshi.com rhce.first.day ce.first.day
#更改SELinux状态,并且检查其状态:
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive
使用curl进行测试:
[root@server ~]# curl www.ceshi.com
this is a test
[root@server ~]# curl rhce.first.day
today is first day of class
[root@server ~]# curl ce.first.day
today is first day of class
(5)基于虚拟目录和用户控制的web网站
#进入图形界面添加IP,并激活网络:
[root@server ~]# nmtui
[root@server ~]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)
[root@server ~]# mkdir /www/real/
[root@server ~]# echo real_virtual > /www/real/index.html
[root@server ~]# systemctl restart nginx
[root@server ~]# vim /etc/nginx/conf.d/test_virtualdir.conf
server {
listen 192.168.88.140:80;
root /usr/share/nginx/html;
location /real { #指令用于定义如何处理特定的 URL 路径。在这个例子中,它定义了对路径 /real 的处理方式
alias /www/real; #alias 指令将指定的路径映射到另一个文件系统路径。在这个例子中,当客户端请求 /real 路径时,Nginx 会将其映射到 /www/real 目录
auth_basic on; #auth_basic 指令启用基本认证(Basic Authentication)。这意味着访问该路径需要用户名和密码。
auth_basic_user_file /etc/nginx/conf.d/auth-password; #auth_basic_user_file 指令指定存储用户名和密码的文件
}
}
#使用yum安装httpd-tools包
[root@server ~]# yum install httpd-tools -y
#htpasswd:生成或更新HTTP基本认证密码文件的工具
#添加一个新用户,并且创建一个密码文件从命令行中读取密码:
[root@server ~]# htpasswd -cb /etc/nginx/conf.d/auth-password user1 123
Adding password for user user1
[root@server ~]# systemctl restart nginx
[root@server ~]# curl 192.168.88.140
hello world
[root@server ~]# curl 192.168.88.140/real/
<html>
<head><title>401 Authorization Required</title></head>
<body>
<center><h1>401 Authorization Required</h1></center>
<hr><center>nginx/1.20.1</center>
</body>
</html>
[root@server ~]# curl 192.168.88.140/real/ -u user1
Enter host password for user 'user1':
real_virtual
5、基于https协议的静态网站
https网站配置
[root@server certs]# nmtui
[root@server certs]# nmcli connection up ens160
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/3)
#禁用并立即停止firewalld服务:
[root@server ~]# systemctl disable firewalld --now
#将SElinux模式设置为宽松模式:
[root@server ~]# setenforce 0
[root@server ~]# getenforce
Permissive
#创建相关的目录以及文件:
[root@server ~]# mkdir -pv /www/https/
mkdir: created directory '/www/https/'
[root@server ~]# echo https > /www/https/index.html
[root@server ~]# cd /etc/pki/tls/certs/
#生成一个私钥文件:
[root@server certs]# openssl genrsa -out https.key
#生成一个自签名证书:
[root@server certs]# openssl req -utf8 -new -key https.key -x509 -days 100 -out https.crt
#编辑nginx的配置文件:
[root@server certs]# vim /etc/nginx/conf.d/test_https.conf
server { #定义一个新的服务器块。Nginx 使用这种结构来组织和管理不同的虚拟主机(Virtual Host)
listen 192.168.88.150:443 ssl; #指定服务器监听的 IP 地址和端口。在这里,服务器监听 192.168.88.150 的 443 端口,并且启用了 SSL(HTTPS)
root /www/https; #指令设置服务器的根目录。当客户端请求一个文件时,Nginx 会从这个目录中查找文件
ssl_certificate /etc/pki/tls/certs/https.crt; #指令指定 SSL 证书文件的位置
ssl_certificate_key /etc/pki/tls/certs/https.key; #指令指定 SSL 私钥文件的位置
location / { #指令用于定义如何处理特定的 URL 路径
}
}
#重启nginx服务:
[root@server certs]# systemctl restart nginx
#测试
[root@server certs]# curl --insecure https://192.168.88.150
https
[root@server certs]# curl -k https://192.168.88.150
https