
Nginx基础
1.Http协议概述
HTTP全称HyperText Transfer Protocol中文名为超文本传输协议
1.什么是超文本?
包含有超链接(Link)和各种多媒体元素标记的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
3.那超文本传输http协议是什么?
是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。Http工作原理
http的短连接:建立一次tcp的连接,发起一次http的请求,结束,tcp断开。 http的长连接:建立一次tcp的连接,发起多次http的请求,结束,tcp端口。Http请求响应
1.http请求报文的方法
get # 获得请求文件信息的数据内容(下载) post # 用户提交数据至服务器端存储(上传) Request URL:http://10.0.0.7/index.html # 请求的URL Request Method:GET # 请求的方法 Status Code:200 OK # 当前的状态 Remote Address:10.0.0.7:80 # 远程的主机2.http返回状态码(Status-Code), 以3位数字组成
200 成功 301 永久重定向(redirect) 302 临时重定向(redirect) 304 浏览器缓存 403 请求不到首页,权限被拒绝 404 资源找不到 500 服务器内部错误,程序代码错误 502 找不到后端的资源 504 请求超时3.用户访问网站携带的参数,以及服务端返回的参数
//1.概况 Request URL: http://10.0.0.7/index.html # 请求的URL地址 Request Method: GET # 请求的方法(获取) Status Code: 304 Not Modified # 返回的状态 Remote Address: 10.0.0.7:80 # 请求的地址//2.客户端请求的头部信息 Accept: text/html, # 请求的类型 Accept-Encoding: gzip, deflate # 是否进行压缩 Accept-Language: zh-CN,zh;q=0.9 # 请求的语言 Cache-Control: max-age=0 # 缓存 Connection: keep-alive # TCP长连接 Host: www.oldboyedu.com # 请求的域名 If-Modified-Since: Fri, 04 May 2018 08:13:44 GMT# 修改的时间 If-None-Match: "a49-56b5ce607fe00" # 标记 Upgrade-Insecure-Requests:1 # 在http和https之间起的一个过渡作用 User-Agent: Mozilla/5.0 # 请求浏览器的工具 "=== 请求一个空行 ===" "=== 请求内容主体 ==="//3.服务端响应的头部信息 HTTP/1.1 304 Not Modified # 返回服务器的http协议,状态码 Date: Fri, 14 Sep 2018 09:14:28 GMT # 返回服务器的时间 Server: Apache/2.4.6 (CentOS) PHP/5.4.16 # 返回服务器使用的软件(Apache php) Connection: Keep-Alive # TCP长连接 Keep-Alive: timeout=5, max=100 # 长连接的超时时间 ETag: "a49-56b5ce607fe00" # 验证客户端标记 "=== 返回一个空行 ===" "=== 返回内容主体 ==="4.Http相关术语pv、ip、uv 假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过nat转换出口,每个人点击网站2次, 请问对应的pv,uv,ip分别是多少
PV:页面浏览量, 400 uv:独立的客户, 200 ip:独立IP, 1个Http访问流程
http协议原理
1.用户输入域名->浏览器跳转->DNS解析( 递归查询 | 迭代查询 ) 客户端向服务端发起查询->递归查询 服务端向服务端发起查询->迭代查询 2.由浏览器向服务端发起TCP连接(三次握手) 客户端 -->请求包连接-syn=1 seq=x 服务端 服务端 -->向应客户端syn=1 ack=x+1 seq=y 客户端 客户端 -->建立连接 ack=y+1 seq=x+1 服务端 3.客户端发起http请求: 1.请求的方法是什么: Get 获取 2.请求的Host主机是: www.oldboyedu.com 3.请求的资源是什么: /index.html 4.请求的端口是什么: 默认http是80 https 443 5.请求携带的参数是: 属性(请求的类型、压缩、认证、等等) 6.请求最后的空行 4.服务端响应的内容是 1.服务端响应使用的WEB服务软件 2.服务端响应请求文件的类型 3.服务端响应请求的文件是否进行压缩 4.服务端响应请求的主机是否进行长连接 5.客户端向服务端发起TCP断开(四次挥手) 客户端 --> 断开请求 fin=1 seq=x --> 服务端 服务端 --> 响应断开 fin=1 ack=x+1 seq=y --> 客户端 服务端 --> 断开连接 fin=1 ack=x+1 seq=z --> 客户端 客户端 --> 确认断开 fin=1 ack=z+1 seq=sj --> 服务端用户访问网站整体流程
1.客户端发起http请求,请求会先抵达前端的防火墙 2.防火墙识别用户身份,正常的请求通过内部交换机通过tcp连接后端的负载均衡,传递用户的http请求 3.负载接收到请求,会根据请求的内容进行下发任务,通过tcp连接后端的web,然发用户的http请求 4.web接收到用户的http请求后,会根据用户请求的内容进行解析,解析分为如下: 静态请求:由web服务器向nfs建立tcp连接,获取对应的图片,最后返回给负衡(负载均衡->防火墙->用户) 动态请求:有web向后端的动态程序建立TCP连接,将用户的动态http请求传递态程序->由动态程序进行解析 5.动态程序在解析的过程中,如果碰到查询数据库的请求,则优先和缓存建立tcp接,然后缓存服务发起http的查询 6.如果缓存没有对应的数据,动态程序再次向数据库建立tcp的连接,然后发起查作。 7.由数据库返回->动态程序->缓存->web服务->负载均衡->防火墙->用户。用户访问网站流程面试时需注意:
1.按照五层架构模型回答 CDN层->负载层->WEB层->存储层->缓存层->数据库层 同时需要注意, 每一层都有对应的缓存机制
2.Nginx基本简述
Nginx是一个开源且高性能、可靠的HttpWeb服务、代理服务。
- 开源: 直接获取源代码
- 高性能: 支持海量并发
- 可靠: 服务稳定
1.常见的 HTTP Web服务
- Httpd 由Apache基金会
- IIS 微软服务器版
- GWS Google开发
- Openrestry 基于nginx+lua
- Tengline 淘宝基于Nginx开发
为什么选择 Nginx
1.Nginx非常轻量
- 1.功能模块少(源代码仅保留http与核心模块代码,其余不够核心代码会作为插件来安装)
- 2.代码模块化(易读,便于二次开发,对于开发人员非常友好)
2.互联网公司都选择Nginx
- 1.Nginx技术成熟, 国内公司基本大规模使用
- 2.适合当前主流架构趋势, 微服务、云架构、中间层
- 3.统一技术栈, 降低维护成本, 降低技术更新成本。
3.Nginx采用Epool网络模型, Apache采用Select模型
- Select: 当用户发起一次请求,select模型就会进行一次遍历扫描,从而导致性能低下。
- Epool: 当用户发起请求,epool模型会直接进行处理,效率高效,并无连接限制。
3.Nginx快速安装
- Nginx软件安装的方式有很多种
- 1.源码编译=>Nginx (1.版本随意 2.安装复杂 3.升级繁琐)
- 2.epel仓库=>Nginx (1.版本较低 2.安装简单 3.配置不易读)
- 3.官方仓库=>Nginx (1.版本较新 2.安装简单 3.配置易读)
1.安装Nginx软件所需依赖
基本安装包[root@web ~]# yum install -y gcc gcc-c++ autoconf \ pcre pcre-devel make automake wget httpd-tools vim tree2.配置nginx yum源[必须使用官方源]
[root@web ~]# vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/7/$basearch/ gpgcheck=0 enabled=13.安装Nginx服务
[root@web ~]# yum install nginx -y4.检查Nginx软件版本
[root@web ~]# nginx -v
nginx version: nginx/1.14.0
5.为了让大家更清晰的了解Nginx软件的全貌,可使用rpm -ql nginx查看整体的目录结构及对应的功能
6.通过nginx -v查看Nginx编译选项
4..Nginx配置文件
Nginx主配置文件/etc/nginx/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的。一般,每个区块以一对大括号{}来表示开始与结束。
1.CoreModule 核心模块
2.EventModule 事件驱动模块
3.HttpCoreModule http内核模块
需了解扩展项
- CoreModule层下可以有Event、HTTP
- HTTP模块层允许有多个Server层, Server主要用于配置多个网站
- Server层又允许有多个Location, Location主要用于定义网站访问路径
- CoreModule核心模块
- user www; #Nginx进程所使用的用户
- worker_processes 1; #Nginx运行的work进程数量(建议与CPU数量一致或auto)
- error_log /log/nginx/error.log #Nginx错误日志存放路径
- pid /var/run/nginx.pid #Nginx服务运行后产生的pid进程号
events事件模块
events { worker_connections //每个worker进程支持的最大连接数 use epool; //事件驱动模型, epoll默认 }
- http内核模块
//公共的配置定义在http{} http { //http层开始 ... //使用Server配置网站, 每个Server{}代表一个网站(简称虚拟主机) 'server' { listen 80; //监听端口, 默认80 server_name localhost; //提供服务的域名或主机名 access_log host.access.log //访问日志 //控制网站访问路径 'location' / { root /usr/share/nginx/html; //存放网站代码路径 index index.html index.htm; //服务器返回的默认页面文件 } //指定错误代码, 统一定义错误页面, 错误代码重定向到新的Locaiton error_page 500 502 503 504 /50x.html; } ... //第二个虚拟主机配置 'server' { ... } include /etc/nginx/conf.d/*.conf; //包含/etc/nginx/conf.d/目录下所有以.conf结尾的文件 } //http层结束
5..Nginx配置网站
1.新增nginx配置文件
[root@web01 conf.d]# cat /etc/nginx/conf.d/game.conf server { listen 80; server_name game.opsxdev.com; location / { root /oldboy_code; index index.html; } }2.放置对应的源代码文件至指定的目录
[root@web01 conf.d]# mkdir /oldboy_code [root@web01 conf.d]# cd /oldboy_code/ [root@web01 oldboy_code]# rz html5.zip [root@web01 oldboy_code]# unzip html5.zip [root@web01 oldboy_code]# ls ceshi game html5.zip img index.html readme.txt3.检查nginx的语法是否存在错误
[root@web01 oldboy_code]# nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful4.重载Nginx [reload|restart]
[root@web01 oldboy_code]# #nginx -s reload [root@web01 oldboy_code]# systemctl reload nginx5.如何访问对应的网站
1.通过服务器的IP直接访问(不推荐) 2.通过假域名方式访问(推荐方式) Windows修改 C:\Windows\System32\drivers\etc\hosts 10.0.0.7 game.opsxdev.com 3.使用ping命令测试域名解析是否正常