目录

  • 1. 基本概念
    • 1.1 Nginx初步认识
    • 1.2 正向/反向代理
    • 1.3 域名和IP
  • 2. Nginx安装和配置
    • 2.1 安装Nginx
    • 2.2 配置
  • 3. Nginx的使用
    • 3.1 部署静态网页
    • 3.2 反向代理和负载均衡
      • 1. 反向代理设置
      • 2. 负载均衡设置
  • 4.补充知识
    • 1. URL和URI
    • 2. DNS解析过程
  • 5.复习
    • 1.Nginx web服务器 处理静态请求
    • 2.Nginx 反向代理
  • 6.Nginx作为web服务器处理请求
    • 1. 静态请求
    • 2. 动态请求
  • 7.HTTP协议复习

1. 基本概念

1.1 Nginx初步认识

什么是Nginx

Nginx是一款轻量级的Web 服务器、反向代理服务器、电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行。

由俄罗斯的程序设计师Igor Sysoev所开发,供俄国大型的入口网站及搜索引擎Rambler(俄文:Рамблер)使用。

其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。

Nginx优势

  1. 更快
    正常情况下单次请求得到更快的响应,高峰期(数以万计的并发时)Nginx可
    以比其它web服务器更快的响应请求。

  2. 高扩展性
    低耦合设计的模块组成,丰富的第三方模块支持。

  3. 高可靠性
    经过大批网站检验,每个worker进程相对独立,master进程在一个worker 进程出错时,可以快速开启新的worker进程提供服务。

  4. 低内存消耗
    一般情况下,10000个非活跃的HTTP Keep-Alive连接在Nginx中仅消耗 2.5M内存,这是Nginx支持高并发的基础。

  5. 单机支持10万以上的并发连接
    取决于内存,10万远未封顶。

  6. 热部署
    master和worker的分离设计,可实现7x24小时不间断服务的前提下,升级Nginx可执行文件,当然也支持更新配置项和日志文件。

  7. 最自由的BSD许可协议
    BSD许可协议允许用户免费使用Nginx、修改Nginx源码,然后再发布。这吸引了无数的开发者继续为 Nginx贡献智慧。

1.2 正向/反向代理

  • 正向代理

正向代理是位于客户端和原始服务器之间的服务器;为了能够从原始服务器获取请求的内容,客户端需要将请求发送给代理服务器,然后再由代理服务器将请求转发给原始服务器,原始服务器接受到代理服务器的请求并处理,然后将处理好的数据转发给代理服务器,之后再由代理服务器转发发给客户端,完成整个请求过程。

正向代理的典型用途就是为在防火墙内的局域网客户端提供访问Internet的途径, 比如:

  • 学校的局域网

  • 单位局域网访问外部资源

有一台服务器, 它帮助客户端,连接到客户端访问不到的网络服务器, 这台服务器提供的这个服务就是一个正向代理;

正向代理是为客户端服务的, 而不是为服务器服务.

  • 反向代理

反向代理方式是指代理原始服务器来接受来自Internet的链接请求,然后将请求转发给内部网络上的原 始服务器,并将从原始服务器上得到的结果转发给Internet上请求数据的客户端。那么顾名思义,反向 代理就是位于Internet和原始服务器之间的服务器,对于客户端来说就表现为一台服务器,客户端所发 送的请求都是直接发送给反向代理服务器,然后由反向代理服务器统一调配。

反向代理服务器是为后台服务器服务的, 实现资源的平均分配 -> 负载均衡

    1. 接收客户端的请求(反向代理服务器不处理请求),将客户端请求转发给后台web服务器
    1. web服务器收到请求之后, 对请求做处理, 得到结果, 发送给反向代理服务器
    1. 反向代理服务器将处理结果发送给客户端

1.3 域名和IP

  • 什么是域名?

    • www.baidu.com
  • 什么是IP地址?
  • 点分十进制字符串
    • 192.168.1.10
    • 22.11.44.66 3.
  • 域名和IP地址的关系?
    • 域名绑定IP地址, IP地址被域名绑定

      • 一个域名绑定几个IP地址: 1个
      • 一个IP地址可以被多少个域名绑定?: 多个

2. Nginx安装和配置

2.1 安装Nginx

  • 下载

    • Nginx官方地址: http://nginx.org/
  • Nginx相关依赖: 先安装这些依赖

    • 1、OpenSSL:加密 https
    • 2、ZLib:压缩数据
    • 3、PCRE:解析正则表达式
  • 1、OpenSSL:加密、https

