第四章、WEB服务器的部署及优化
1.用户常用关于web的信息
1.1什么是www
1.www是world wide web的缩写,及万维网,也就是全球信息广播的意思
2.通常说的上网就是使用www来查询用户所需要的信息。
3.www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以Internet传递到世界各处去。
4.当你连接www网站,该网站会提供一些数据,客户端要使用可以解析这些数据的软件来处理,那就是浏览器。
1.2网址
1.URI:Uniform Resource Identifier统一资源标识,分为URL和URN
2.URN:Uniform Resource Naming,统一资源命名,P2P下载使用的磁力链接是URN的一种实现
3.URL:Uniform Resorce Locator,统一资源定位符用于描述某服务器某特定资源位置
4.两者区别:而URL提供查找该事物的方法。URN仅用于命名,而不指定地址
1.3URL组成
URL组成机构如下:
<scheme>://<user>:<password>@<host>:<port>/<path>:<params>?<query>#<frag>
每部分的定义
scheme | 方案 | 访问服务器以获取资源时要使用哪种协议 |
user | 用户 | 某些方案访问资源时需要的用户名 |
password | 密码 | 用户对应的密码,中间用:分隔 |
host | 主机 | 资源宿主服务器的主机名或IP地址 |
port | 端口 | 资源宿主服务器正在监听的端口号,很多方案有默认端口号 |
path | 路径 | 服务器资源的本地名,由一个/将其与前面的URL组件分隔 |
params | 参数 | 指定输入的参数,参数为名/值对,多个参数,用;分隔 |
query | 查询 | 传递参数给程序,如数据库,用?分隔,多个查询用&分隔 |
frag | 片段 | 一小片或一部分资源的名字,此组件在客户端使用,用#分隔 |
2.HTTP简介
2.1什么是HTTP
1.HTTP协议:全称为Hyper Text Transfer Protocol(超文本传输协议)
2.简单来说http就是从服务器传输超文本(html)到本地浏览器的传输协议
3.HTTP协议工作于B/S架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务端发送请求(Request)Web服务端根据接收到的请求数据后,向客户端发送响应信息(Response)
2.2http工作机制
1.一次http事务包括:
http请求:http request
http响应: http response
2.Web资源: web resource
一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源展示出来,但是每个资源都要单独请求。因此,一个"Web页面”通常并不是单个资源,而是一组资源的集合
资源类型:
静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同
常见文件后缀:.html,.txt,.jpg,.js,.css,mp3,avi
动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同
常见文件后缀:.php,jsp,asp
2.3HTTP访问请求完整过程
1.建立连接:
TCP的3次握手建立链接,向服务器发送http请求,服务器拒绝或允许。
2.接受请求
接受客户端请求报文对某个资源的一次请求过程web响应访问模型。
3.处理请求:
服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选的主体部分对请求进行处理常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS。
4.访问资源:
服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求的静态资源,或动态运行后生成的资源。
5.构建响应报文:
一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括:
描述了响应主体MIME类型的Content-Type首部
描述了响应主体长度的Content-Length
实际报文的主体内容
1)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径
2)MIME类型:Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型
与资源管理起来。
6发送响应报文
Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后,关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地计算Content-Length首部,不然客户端就无法知道响应什么时候结束。
2.4.http协议报文头部结构
求情报文由三部分组成即:开始行、首部行、实体主体
开始行:请求方法 url 版本 CRLF
首部行通常用键值表示
实体主题数据,一般在post动作中可以提看到
开始行中的请求方法:
方法 | 描述 |
GET | 请求指定页面信息,并返回实体主体 |
HEAD | 类似get要求,只不过返回相应中没有主题内容,用户获取报头 |
POST | 向指定资源提交数据请求,数据包含在请求中,此请求可能会生成新的资源或修改已有资源 |
PUT | 从客户端向服务端传送数据取代指定的文档内容 |
DELETE | 请求服务器删除指定页面 |
CONNECT | HTTP/1.1协议中预留给弄够将改为管道方式的代理服务器 |
OPTIONS | 允许客户端查看服务器的性能 |
TRACE | 回显服务器收到的请求,用于测试和诊断 |
求情报文由三部分组成即:开始行、首部行、实体主体
开始行:http版本 状态码 短语 CRLF
首部行通常用键值表示
实体主题数据,即获取内容
2.5状态代码
状态码由三位数字组成,第一个数字定义了响应的类别,且有五种可能取值
状态码 | 含义 | 详解 |
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 | 服务器当前不能处理客户端的请求,一段时间后可能恢复正常 |
3.web服务的配置详解
3.1web服务的常用种类
Apache
Nginx
openresty
大厂自研
3.2Nginx的安装
安装之前配置好软件仓库即可
dnf install nginx -y
3.3配置文件详解
主配置文件路径/etc/nginx
├── conf.d #子配置目录
│ ├── default.conf #子配置文件
├── fastcgi_params #fastcgi变量文件,用于识别php
├── mime.types #媒体类型文件
├── nginx.conf #主配置文件
├── scgi_params #scgi变量文件,用于识别perl
└── uwsgi_params #uwsgi变量文件,用于识别python
日志文件路径/etc/log/nginx
3.4nginx相关文件解释
nginx的全局配置
user nginx; #nginx程序运行用户
worker_processes auto; #开启work进程数量
error_log /var/log/nginx/error.log notice; #错误日志
pid /var/run/nginx.pid; #pid文件
events {
worker_connections 1024; #可接受最大连接数
}
http模块配置
http {
include /etc/nginx/mime.types; #可解析的静态资源类型
default_type application/octet-stream; #用来配置Nginx响应前端请求默认的MIME类型
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main; #访问日志
sendfile on; # Nginx服务器是否使用sendfile()传输文件
#tcp_nopush on; # 当包累计到一定大小后就发送,默认0.2s一次
keepalive_timeout 65; # 长连接超时时间
#gzip on; #可以使网站的css、js 、xml、html 等静态资 源在传输时进行压缩
include /etc/nginx/conf.d/*.conf; #指定子配置文件
}
子配置文件
/etc/nginx/conf.d/default.conf
server {
listen 80; #监听端口
server_name localhost; #服务器的名字
location / {
root /usr/share/nginx/html; #默认发布目录
index index.html index.htm; #默认发布文件
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; #访问出错呈现错误页面
location = /50x.html {
root /usr/share/nginx/html;
}
}
3.5nginx的虚拟主机的配置
1.基于ip的虚拟主机的配置
首先建立两个文件夹
建立站点
添加两个ip地址
在/etc/nginx/conf.d下编写配置文件(基于ip地址的)
2.基于域名的
由于主机不知道域名,所以可以配置/etc/hosts
访问
4.web服务器的访问控制
4.1基于ip的访问控制
范围小的放在前面
设置172.25.254.135可以访问
allow 172.25.254.135;
deny all;
修改配置文件nginx.conf
172.25.254.135可以访问
设置172.25.254.135不可以访问
deny 172.25.254.135;
allow all;
修改配置文件nginx.conf
172.25.254.135不能访问
4.2基于认证的访问控制
下载httpd-tools,下载之后配置
htpasswd -cm /etc/nginx/.htpasswd admin
修改配置文件nginx.conf
此时访问的需要密码
5.web服务器的数据加密
-
HTTP协议以明文方式发送内容,不提供任何方式的数据加密,
-
HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等
-
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。
-
HTTPS全称:Hyper Text Transfer Protocol over Secure Socket Layer ),是以安全为目标的HTTP通道
-
HTTPS并不是一个新协议,而是HTTP+SSL(TLS)
-
原本HTTP先和TCP直接通信,而加了SSL后,就变成HTTP先和SSL通信,再由SSL和TCP通信相当于
SSL被嵌在了HTTP和TCP之间
5.1部署https
mkdir /etc/nginx/certs -p #创建一个目录用于存放证书相关文件
openssl req -newkey rsa:2048 -nodes -sha256 -keyout /etc/nginx/certs/timinglee.org.key -x509 -days 365 -out /etc/nginx/certs/timinglee.org.crt #使用 OpenSSL 工具生成一个自签名的 SSL 证书请求并创建一个有效期为 365 天的自签名证书
按照提示填入相关信息
配置nginx开启https功能
mkdri /nginx/virtual/timinglee.org/login/html/ -p
echo login.timinglee.org > /nginx/virtual/timinglee.org/login/html/index.html
#创建index.html
进入如下目录:
/etc/nginx/conf.d
下创建https.conf
server{
listen 443 ssl;
server_name login.timinglee.org;
root /nginx/virtual/timinglee.org/login/html;
ssl_certificate "/etc/nginx/certs/timinglee.org.crt";
ssl_certificate_key "/etc/nginx/certs/timinglee.org.key";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
}
/etc/nginx/conf.d
下修改vhosts.conf
利用从定向的办法来强制客户使用加密访问方式
server{
listen 80;
server_name login.timinglee.org;
rewrite ^/(.*)$ https://login.timinglee.org/$1;
}
^/(.*)$ #这时正则表达式语法表示匹配浏览器地址栏中的所有内容
$1 login.easylee.org/xxx #这个地址转换时保留xxx
permanent #表示永久转换301
访问
5.2搭建动态网站
-
动态网站指网站内容可根据不同情况动态变更的网站,一般情况下动态网站通过数据库进行架构。
-
动态网站除了要设计网页外,还要通过数据库和编程序来使网站具有更多自动的和高级的功能。
-
动态网页:使用网页脚本语言,比如php、JSP等,通过脚本将网站内容动态存储到数据库,用户访
问网站是通过读取数据库来动态生成网页的方法
配置web服务器对php站点的支持
dnf install php -y #下载php
nginx -s reload #刷新
访问页面
http://172.25.254.135/index.php
结果: