客户端-服务端通信过程
请求-----响应的模型
建立连接: tcp/ip协议与服务器建立连接(三次掘手),客户端向服务器的80端口发送连接请求发送请求:一旦连接建立之后,客户端向服务端发送http请求。http请求: 由一个请求行和多个头部宁段组成。请水方式: get post
服务端处理请求:根据请求的方式和内容进行处理。服务端会读取请求头的字段,解析参数,处理数据等等.
服务端返回响应:形成,个htp响应,响应由一个响应行,包含多个字段。响应内容包含重要的内容状态码,用于表示服务端对于请求的处理结果。
http的状态码:
1xx:信息提示100-101无实际作用
2xx:成功,请求吹了结果成功200
3xx:重定向 304表示请求的是缓存
4xx:客户端错误403 404请求的页面不存在或者没有权限访问
403:请求的页面禁止访问
404:服务器无法请求的页面
5xx:服务器错误。
500内部服务器错误
500检查防火墙,检查进程也就是服务状态,检查端口,检查配置文件,端口号被占用。
502无效网关
503请求的服务器不可用,可能下线了
504网关请求超时。
生产当中常见的状态码:
200 ok 请求成功
301 永久重定向
304 访问的是本地缓存
403 Forbidden 禁止客户端访问该页面
404 NOT FOUND 服务器无法找到被请求的页面
500 inetnal server error 内部服务器错误。
502BADgetway网关失效。(服务器的网关失效)
503serverUnavailable 服务器不可用(网站维护)
504GATEWAY timeout 网关请求超时(服务器处于维护或者路由器故障)
传输数据:一旦服务器生成了http响应,会通过之前建立的连接将响应返回给客户端。
响应当中包含了请求的资源(网页内容)以及其他的需要传输的数据(一般是自定义)
关闭连接:响应发送完成,服务端就会进入连接关闭。http1.1time_wait。双方还在建立连接,双方之间不再有数据传输,一旦有新的请求,连接可以继续使用。160秒会话保持或者长连接。
Httpd1.1会一次性获取页面的全部资源,Arnhem发起四次挥手,只是不再传输数据。连接并没有断开。
客户端解析和现实响应:客户端收到http响应之后,解析响应内容,包括页面解析,显示图片,播放视频。
主要靠的就是浏览器。
httpd的请求方式:
get:get向服务器发起请求的数据,依照http协议来进行,get就是请求。
请求行:
请求体:
Accept: 客户端可以接受的数据类型
Accept-Encoding:客户端可以接受的编码格式。以及数据是否需要压缩.
Accept-Language:客户端可以接受的语言类型
Cache-Control:数据在本地缓存的时间
Connection:连接到处理方式,一般都是会话保护。
Host:表示请求的ip和端口号,也可以请求的主机名
User-Agent:客户端请求使用的浏览器信息
响应头
响应体
post:post向服务端发送数据,按照http协议精选,服务器添加数据,post的请求方式会修改服务器的数据。
get和post的区别
get的请求可以换粗
get的请求还可以保存在浏览器中的cookie中
gte的请求长度有限制
get 就是获取数据
post
post的请求不能被缓存,也不会保存在浏览器的cookie中
post请求没有长度限制。
请求的字符中不会显示,比较安全。
两个工具:
Talnet
可以测试指定服务器的端口是否正常
格式:telent ip 端口号
telnet 192.168.233.20 80
**命令:Nginx**
-t 检测语法和配置文件是否正确
-v查看版本
-V查看Nginx版本和支持的配置模块
-s给Nginx主程序发送信号,不能开启Nginx服务,例如stop restart reload
**Nginx的配置文件的内容**
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
#指定mysql的安装路径
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
#指定mysql进程监听套接字文件(数据库连接文件)的存储路径
-DSYSCONFDIR=/etc \
#指定配置文件的存储路径
-DSYSTEMD_PID_DIR=/usr/local/mysql \
#指定进程文件的存储路径
-DDEFAULT_CHARSET=utf8 \
#指定默认使用的字符集编码,如utf8
-DDEFAULT_COLLATION=utf8_general_ci \
#指定默认使用的字符集校对规则
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
#安装INNOBASE存储引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
#安装ARCHIVE存储引擎
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
#安装BLACKHOLE存储引擎
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
#安装FEDERATED存储引擎
-DMYSQL_DATADIR=/usr/local/mysql/data \
#指定数据库文件的存储路径
-DWITH_BOOST=boost \
#指定boost的路径,
-DWITH_SYSTEMD=1
#生成便于systemctl管理的文件
[Unit]:这个部分定义了服务单元的元数据。
Description: 描述该服务单元的信息,描述为"nginx"。
After: 定义服务单元所依赖的其他单元,这里表示服务需要在网络加载完成之后启动。
[Service]:这个部分定义了服务的运行配置。
Type: 指定服务的类型,这里是forking,表示服务是一个后台进程(通常是fork出子进程)。
PIDFile: 指定保存主进程ID的文件路径,Nginx将会把主进程ID写入这个文件,以便Systemd可以追踪和管理进程。
ExecStart: 指定启动服务的命令。这里是启动Nginx的命令/usr/local/nginx/sbin/nginx。
ExecReload: 指定重新加载配置的命令。当执行此命令时,Systemd将发送HUP信号给主进程,Nginx将重新加载配置文件。
ExecStop: 指定停止服务的命令。当执行此命令时,Systemd将发送QUIT信号给主进程,Nginx将优雅地停止服务。
PrivateTmp: 将此项设置为true,表示为服务提供独立的临时目录。
[Install]:这个部分定义了服务的安装配置。
WantedBy: 指定服务所属的目标(target),这里是multi-user.target,表示服务在多用户模式下启动。
nginx网站服务
高性能,轻量级的web服务软件
nginx特点:
1.高性能:对http并发连接的处理能很高,单台物理服务器可支持3-5w并发请求。(在实际操作中,为了维持服务器的稳定,一般设置在2w个左右)
2.轻量级:nginx软件很小,安装所需的空间也很小,
3.稳定性强
4.对系统资源消耗低
nginx的主要功能:
- 处理静态网页:html htm图像
- 支持反向代理(负载均衡)。负载均衡靠算法实现。
- 处理动态内容
- 虚拟主机:nginx配置多个虚拟主机,每一个虚拟主机都可以作为一个域名和站点。每个虚拟主机都可以拥有独立的配置和资源
- URL重定向:可以对URL的请求进行修改和重定向。
- 缓存机制,可以缓存静态文件和动态内容
- 日志记录:服务日志,访问日志和报错日志。控制日志还是在/var/log/messages中
- 代理服务器,通过代理可以访问其他的后端服务器。
conf:保存nginx的所有配置文件,其中nginx.conf是nginx的主配置文件。
html: 保存nginx的web文件,.html结尾的文件,图片。
50x是nginx默认的报错提示页面
logs:保存日志的目录,路径可以改。
access.log记录的是访问日志记录
error.log记录报错日志,403 400 500
sbin:nginx的一进制的启动脚本
nginx -t: 检测nginx配置文件以及配置文件语法是否正确。
nginx -v: 只查者版本
nginx -V: 查看版本和nginx支持的配置模块
nginx -s stop restart reload
给nginx主程序发送信号,不能开启nginx服务。
Yum安装需要epel
Yum -y install nginx
注意:设置保存后,需要重新ssh连接才会看到配置更改的变化
vim /etc/security/limits.conf
# 65535 为Linux系统最大打开文件数
* soft nproc 65535
* hard nproc 65535
* soft nofile 65535
* hard nofile 65535
Reboot
(面试)Nginx的全局配置文件内容:
全局块:全局配置,对全局生效;
events块:配置影响 Nginx 服务器与用户的网络连接;
http块:配置代理 缓存 日志 虚拟主机和第三方模块
server:配置虚拟主机的设备,在http的模块中可以有多个server。
location:location模块只能而皮质在server模块当中,匹配URI
一个server模块当中可以有多个location
Nginx的四大模块——proxy、headers、upstream、stream模块
nginx功能模块:
1.proxy:代理功能,核心功能模块之一,配置反向的功能
proxy_pass指定
定义在location当中
2.headers功能模块:
处理请求和头部的响应信息。获取客户端的真实ip
3.upstream功能模块:
七层反方向代理模块,只能配置在http模块中,或者stream模块中。
- stream:四层反向代理模块,只能写在全局配置当中
vim /etc/security/limits.conf
root指定访问页面的根目录是拼接
root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;
Alias也可以指定访问,必须后面跟绝对路径
alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
http {
#文件扩展名与文件类型映射表
include mime.types;
#默认文件类型
default_type appkgcation/octet-stream;
#日志格式设定
#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 logs/access.log main;
#支持文件发送(下载)
sendfile on;
#此选项允许或禁止使用socket的TCP_CORK的选项(发送数据包前先缓存数据) ,
此选项仅在使用sendfile的时候使用
#tcp_nopush on;
#连接保持超时时间,单位是秒
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip模块设置,设置是否开启gzip压缩输出
gzip on;
-------------------------------------------------------------------------------------------
日志格式设定:
$remote_addr与$http_x_forwarded_for用以记录客户端的ip地址;
$remote_user:用来记录客户端用户名称;
$time_local: 用来记录访问时间与时区;
$request: 用来记录请求的url与http协议;
$status: 用来记录请求状态;成功是200,
$body_bytes_sent :记录发送给客户端文件主体内容大小;
$http_referer:用来记录从哪个页面链接访问过来的;
$http_user_agent:记录客户浏览器的相关信息;
通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,
通过$remote_add拿到的IP地址是反向代理服务器的iP地址。
反向代理服务器在转发请求的http头信息中,
可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
--------------------------------------------------------------------------------------------
# Web服务的监听配置
server {
#监听地址及端口
listen 80;
#站点域名,可以有多个,用空格隔开
server name www.kgc.com;
#网页的默认字符集
charset utf-8;
#根目录配置
location / {
网站根目录的位置/usr/local/nginx/html
root html;
#内部错误的反馈页面
error_page 500 502 503 504 /50x.html;
#错误页面配置
location = /50x.html {
root html;
}
}
}
vim /usr/local/nginx/conf/nginx.conf
server {
listen 80;
server_name www.kgc.com;
systemctl restart nginx.service
echo "192.168.233.21 www.kgc.com" > /etc/hosts ---没有做正向解析,直接主机映射
访问浏览器
location常见配置指令,root、alias、proxy_pass(反向代理配置)
location /test {
root /var/www/html;
index index.html index.htm;
}
location /test {
alias /var/www/html/test;
index index.html index.htm;
}
nginx是通过alias设置虚拟目录,在nginx的配置中,alias目录和root目录是有区别的:
1)alias指定的目录是准确的,即location匹配访问的path目录下的文件直接是在alias目录下查找的;
2)root指定的目录是location匹配访问的path目录的上一级目录,这个path目录一定要是真实存在root指定目录下的;
检查配置:nginx-t,一个ok一个successful