# 下载
http://www.openssl.org/
https://www.openssl.org/source/old/1.1.1/# 安装
tar -zxvf openssl-1.1.1f.tar.gz
cd openssl-1.1.1f/
./config
make
make install# 查看openssl版本
openssl version -a
### 遇到动态库找不到的问题:解决如下
find / -name  libssl.so
vim /etc/ld.so.conf
ldconfig# 再次查看版本:成功
openssl version -a
openssl version
OpenSSL 1.1.1f  31 Mar 2020# 清理数据:删除压缩包和解压后的文件夹
cd ..
rm -rf openssl-1.1.1f openssl-1.1.1f.tar.gz
  • 2、ZLib:压缩数据
# 下载
http://www.zlib.net/#安装
tar -zxvf zlib-1.2.11.tar.gz
cd zlib-1.2.11/
./configure
make
make install#查版本号find / -name zlib.pc/usr/lib64/pkgconfig/zlib.pc/usr/local/lib/pkgconfig/zlib.pc
cat /usr/local/lib/pkgconfig/zlib.pc # 这个是正确的版本号
  • 3、PCRE:解析正则表达式
# 下载:
http://www.pcre.org/ # 安装
tar -jxvf pcre-8.40.tar.bz2
cd pcre-8.40/
ls
./configure
make
make install#查看pcre版本
[root@lwh Nginx]# pcre-config --version
8.40
  • nginx的安装
# 正规安装, 需要添加以上三个库的依赖
# 需要将openssl , zlib, pcre依次安装 # 检测安装环境,并在当前环境下生成一个Makefile
# 源码路径: 绝对/相对都可以
# ./configure --with-openssl=openssl源码目录 --with-pcre=pcre的源码目录 --with-zlib=zlib 的源码目录 ./configure --with-openssl=/home/lwh/Desktop/packages/Nginx/openssl-1.1.1f --with-pcre=/home/lwh/Desktop/packages/Nginx/pcre-8.40 --with-zlib=/home/lwh/Desktop/packages/Nginx/zlib-1.2.11# 有以下这些输出,说明都找到了,安装环境没问题Configuration summary+ using PCRE library: /home/lwh/Desktop/packages/Nginx/pcre-8.40+ using OpenSSL library: /home/lwh/Desktop/packages/Nginx/openssl-1.1.1f+ md5: using system crypto library+ sha1: using system crypto library+ using zlib library: /home/lwh/Desktop/packages/Nginx/zlib-1.2.11nginx path prefix: "/usr/local/nginx"nginx binary file: "/usr/local/nginx/sbin/nginx"nginx modules path: "/usr/local/nginx/modules"nginx configuration prefix: "/usr/local/nginx/conf"nginx configuration file: "/usr/local/nginx/conf/nginx.conf"nginx pid file: "/usr/local/nginx/logs/nginx.pid"nginx error log file: "/usr/local/nginx/logs/error.log"nginx http access log file: "/usr/local/nginx/logs/access.log"nginx http client request body temporary files: "client_body_temp"nginx http proxy temporary files: "proxy_temp"nginx http fastcgi temporary files: "fastcgi_temp"nginx http uwsgi temporary files: "uwsgi_temp"nginx http scgi temporary files: "scgi_temp"# 安装
make
make install# 查看nginx版本号
-v 显示 nginx 的版本。
-V 显示 nginx 的版本,编译器版本和配置参数。
[root@lwh sbin]#  cd /usr/local/nginx/sbin
[root@lwh sbin]# ls
nginx
[root@lwh sbin]# ./nginx -v
nginx version: nginx/1.10.3
[root@lwh sbin]# ./nginx -V
nginx version: nginx/1.10.3
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-39) (GCC)
configure arguments: --with-openssl=/home/lwh/Desktop/packages/Nginx/openssl-1.1.1f --with-pcre=/home/lwh/Desktop/packages/Nginx/pcre-8.40 --with-zlib=/home/lwh/Desktop/packages/Nginx/zlib-1.2.11
[root@lwh sbin]#
  • Nginx相关目录

Nginx的默认安装目录

/usr/local/nginx  [root@lwh testcpp]# whereis nginx
nginx: /usr/bin/nginx /usr/local/nginx[root@lwh testcpp]# ll /usr/bin/nginx
lrwxrwxrwx. 1 root root 27 Jun 22 14:07 /usr/bin/nginx -> /usr/local/nginx/sbin/nginx[root@lwh testcpp]# ll /usr/local/nginx/
total 4
drwx------. 2 nobody root    6 Jun 22 14:02 client_body_temp
drwxr-xr-x. 2 root   root 4096 Jun 22 21:39 conf # 配置文件目录
drwx------. 2 nobody root    6 Jun 22 14:02 fastcgi_temp
drwxr-xr-x. 2 root   root   40 Jun 22 11:17 html # 默认资源目录
drwxr-xr-x. 2 root   root   41 Jun 22 23:43 logs # 日志目录
drwx------. 2 nobody root    6 Jun 22 14:02 proxy_temp
drwxr-xr-x. 2 root   root   19 Jun 22 11:17 sbin # 可执行程序目录
drwx------. 2 nobody root    6 Jun 22 14:02 scgi_temp
drwx------. 2 nobody root    6 Jun 22 14:02 uwsgi_temp
drwxr-xr-x. 6 root   root  173 Jun 22 21:33 yundisk # 自己配置的资源目录# conf: 放配置文件的目录
# html: web服务器存放资源文件的目录# - 网页 # - 图片
# logs: nginx写log日志的目录
# sbin: 里边是启动nginx的可执行程序

