什么是www
- www是world wide web的缩写,及万维网,也就是全球信息广播的意思
- 通常说的上网就是使用www来查询用户所需要的信息。
- www可以结合文字、图形、影像以及声音等多媒体,超链接的方式将信息以Internet传递到世界各 处去.
- 当你连接www网站,该网站会提供一些数据,客户端要使用可以解析这些数据的软件来处理,那就 是浏览器
网址
URI:Uniform Resource Identifier统一资源标识,分为URL和URN URN:Uniform Resource Naming,统一资源命名P2P下载使用的磁力链接是URN的一种实现 URL:Uniform Resorce Locator,统一资源定位符用于描述某服务器某特定资源位置
两者区别:而URL提供查找该事物的方法。URN仅用于命名,而不指定地址
URL组成
Scheme 方案 访问服务器以获取资源时要使用哪种协议
user 用户 某些方案访问资源时需要的用户名
password 密码 用户对应的密码,中间用:分隔
scheme 方案 访问服务器以获取资源时要使用哪种协议
host 主机 资源宿主服务器的主机名或IP地址
port 端口 资源宿主服务器正在监听的端口号,很多方案有默认端口号
path 路径 服务器资源的本地名,由一个/将其与前面的URL组件分隔
params 参数 指定输入的参数,参数为名/值对,多个参数,用;分隔 query 查询 传递参数给程序,如数据库,用?分隔,多个查询用&分隔
frag 片段 一小片或一部分资源的名字,此组件在客户端使用 用#分隔
HTTP简介
1.HTTP协议:全称为Hyper Text Transfer Protocol(超文本传输协议)
2.简单来说http就是从服务器传输超文本(html)到本地浏览器的传输协议
3.HTTP协议工作于B/S架构上,浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务端发送请 求(Request)Web服务端根据接收到的请求数据后,向客户端发送响应信息(Response)
4.https://developer.mozilla.org/zh-CN/docs/Web
http工作机制
一次http事务包括: ①http请求:http request ②http响应: http response
Web资源: web resource
一个网页由多个资源(文件)构成,打开一个页面,通常会有多个资源展示出来,但是每个资源都要单独请 求。因此,一个"Web页面”通常并不是单个资源,而是一组资源的集合
资源类型:
静态文件:无需服务端做出额外处理,服务器端和客户端的文件内容相同
常见文件后缀:.html,.txt,.jpg,.js,.css,mp3,avi
动态文件:服务端执行程序,返回执行的结果,服务器端和客户端的文件内容不相同
常见文件后缀:.php,jsp,asp
web中常用的语言介绍
html语言 超文本标记语言
http访问请求完整过程
- 建立连接: TCP的3次握手建立链接,向服务器发送http请求,服务器拒绝或允许
- .接受请求 接受客户端请求报文对某个资源的一次请求过程web响应访问模型
- 处理请求: 服务器对请求报文进行解析,并获取请求的资源及请求方法等相关信息,根据方法,资源,首部和可选 的主体部分对请求进行处理常用请求Method: GET、POST、HEAD、PUT、DELETE、TRACE、OPTIONS
- 访问资源: 服务器获取请求报文中请求的资源web服务器,即存放了web资源的服务器,负责向请求者提供对方请求 的静态资源,或动态运行后生成的资源 .构建响应报文:
- 一旦Web服务器识别除了资源,就执行请求方法中描述的动作,并返回响应报文。响应报文中包含有响 应状态码、响应首部,如果生成了响应主体的话,还包括响应主体
- 响应实体:如果事务处理产生了响应主体,就将内容放在响应报文中回送过去。响应报文中通常包括: 描述了响应主体MIME类型的Content-Type首部 描述了响应主体长度的Content-Length 实际报文的主体内容 2)URL重定向:web服务构建的响应并非客户端请求的资源,而是资源另外一个访问路径 3)MIME类型:Web服务器要负责确定响应主体的MIME类型。多种配置服务器的方法可将MIME类型 与资源管理起来
- 发送响应报文 Web服务器通过连接发送数据时也会面临与接收数据一样的问题。服务器可能有很多条到各个客户端的 连接,有些是空闲的,有些在向服务器发送数据,还有一些在向客户端回送响应数据。服务器要记录连 接的状态,还要特别注意对持久连接的处理。对非持久连接而言,服务器应该在发送了整条报文之后, 关闭自己这一端的连接。对持久连接来说,连接可能仍保持打开状态,在这种情况下,服务器要正确地 计算Content-Length首部,不然客户端就无法知道响应什么时候结束
http协议报文头部结构
请求报文由三部分组成即:开始行、首部行、是体主体
开始行:请求方法 url 版本 CRLF
首部行通常用键值表示
空格
实体主题数据,一般在post动作中可以提看到
开始行中的请求方法:
响应报文由三部分组成即:开始行、首部行、是体主体
开始行:http版本 状态码 短语 CRLF
首部行通常用键值表示
空格
实体主题数据,即获取内容
状态代码
web服务的配置详解
web服务的常用种类
Apache Nginx openresty 大厂自研
Nginx的安装
开源版本的Nginx官网: http://nginx.org Nginx
在安装的过程中可以选择源码安装也可以选择使用软件包安装
源码安装下载相应的源码压缩包解压后编译完成安装
软件安装包可以使用rpm或者apt命令进行安装,也可以使用dnf通过软件仓库安装
以软件仓库安装为例: 配置软件仓库
]# vim /etc/yum.repos.d/nginx.repo
[nginx] name=nginx
baseurl=http://nginx.org/packages/rhel/9/x86_64
gpgcheck=0
执行安装命令
]# dnf install nginx –y
启动服务并启用服务
]# systemctl enable --now nginx.service
]# firewall-cmd --permanent --add-service=http
]# firewall-cmd –reload
在安装nginx之前还要配置好系统的软件仓库,nginx的安装需要通过系统软件仓库来解决依赖性
Nginx涉及到的文件
主配置目录:/etc/nginx
相关配置文件:/etc/nginx/
├── conf.d #子配置目录
├── default.conf #子配置文件
├── fastcgi_params #fastcgi变量文件,用于识别php
├── mime.types #媒体类型文件
├── nginx.conf #主配置文件
├── scgi_params #scgi变量文件,用于识别perl
└── uwsgi_params #uwsgi变量文件,用于识别python
/var/log/nginx #日志文件
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
location = /50x.html { root } } /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;
}
}
Nginx配置
nginx虚拟主机
默认情况下nginx只能发布一个站点
如果要发布多个站点需要搭建多台nginx来满足,如果这样会浪费太多资源
为解决上述问题,启用nginx的虚拟主机即可
虚拟主机有两种模式,基于IP或者基于域名
基于IP的虚拟主机
]# ip addr add 172.25.254.111/24 dev ens160
]# ip addr add 172.25.254.222/24 dev ens160
]# mkdir -p /usr/share/nginx/vhostroot/{111,222}/html
]# echo 172.25.254.111 > /usr/share/nginx/vhostroot/111/html/index.html
]# echo 172.25.254.222 > /usr/share/nginx/vhostroot/222/html/index.html
]# vim vhost_ip.conf
server{
listen 172.25.254.111:80;
location / {
root /var/www/virtualdir/111/html;
index index.html index.htm
}
}
server{
listen 172.25.254.222:80;
location / {
root /var/www/virtualdir/222/html;
index index.html index.htm
}
}
]# curl 172.25.254.222:8080
172.25.254.222
]# curl 172.25.254.111
172.25.254.111
基于域名的虚拟主机
]# mkdir -p /usr/share/nginx/vhostroot/{bbs,news}/html
]# echo news.easylee.org > /usr/share/nginx/vhostroot/news/html/index.html
]# echo bbs.easylee.org > /usr/share/nginx/vhostroot/bbs/html/index.html
]# vim vhost_name.conf
server {
listen 80; server_name bbs.easylee.org;
location / {
root /usr/share/nginx/vhostroot/bbs/html;
index index.html index.htm;
}
}
server {
listen 80;
server_name news.easylee.org;
location / {
root /usr/share/nginx/vhostroot/bbs/html;
index index.html index.htm;
}
}
在测试时因为虚拟主机是基于域名的,执行测试命令的主机需要做本地解析
]# vim /etc/hosts
172.25.254.100 bbs.easylee.org news.easylee.org
web服务器的访问控制
基于IP的访问控制
]# mkdir -p /usr/share/nginx/vhostroot/bbs/html/admin
]# echo admin pape > /usr/share/nginx/vhostroot/bbs/html/admin/index.html
]# vim vhost_name.conf
server {
listen 80;
root /usr/share/nginx/vhostroot/bbs/html;
index index.html index.htm;
server_name bbs.easylee.org;
location / {
}
location /admin/ {
allow 172.25.254.100;
deny all;
}
}
在100中访问
]# curl bbs.easylee.org/admin/
admin page
在其他主机中访问
] ➤ curl bbs.easylee.org/admin/
403 Forbidden
nginx/1.24.0
基于认证的访问控制
]# yum install httpd-tools-2.4.57-5.el9.x86_64 -y
]# htpasswd -cm /etc/nginx/.htpasswd admin
New password:
Re-type new password:
Adding password for user admin
htpasswd -c 表示新建认证文件,无论认证文件存不存在
当认证文件存在时加-c参数会把认证文件之前的内容全部清空
设置认证访问控制
]# vim vhost_name.conf
server {
listen 80;
root /usr/share/nginx/vhostroot/bbs/html;
index index.html index.htm;
server_name bbs.easylee.org;
location / {
}
location /admin/ {
auth_basic on;
auth_basic_user_file /etc/nginx/.htpasswd;
}
}
未输入用户密码
]# curl bbs.easylee.org/admin/
401 Authorization Required
nginx/1.24.0
输入用户没密码
]# curl bbs.easylee.org/admin/ -uadmin:lee
admin page
web服务器的数据加密(https)
- 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之间
SSL 是“Secure Sockets Layer”的缩写,中文叫做“安全套接层”。它是在上世纪90年代中期,由网景 公司设计的。到了1999年,SSL 应用广泛,已经成为互联网上的事实标准。IETF 就把SSL 标准化。 标准化之后SSL被改为 TLS(Transport Layer Security传输层安全协议)
部署https
]# mkdir -p /etc/nginx/certs
]# openssl req -newkey rsa:2048 -nodes -sha256 \ -keyout /etc/nginx/certs/easylee.org.key -x509 -days 365 \-out /etc/nginx/certs/easylee.org.crt
--------------------------------------
按照提示填入相应信息
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:Shannxi
Locality Name (eg, city) [Default City]:Xi'An
Organization Name (eg, company) [Default Company Ltd]:easylee Organizational Unit Name (eg, section) []:web
Common Name (eg, your name or your server's hostname)[]:www.easylee.org
Email Address []:lee@easylee.org
我们生成的证书需要通过CA机构认证才能投入生产环境中
CA就是一个公认的公证单位,你可以自行产生一把密钥且制作出必要的证书数据并向CA单位注册, 那么当客户端的浏览器在浏览时,该浏览器会主动向CA单位确认该证书是否为合法注册过,如果 是,那么该次连接才会建立,如果不是,浏览器会发出警告信息,告知用户应避免建立连接
配置nginx开启https功能
]# mkdir /usr/share/nginx/vhostroot/login/html -p
]# echo login.easylee.org > /usr/share/nginx/vhostroot/login/html/index.html
]# vim vhost_name.conf
server {
listen 443 ssl;
server_name login.easylee.org; ssl_certificate /etc/nginx/certs/easylee.org.crt; ssl_certificate_key /etc/nginx/certs/easylee.org.key; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /usr/share/nginx/vhostroot/login/html;
index index.html index.htm;
}
}
当开启https后客户一般情况下不会在浏览器中特别添加https去访问,
我们需要强制客户在访问某些站点时使用加密
]# vim vhost_name.conf
server {
listen 80;
server_name login.easylee.org;
rewrite ^/(.*)$ https://login.easylee.org/$1 permanent;
}
^/(.*)$ 这时正则表达式语法表示匹配浏览器地址栏中的所有内容
$1 login.easylee.org/xxx 这个地址转换时保留xxx
Permanent 表示永久转换301
搭建动态网站
①动态网站指网站内容可根据不同情况动态变更的网站,一般情况下动态网站通过数据库进行架构。
②动态网站除了要设计网页外,还要通过数据库和编程序来使网站具有更多自动的和高级的功能。
③动态网页:使用网页脚本语言,比如php、JSP等,通过脚本将网站内容动态存储到数据库,用户访 问网站是通过读取数据库来动态生成网页的方法
生成php测试页
]# mkdir -p /usr/share/nginx/html/php
]# vim /usr/share/nginx/html/php/index.php
<?php
phpinfo();
?>
配置web服务器对php页面的发布
server {
listen 80;
server_name localhost;
location ~ \.php$ {
root /usr/share/nginx/html/php;
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;