http以及nginx

客户端-服务端通信过程

请求-----响应的模型

建立连接: 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的主要功能:

  1. 处理静态网页:html  htm图像
  2. 支持反向代理(负载均衡)。负载均衡靠算法实现。
  3. 处理动态内容
  4. 虚拟主机:nginx配置多个虚拟主机,每一个虚拟主机都可以作为一个域名和站点。每个虚拟主机都可以拥有独立的配置和资源
  5. URL重定向:可以对URL的请求进行修改和重定向。
  6. 缓存机制,可以缓存静态文件和动态内容
  7. 日志记录:服务日志,访问日志和报错日志。控制日志还是在/var/log/messages中
  8. 代理服务器,通过代理可以访问其他的后端服务器。

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

www.baidu.com/test

Nginx的四大模块——proxy、headers、upstream、stream模块

nginx功能模块:

1.proxy:代理功能,核心功能模块之一,配置反向的功能

proxy_pass指定

定义在location当中

2.headers功能模块:

处理请求和头部的响应信息。获取客户端的真实ip

3.upstream功能模块:

七层反方向代理模块,只能配置在http模块中,或者stream模块中。

  1. 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     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值