Nginx可执行程序的路径

[root@lwh sbin]# cd /usr/local/nginx/sbin/
[root@lwh sbin]# ls
nginx# 如果linux用户是普通用户, 启动该程序需要添加管理员权限#启动 nginx后,有
#   一个 nginx:master process
#   多个 nginx:worker process (个数,与虚拟机设置的核数有关)[root@lwh sbin]# ./nginx
[root@lwh sbin]# ps aux|grep nginx
root      43012  0.0  0.0  22728   764 ?        Ss   14:02   0:00 nginx: master process ./nginxnobody    43013  0.0  0.1  25232  1548 ?        S    14:02   0:00 nginx: worker process
root      43032  0.0  0.0 110280   892 pts/0    S+   14:02   0:00 grep --color=auto nginx
  • 启动Nginx
nginx    # 启动# 启动:法一# 首先进入 目录: /usr/local/nginx/sbin/# 然后: (sudo) ./nginx
# 启动:法二# 直接启动nginx(在任何目录下)(需要设置环境变量或者创建软连接:设置方式如下)# 这个nginx命令无法在任何目录下都能解析出来, 解决方案:
# 法一:在PATH环境变量中添加路径: /usr/local/nginx/sbin
# 法二:创建快捷方式(软连接):
[root@localhost ~]# echo $PATH         /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx
  • 关闭Nginx
nginx -s stop   # 立即停止
nginx -s quit   # 执行完毕后再退出/usr/local/nginx/sbin/nginx -s stop  # 立即关闭
/usr/local/nginx/sbin/nginx -s quit  # 先将nginx执行的动作, 执行完毕, 然后再退出
  • 重新加载Nginx
nginx -s reload # 重新加载配置文件/usr/local/nginx/sbin/nginx -s reload # 重写读nginx的配置文件# 可以进行热部署
  • 测试是否安装成功
nginx -t # 测试nginx的配置文件的语法是否正确、环境、网络...等,通过了肯定能启动# 1、确定nginx对应的主机的iP地址
# 2、打开一个浏览器访问这个地址, 得到一个欢迎界面

2.2 配置

  • Nginx配置文件的位置
/usr/local/nginx/conf/nginx.conf

配置层次 描述
main Nginx在运行时与具体业务功能无关的参数,比如工作进程数、运行身份等
http 与提供http服务相关的参数,比如keepalive、gzip等
server http服务上支持若干虚拟机,每个虚拟机一个对应的server配置项,配置项里包含该虚拟机相关的配置
location http服务中,某些特定的URL对应的一系列配置项
mail 实现email相关的SMTP/IMAP/POP3代理时,共享的一些配置项
- main - 代表整个文件 nginx.conf
- http - web模块- server模块 - 每个server模块对应一台web服务器 - web服务器需要处理多个客户端请求, 每个请求对应一个location
- mail - 邮件模块

Nginx工作流程 配置文件的生效阶段:

重点关注server配置项和location配置项

通过不同的配置可以将nginx作为不同的角色使用。

  • 常用配置项介绍
user  nobody;
#工作的进程属于哪个用户, 默认属于nobody用户
#nobody作为一个普通用户,操作一些文件的时候就没有权限, 导致操作失败,
#在logs目录中的日志文件中 有错误提示: nginx操作xxx文件时候失败, 原因: Permission denied          #解决方法:把工作进程的所有者改为root用户user root; worker_processes  1;
#工作进程的个数, 最大个数 == cpu的核心数 error_log logs/error.log;
#nginx运行出错, 会在logs目录的error.log中记录错误信息 #notice和info是日志级别pid  logs/nginx.pid;
#nginx的进程ID,存储在哪个目录下和存储的文件名字 # nginx的事件处理
events
{    use epoll;  # 处理事件的时候使用的多路IO转接函数是epollworker_connections  1024;# 一个工作的进程同时接受的最大连接数是1024
} http
{# ...server{listen       80;    # web服务器默认监听的端口, 客户端需要将请求数据发送到该端口 # 可以更改,更改后使用时需要显示指定server_name  localhost; # 客户端访问web服务器的地址, localhost必须是域名, # 如果是域名是localhost, 客户端通过服务器的实际IP地址访问web服务器 # 举例:server_name  www.baidu.com; charset utf-8;  # 字符编码 # 每个location都对应一个客户端的请求, # location后边的字符串就是客户端请求的指令 location / {    root   html;    # 服务器存储资源的资源根目录    index  index.html index.htm;    # 如果浏览器访问服务器请求的是一个目录,有时候会返回一个静态网页,  \# 需要使用index指定返回的默认网页index.html, 如果index.html \# 没找到, 会找index.htm, 如果找到了index.html就跟index.htm没关系了}   # 请求的是目录,index要加上# 请求的是一个网页,index注释掉就行,用不上}
}

