简悉 Nginx

简悉 Nginx

references:

关于Nginx负载均衡的详解教程

nginx如何实现负载均衡

文章目录

  • 简悉 Nginx
    • Nginx 安装
    • 负载均衡
    • 正向代理和反向代理
    • Nginx 在前端的应用
      • 1. 本地搭建一个 web 静态资源服务器
      • 2. Nginx 配置缓存
      • 3. 开启 https
      • 4. 开启 gzip
    • Nginx location 配置语法
    • Nginx 负载均衡(Load Balance)调度算法
      • nginx proxy_set_header
    • Nginx 事件模块
    • Nginx 工作模式
    • 网络专线
        • 区分一级域名,二级域名,x级域名

写在前面
nginx 作为一个广泛应用的 web 服务器,支持三种形式的虚拟主机配置:

  • 基于端口号的主机配置
  • 基于 IP 的主机配置
  • 基于域名的主机配置
    Nginx出现原因:解决 C10K 问题,

Nginx 安装

mac 上可以使用 homebrew 安装, 常见的操作指令可以参考

# 查看 nginx 配置文件的路径
brew info nginx
# 退出
nginx -s quit
# 强制停止服务
nginx -s stop
# 重新加载配置文件
nginx -s reload

负载均衡

负载平衡也称负载共享,是指对系统中的负载情况进行动态调整,以尽量消除或减少系统中各节点负载不均衡的现象。具体实现方法是将过载节点上的任务转移到其他轻载节点上,尽可能实现系统各节点的负载平衡,从而提高系统的吞吐量。负载共享有利于统筹管理分布式系统中的各种资源,便于利用共享信息及其服务机制扩大系统的处理能力

正向代理和反向代理

  1. 正向代理类似一个跳板机,代理访问外部资源。即 client 知道自己请求发到的是一个代理服务器

我是一个用户,我访问不了某网站,但是我能访问一个代理服务器,这个代理服务器呢,他能访问那个我不能访问的网站,于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容,代理服务器去取回来,然后返回给我。从网站的角度,只在代理服务器来取内容的时候有一次记录,有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站。主要用途如下:

  • 访问原来无法访问的资源,如 google, 说白了就是一个正向代理

  • 可以做缓存,加速访问资源

  • 对客户端访问授权,上网进行认证

  • 代理可以记录用户访问记录(上网行为管理),对外隐藏用户信息
    简悉 Nginx_第1张图片

  1. 反向代理,实际运行方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个服务器。 client 不知道自己请求的是代理服务器。 主要用途如下:
  • 保证内网的安全,可以使用反向代理提供 WAF 功能,阻止 web 攻击大型网站,通常将反向代理作为公网访问地址,Web 服务器是内网。(Web Application FirewallWeb 应用防火墙是通过执行一系列针对HTTP/HTTPS的安全策略来专门为Web应用提供保护的一款产品)

  • 负载均衡,通过反向代理服务器来优化网站的负载

简悉 Nginx_第2张图片

Nginx 在前端的应用

1. 本地搭建一个 web 静态资源服务器

手把手搭建nginx服务器,部署前端代码

一般我们在公司里经常是使用统一的构建工具打出代码包,然后部署在公司服务器上,但有可能部署之后无法正常访问,这时候我们可以本地配置一个 nginx 服务器,将打包后的代码部署在上面查看是否有故障。

  1. step1: 配置 /usr/local/etc/nginx/nginx.conf server 模块,即配置一个虚拟主机,其中可以自行设定 port

  2. step2: 配置 location 模块,实现 URI 向文件系统的映射,一般可以使用默认的 root index.html, 如果有需要配置前端请求服务端反向代理的可以在 /api或其他对应的路径下进行配置 proxy_pass路径

配置反向代理这一步是不是很像我们在 webpack 里本地设置 proxy 来避免出现跨域问题,其实本质差不多

  1. step3: 将打包后的文件放到默认的 /usr/local/var/www下(对应 step2 中的 root 目录)

  2. step4: nginxnginx -s reload 重新加载配置文件启动,访问 step2 中设置的 server_name:port

2. Nginx 配置缓存

Nginx 基础配置 - 资源缓存配置

add_header

通过在 location 中设置 add_header 设置 Cache-control expire 等信息实现前端缓存

3. 开启 https

NGINX SSL Termination

4. 开启 gzip

直接在http这一级开启 gzip 配置即可减少这个资源在网络中传输的大小,实现前端性能优化。

Enabling Compression

nginx 的基本配置结构

events { 

}

http 
{
    server
    { 
        location path
        {
            ...
        }
        location path
        {
            ...
        }
     }

    server
    {
        ...
    }

}

Nginx location 配置语法

使用 PCRE:Perl Compatible Regular expression 即 perl 正则规范。

  1. rewrite
  • 主要功能是实现URL地址重写。
  • Nginx的 rewrite 规则需要PCRE软件的支持,即通过Perl兼容正则表达式语法进行规则匹配

rewrite ^(/download/.*)/media/(.*)\..*$  $1/mp3/$2.mp3 last

如果我们请求的path是/download/xunlei/media/movie.flv,那么实际的请求资源就是/download/xunlei/mp3/movie.mp3

简悉 Nginx_第3张图片

Nginx 负载均衡(Load Balance)调度算法

Nginx支持的负载均衡调度算法方式

nginx负载均衡的5种策略

  • weight轮询(默认)
  • ip_hash
  • fair
  • url_hash

nginx proxy_set_header

Nginx指令add_header和proxy_set_header的区别

Nginx proxy_set_header 理解

Nginx 事件模块

  1. NGINX 效率高的原因?
  • Nginx使用了epoll(只针对Linux而言):
    • epoll是Linux系统上性能最高的基于事件机制的I/O多路复用模式
    • nginx把事件分为了网络事件和磁盘事件,而网络事件包含了客户端建立连接,可读,可写,关闭连接事件。磁盘事件包含了平时遇到的可读事件和可写事件。
      然后Nginx把这些事件都注册到epoll中,当相应的事件发生的时候,nginx就会自动调用我们注册的回调函数进行事件的处理。
  • Nginx使用了事件机制
  1. 为什么 epoll 高效?
  • epoll在Linux内核中开辟了一个cache缓冲区,使用红黑树结构,并且使用共享内核和应用层进行数据传递,非常的高效。
  • eopll只对活跃的连接感兴趣,即使同时有几百万的客户端和Nginx相连,同时活跃的连接数量也不会很高(因为大多数的连接是处于不活跃状态的,这是客户端的一种特点),所以epoll可以把所有事件处于ready状态的连接全部返回给用户,避免了用户自己轮训所有连接的过程。

Nginx 工作模式

Nginx是一个Master-Worker的工作模式。Nginx在启动之后会生成一个master进程,master不处理请求,而是生成和管理worker进程,worker进程主要负责干活(处理请求)

网络专线

笼统来说,网络专线就是为某个机构拉一条独立的网线,也就是一个独立的局域网,例如军事,银行等,让用户的数据传输变得可靠可信,专线的优点就是安全性好,QoS 可以得到保证。不过,专线租用价格也相对比较高,而且管理也需要专业人员。

区分一级域名,二级域名,x级域名

顶级域名 一级域名 二级域名 三级域名什么区别?

非常简单的说就是:

  • 顶级域名就是一级域名,比如 .com .org .cn
  • N级域名就是在N-1级域名前追加一级。
    • 比如二级域名是在一级域名前加一级,二级域名示例:http://baidu.com http://zhihu.com http://qq.com

你可能感兴趣的:(nginx,运维)