3. Nginx的使用

3.1 部署静态网页

  • 1.静态网页存储目录

默认的存储目录:

/usr/local/nginx/html

自己创建新的资源目录

# 在 /usr/local/nginx 下创建新目录
# 新目录和html默认目录是平级的

练习

在Nginx服务器上进行网页部署, 实现如下访问: 在/usr/local/nginx/创建新的目录, yundisk用来存储静态网页mkdir /usr/local/nginx/yundisk
  • 1.访问地址: http://192.168.184.133/login.html (此处192.168.184.133是你的本地虚拟机IP)
  • login.html放到什么位置? :
    • 放到yundisk资源目录中
 需要在在服务器端添加location http -> server中添加location location (指令) {} # 步骤如下如何得到处理指令: http://192.168.184.133/login.html    - 协议去掉: http        - 剩余:192.168.184.133/login.html        - 去掉域名/服务器的IP地址: 192.168.184.133/www.baidu.com                                  - 剩余:/login.html
    #############实例如下################ location /login.html    # / 对应的就是root{    root yundisk;   # 此时 root 等于 /usr/local/nginx/yundisk/# yundisk是相对路径;# yundisk存在于本机绝对路径:/usr/local/nginx/之下# 相当于 /usr/local/nginx/yundisk/# index xxx.html; # login.html  是一个网页,所以 index就被注释掉了# 如果login.html  是一个目录,index就得加上}
    #在一个项目中服务器的资源目录中html网页会很多, 如果访问的是网页#岂不是,每多一个网页就要多写一个location#解决方法:为了避免重复劳动,# 将xx.html去掉    # 剩下的指令是 / # 会自动去模糊匹配# 这是一个模糊匹配, 只要是资源目录yundisk下的网页, # 通过该指令都可以匹配并解析出来 # 这样一个location就可以匹配/usr/local/nginx/yundisk/下的很多个网页location /  {    root yundisk; }
    # 修改完配置文件后,想让其生效# 如果当前nginx已经启动, 需要重新加载配置文件 ngixn -s reload
  • 2.访问地址: http://192.168.184.133/hello/reg.html

    • hello是什么?

      • 目录
    • reg.html放到哪儿?

      • hello目录中
    • 如何添加location

#指令: #去掉协议    - 192.168.184.133/hello/reg.html     #去掉IP地址    - /hello/reg.html     #去掉xxx.html    - /hello/ location /hello/ {    root yundisk; }[root@lwh yundisk]# mkdir hello[root@lwh yundisk]# cp reg.html static/ hello/ -r[root@lwh yundisk]# vim ../conf/nginx.conf[root@lwh yundisk]# nginx -s reloadhttp://192.168.184.133/hello/reg.html
  • 3.访问地址: http://192.168.184.133/upload/ 浏览器显示upload.html

    • 直接访问一个目录, 得到一默认网页
  • upload是资源目录的子目录

    • upload.html 放到哪儿?

      • 放到upload目录中
  • 在服务器端添加location

#去掉协议、IP地址、XXX.html
# 剩余 /upload/
location /upload/
{    root yundisk;    index upload.html;
}[root@lwh yundisk]# mkdir upload[root@lwh yundisk]# cp upload.html static/ zyupload/ upload/ -r[root@lwh yundisk]# vim ../conf/nginx.conf[root@lwh yundisk]# nginx -s reloadhttp://192.168.184.133/upload/

3.2 反向代理和负载均衡

  • 反向代理和负载均衡是两码事儿

    • 负载均衡包括了反向代理
    • 实现负载均衡时,要先配置好反向代理,然后再实现负载均衡
  • 准备工作:

    • 反向代理服务器: windows端的Nginx

      • 需要修改反向代理服务器的配置文件 - nginx.conf
    • 最少两台web服务器:Linux虚拟机上的Nginx
      • Linux虚拟机:centos7_lwh- 192.168.247.147
      • Linux虚拟机::centos7_bu2- 192.168.247.135
    • 客户端 - windows上的浏览器
  • 如果反向代理功能成功实现:

    • 通过客户端访问反向代理服务器:客户端发送请求
    • 处理客户端请求的服务器是
      • centos7_lwh
      • centos7_bu2

1. 反向代理设置

  • 1.首先配置:反向代理服务器(windows端的Nginx)
#nginx-1.12.0-windows.zip 解压就可以直接使用了(相当于绿色安装)
#目录结构和linux下基本一致#shift+鼠标右键-》Powershell.\nginx.exe #启动windows端的nginx
#修改windows下nginx的配置文件 nginx.conf#windows端的nginx,要代理两台web服务器;
#在反向代理服务器(windows端的nginx)的配置文件中添加两个server模块# SwitchHosts.exe 管理员权限启动可以修改本地的host文件(域名和ip的映射关系)
127.0.0.1 centos7_lwh.com
127.0.0.1 centos7_bu2.com
#反向代理设置好之后, 并不能实现负载均衡(需要进一步设置)
#反向代理设置步骤如下:###################### 第一台web服务器centos ############################
###客户端在地址栏输入centos7_lwh.com,就可以访问到第一台web服务器centos7_lwh###server {
######1、客户端访问反向代理服务器的入口(设置:反向代理服务器的ip和port)#########listen       80;         # 反向代理服务器监听的端口        server_name  centos7_lwh.com;# 客户端访问:反向代理服务器的地址        #####2、反向代理服务器不处理请求,而是转发请求,所以要设置代理地址(设置:转发地址)######## 设置请求的转发, 设置代理地址        location /  # 此处location后的指令是 /{   # 代理地址 centos7_lwh.test(通过它找到后面的:反向代理模块)# http://前缀必须有, centos7_lwh.test名字自己编的            proxy_pass http://centos7_lwh.test;        }    }    # 添加:反向代理模块
######## 3、通过设置的名字centos7_lwh.test,找到对应的upstream模块#######upstream centos7_lwh.test    {        # 添加代理的web服务器        server 192.168.247.147;
#######4、反向代理服务器,将location后的指令转发给web服务器######
#######web服务器端,有对应的location对这个转发过去的指令进行处理#####
#######即:192.168.247.147专门有个location处理 / #########}    ######################第2台web服务器centos7_bu2######################
###客户端在地址栏输入centos7_bu2.com,就可以访问到第一台web服务器centos7_bu2###server {        listen       80;        server_name  centos7_bu2.com;        # 设置代理地址        location / {            proxy_pass http://centos7_bu2.test;        }    }    upstream centos7_bu2.test    {        server 192.168.247.135;    }


反向代理示意图

2. 负载均衡设置

# 配置负载均衡(已经实现了反向代理)
server
{        listen       80;    # 反向代理服务器监听的端口        server_name  localhost; # 客户端访问访问反向代理服务器的地址        # 设置请求的转发, 设置代理地址        location /hello/ {            # http://前必须有, centos.test名字自己编一个            proxy_pass http://centos.test;        }
}
# 添加一反向代理模块
upstream centos.test
{        # 添加代理的web服务器        server 192.168.247.147 weight=5; # 5/6 # 权重的设置:没有最大值          server 192.168.247.135 weight=1; # 1/6 # 权重的设置:没有最大值
}
# 192.168.247.147
location /hello/
{    root xxx;    index xx.html;
}
# 192.168.247.135
location /hello/
{    root xxx;    index xx.html;
}

4.补充知识

1. URL和URI

不错的博文:https://www.cnblogs.com/chengdabelief/p/6635045.html

  • 概念

    • URL(Uniform Resource Locator): 统一资源定位符

      • 表示资源位置的字符串 基本格式: “协议://IP地址/路径和文件名”

        • ftp://ftp.is.co.za/rfc/rfc1808.txt
        • http://www.ietf.org/rfc/rfc2396.txt
        • telnet://192.0.2.16:80/
    • URN(Uniform Resource Name): 统一资源名称
      • P2P下载中使用的磁力链接
    • URI(Uniform Resource Identifier): 统一资源标识符
      • 是一个紧凑的字符串用来标示抽象或物理资源, URL是URI的一种
      • 让URI能成为URL的当然就是那个“访问机制”,“网络位置”。e.g. http:// or ftp://
        • ftp://ftp.is.co.za/rfc/rfc1808.txt (also a URL because of the protocol)
        • http://www.ietf.org/rfc/rfc2396.txt (also a URL because of the protocol)
        • ldap://[2001:db8::7]/c=GB?objectClass?one (also a URL because of the protocol)
        • mailto:John.Doe@example.com (also a URL because of the protocol)
        • news:comp.infosystems.www.servers.unix (also a URL because of the protocol)
        • tel:+1-816-555-1212
        • telnet://192.0.2.16:80/ (also a URL because of the protocol)
        • urn:oasis:names:specification:docbook:dtd:xml:4.1.2
        • 这些全都是URI, 其中有些事URL. 哪些? 就是那些提供了访问机制的.
  • 总结

    • “URI可以分为URL,URN或同时具备locators 和names特性的一个东西。

      • URN作用就好像一个人的名字,
      • URL就像一个人的地址。
      • 换句话说:URN确定了东西的身份,URL提供了找到它的方式。”
  • 经验式理解:

  • http://localhost:8080 /myweb/hello.html

  • URL http://localhost:8080 + /myweb/hello.html

| URI | /myweb/hello.html |

2. DNS解析过程

  • 1.DNS解析的过程

    • 1.在浏览器中输入www.magedu.com域名,操作系统会先检查自己本地的hosts文件是否有这个网 址映射关系,如果有,就先调用这个IP地址映射,完成域名解析。
    • 2.如果hosts里没有这个域名的映射,则查找本地DNS解析器缓存,是否有这个网址映射关系,如果 有,直接返回,完成域名解析。
      • Windows和Linux系统都会在本地缓存dns解析的记录,提高速度。
    • 3.如果hosts与本地DNS解析器缓存都没有相应的网址映射关系,首先会找 TCP/IP 参数中设置的首选DNS服务器,在此我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名,包含在本地配置区域资源中,则返回解析结果给客户机,完成域名解析,此解析具有权威性。
    • 4.如果要查询的域名,不由本地DNS服务器区域解析,但该DNS服务器已缓存了此网址映射关系, 则调用这个IP地址映射,完成域名解析,此解析不具有权威性。
    • 5.如果本地DNS服务器本地区域文件与缓存解析都失效,则根据本地DNS服务器的设置(没有设置 转发器)进行查询,如果未用转发模式,本地DNS就把请求发至13台根DNS,根DNS服务器收到 请求后会判断这个域名(.com)是谁来授权管理,并会返回一个负责该顶级域名服务器的一个IP。本地DNS服务器收到IP信息后,将会联系负责 .com域的这台服务器。这台负责 .com域的服务器收到 请求后,如果自己无法解析,它就会找一个管理 .com域的下一级DNS服务器地址(magedu.com) 给本地DNS服务器。当本地DNS服务器收到这个地址后,就会找magedu.com域服务器,重复上面的动作进行查询,直至找到www.magedu.com主机。
    • 6.如果用的是转发模式(设置转发器),此DNS服务器就会把请求转发至上一级ISP DNS服务器,由 上一级服务器进行解析,上一级服务器如果不能解析,或找根DNS或把转请求转至上上级,以此循 环。不管是本地DNS服务器用是是转发,还是根提示,最后都是把结果返回给本地DNS服务器, 由此DNS服务器再返回给客户机。
  • 2.域名解析服务器

    • Pod DNS+:

      • 首选:119.29.29.29
      • 备选:182.254.116.116
    • 114DNS:
      • 首选:114.114.114.114
      • 备选:114.114.114.115
    • 阿里 AliDNS:
      • 首选:223.5.5.5
      • 备选:223.6.6.6
  • 3.hosts文件

    • # 存储的是域名和IP的对应关系 -windows目录: "C:\Windows\System32\drivers\etc"
      

5.复习

1.Nginx web服务器 处理静态请求

# 部署静态网页
1. 找到nginx的资源目录    /usr/local/nginx/html - 默认    /usr/local/nginx/xxx -  自己创建xxx (和 /html 同级)
2. 静态资源放入资源目录(网页, 图片...)
3. 需要根据客户端的请求的url在服务器端添加的对应的location处理    location 指令指令的获取:去掉协议, 去掉IP/域名, 去掉尾部请求的文件名(xxx.html, xx.jpg, xx.png) location /
{    root xx;    # 服务器存储资源的资源目录    index xx.html;  # 如果客户端访问的是服务器目录, 需要显示一个默认网页, #index指定 的就是那个默认网页
}
4. 如果nginx已经启动, 需要重写加载    sudo nginx -s reload

2.Nginx 反向代理

# 反向代理服务器代理web服务器 - nginx.conf
http -> server
server
{    listen 80;  # 反向代理服务器监听的端口    server_name 域名(www.hello.com); # 客户端访问反向代理服务器的地址    # 客户端的请求    # url: http://www.hello.com/hello/uplaod/(xx.html)    location /hello/upload/    {        # 反向代理服务器不处理请求, 转发        # 通过设置的test.com查找同名的upstream模块        proxy_pass http://test.com;    }
} # 添加反向代理模块
# 反向代理服务器将 /hello/upload/指令  转发给web服务器
upstream test.com
{    # 要代理的web服务器的地址信息    server 192.168.1.100:8080 weight=2;    server 192.168.1.101:8080 weight=3;    server 192.168.1.102:8080 weight=4;
}
# web服务器添加指令的处理
# 192.168.1.100
location /hello/upload/
{    root xx;    index xx.html;
}
# 192.168.1.101
location /hello/upload/
{    root xx;    index xx.html;
}
# 192.168.1.102
location /hello/upload/
{    root xx;    index xx.html;
}

6.Nginx作为web服务器处理请求

1. 静态请求

客户端访问服务器的静态网页, 不涉及任何数据的处理, 如下面的URL:

http:://localhsot/login.html

2. 动态请求

客户端会将数据提交给服务器

# 使用get方式提交数据得到的url
http://localhost/login?user=zhang3&passwd=123456    http      协议    localhost 域名    /login    ?   连接符, 后边的数据代表提交的指令携带的参数    user=zhang3&passwd=123456        user=zhang3   用户信息的用户名        &   分隔符, 分隔提交的多个数据块        passwd=123456   用户密码

7.HTTP协议复习

1.请求消息(Request) - 客户端(浏览器)发送给服务器的数据格式

  • 四部分: 请求行, 请求头, 空行, 请求数据

    • 请求行: 说明请求类型, 要访问的资源, 以及使用的http版本
    • 请求头: 说明服务器要使用的附加信息
    • 空行: 空行是必须要有的, 即使没有请求数据
    • 请求数据: 也叫主体, 可以添加任意的其他数据

POST方式提交数据

POST /commit HTTP/1.1
Host: 192.168.87.47:6789
Connection: keep-alive Content-Length: 86
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: null
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh,zh-CN;q=0.9,en;q=0.8username=tom&phone=123&email=hello%40qq.com&date=2018-01-01&sex=female&class=3&rule=on

GET方式提交数据

请求体是空的, 数据在请求行的第二部分

GET /commit?username=tom&phone=123&email=hello%40qq.com&date=2018-0101&sex=female&class=3&rule=on HTTP/1.1
Host: 192.168.87.47:6789
Connection: keep-alive Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip,l deflate
Accept-Language: zh,zh-CN;q=0.9,en;q=0.8

2.响应消息(Response) -> 服务器给客户端发送的数据

  • 四部分: 状态行, 消息报头, 空行, 响应正文

    • 状态行: 包括http协议版本号, 状态码, 状态信息
    • 消息报头: 说明客户端要使用的一些附加信息
    • 空行: 空行是必须要有的
    • 响应正文: 服务器返回给客户端的文本信息
HTTP/1.1 200 Ok
Server: micro_httpd
Date: Fri, 18 Jul 2014 14:34:26 GMT
/* 告诉浏览器发送的数据是什么类型 */
Content-Type: text/plain; charset=iso-8859-1 (必选项)
/* 发送的数据的长度 */
Content-Length: 32
Location:url
Content-Language: zh-CN
Last-Modified: Fri, 18 Jul 2014 08:36:36 GMT
Connection: close#include <stdio.h>
int main(void)
{printf("hello world!\n");return 0;
}

3.http状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

  • 1xx:指示信息–表示请求已接收,继续处理
  • 2xx:成功–表示请求已被成功接收、理解、接受
  • 3xx:重定向–要完成请求必须进行更进一步的操作
  • 4xx:客户端错误–请求有语法错误或请求无法实现
  • 5xx:服务器端错误–服务器未能实现合法的请求

67.0.3396.99 Safari/537.36 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Accept-Encoding: gzip,l deflate
Accept-Language: zh,zh-CN;q=0.9,en;q=0.8


2.响应消息(Response) -> 服务器给客户端发送的数据 > - 四部分: 状态行, 消息报头, 空行, 响应正文
>   - 状态行: 包括http协议版本号, 状态码, 状态信息
>   - 消息报头: 说明客户端要使用的一些附加信息
>   - 空行: 空行是必须要有的
>   - 响应正文: 服务器返回给客户端的文本信息 ```http
HTTP/1.1 200 Ok
Server: micro_httpd
Date: Fri, 18 Jul 2014 14:34:26 GMT
/* 告诉浏览器发送的数据是什么类型 */
Content-Type: text/plain; charset=iso-8859-1 (必选项)
/* 发送的数据的长度 */
Content-Length: 32
Location:url
Content-Language: zh-CN
Last-Modified: Fri, 18 Jul 2014 08:36:36 GMT
Connection: close#include <stdio.h>
int main(void)
{printf("hello world!\n");return 0;
}

3.http状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

  • 1xx:指示信息–表示请求已接收,继续处理
  • 2xx:成功–表示请求已被成功接收、理解、接受
  • 3xx:重定向–要完成请求必须进行更进一步的操作
  • 4xx:客户端错误–请求有语法错误或请求无法实现
  • 5xx:服务器端错误–服务器未能实现合法的请求

Nginx 概述 如何正规安装 静态网页配置 反向代理配置 负载均衡配置相关推荐

  1. Nginx代理支持GRPC的反向代理和负载均衡配置

    Nginx代理gRPC反向代理和负载均衡配置 linux版本安装 一.准备和安装 #指定目录安装( /home/yyt/nginxgrpc) mkdir /home/yyt/nginxgrpc cd ...

  2. Windos环境用Nginx配置反向代理和负载均衡

    Windos环境用Nginx配置反向代理和负载均衡 引言:在前后端分离架构下,难免会遇到跨域问题.目前的解决方案大致有JSONP,反向代理,CORS这三种方式.JSONP兼容性良好,最大的缺点是只支持 ...

  3. 学完Nginx/OpenResty详解,反向代理与负载均衡配置,能涨薪多少

    反向代理与负载均衡配置 接下来介绍Nginx的重要功能:反向代理+负载均衡.单体Nginx的性能虽然不错,但也是有瓶颈的.打个比方:用户请求发起一个请求,网站显示的图片量比较大,如果这个时候有大量用户 ...

  4. Nginx反向代理实现负载均衡配置图解

     come from: http://www.php100.com/html/program/nginx/2013/0905/5529.html 负载均衡配置是超大型机器需要考虑的一些问题,同时也 ...

  5. Nginx的反向代理与负载均衡--配置Nginx

    前言 Nginx 是一个非常轻量级的服务器,他虽轻但是他最大的优点就是可以承载大量的并发,所以说一般的话很少有用 Node 直接去做服务器让用户去访问的,因为 Node 本身就需要做非 常非常多的事情 ...

  6. nginx 配置反向代理和负载均衡

    Nginx的配置文件: nginx安装目录/conf/nginx.conf 重新加载配置文件 ./nginx -s reload 配置虚拟主机 一个server就是一台虚拟主机 server {lis ...

  7. nginx配置反向代理和负载均衡完结篇

    具体安装配置参考之前的文章 https://blog.csdn.net/weixin_44001965/article/details/102723855 文章目录 一,nginx操作的常用命令 ng ...

  8. Nginx Oracle反向代理与负载均衡配置

    场景需求:     由于Oracle RAC模式在生产环境不建议使用SCAN IP,使用Nginx完成TCP/UTP三层的负载.   实施环境: Nginx版本:1.14.2 Nginx服务器IP: ...

  9. Nginx反向代理以及负载均衡配置

    一 .nginx 的优缺点: nginx 相对 apache 的优点: 轻量级,同样起web 服务,比apache 占用更少的内存及资源 抗并发,nginx 处理请求是异步非阻塞的,而apache 则 ...

最新文章

  1. Cpp 对象模型探索 / new 对象时加括号和不加括号时的差别
  2. 从头编写 asp.net core 2.0 web api 基础框架 (4) EF配置
  3. python新奇检测_3种Python检测URL状态
  4. 【LeetCode】剑指 Offer 58 - II. 左旋转字符串
  5. 【BZOJ3530】数数(AC自动机,动态规划)
  6. NSThread 在主线操作的三个方法
  7. 手机号归属地区编码_Excel隐藏手机号中间4位的6种方法,你见过几种?
  8. java day28【多表查询 、事务 、DCL】
  9. php 3种常见设计模式
  10. Atitit  深入理解命名空间namespace  java c# php js
  11. ENVI国产卫星插件
  12. sqlite查到找db文件
  13. 破解WMV格式电影的许可证
  14. 计算机控制技术实验平台,信号与系统•控制理论及计算机控制技术实验平台
  15. Windows定时关机小程序
  16. 全方位适配信创生态体系 远眺捷码完成国产化认证
  17. 网上FLAC3D学习笔记
  18. axure 8 表格合并_Word页面布局、“插入”选项卡及表格部分考点梳理
  19. 【Linux常用指令2】
  20. 关于JDK lambda表达式与匿名内部类的等价实现却出现了截然不同的结果原因分析

热门文章

  1. 生成器 php 举例,PHP生成器简单实例
  2. mvc中简单从controll传递数据到前台页面(视图)
  3. Python数据分析——Numpy常用函数
  4. android 无缝连续播放视频
  5. 初识Linux(5)
  6. java的timertask_Java中Timer和TimerTask来实现计时器循环触发
  7. TOFEL Speaking 托福口语 —— 模板
  8. 2018年总结2019年计划
  9. 虚拟机多开无网络连接
  10. Pusher入门:使用状态通道