nginx 简介

本贴最后更新于 1000 天前,其中的信息可能已经时过境迁

1、简介

nginx 是一个高性能的 HTTP 和反向代理 web 服务器,同时也提供了 IMAP/POP3/SMTP 服务。

2、正向代理和反向代理

  • **正向代理:**对服务端来说,只知道代理服务器访问它,不知道具体的客户端信息,此时客户端和代理在同一局域网下
  • **反向代理:**对客户端来说,只知道访问代理服务器,不知道具体访问了那些服务端,此时服务端和代理在同一个局域网下

image.png

image.png

3、常用命令

  • nginx -s stop 不管当前有没有请求在处理,直接停止
  • nginx -s quit 完成正在处理的请求再停止
  • nginx -s reload 重新加载(修改了配置文件后执行此命令)

4、动静分离

使用 nginx 可以实现动态资源和静态资源的分离

#拦截后台请求
location / {
    proxy_pass http://localhost:8080;
    proxy_set_header X-Real-IP $remote_addr;
}

#拦截静态资源
location ~ .*\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ {
    root /opt/static;
}

5、负载均衡

nginx 的负载均衡算法主要有轮询,ip_hash,权重,随机等算法,通过 upstream 模块来实现。

upstream 定义了一组服务,服务可以监听不同的端口,并且服务可以是 TCP 服务或 unix 域套接字(UNIX-domain sockets)。

下面是官方给的一个定义示例:

upstream backend {
    server backend1.example.com weight=5;
    server 127.0.0.1:8080       max_fails=3 fail_timeout=30s;
    server unix:/tmp/backend3;

    server backup1.example.com  backup;
}

nginx 默认使用了轮询算法实现负载均衡,这里发送请求,较多的请求会落在第一个服务上,少部分请求会落在第二个或者第三个服务上,第四个服务用 backup 标识,如果前面三个服务都异常,则会去请求第四个服务。

5.1、server 的参数

示例中 server 后面跟了一些参数除了示例中出现的,server 后面还可以添加其他参数,常用的几个参数定义如下:

  • **weight=number,**给服务分配权重,number 默认为 1;
  • **max_conns=number,**标明服务的最大连接数,默认是 0,即不限制;
  • **max_fails=number,fail_timeout=number,这两个参数需要结合使用,fail_timeout 定义了一个时间周期,max_fails 表示在这个时间周期内允许的最大失败连接数,如果在这个时间周期内失败的连接数超过 max_fails 设置的值,那么在这个时间周期内就不回去请求这个服务,max_fails 默认 1,timeout 默认 10;**
  • **backup,**标识这是一个备用服务,其他服务不可用就调用这个服务;
  • **down,**标识服务永远不可用;
  • ......

5.2、hash

nginx 内置了基于 ketama 一致性算法的负载均衡方法,该方法基于 Memcached 缓存实现,如果新增或者删除一个服务,会导致大部分缓存失效然后重新映射。常用的 url_hash 只需要把 hash 的值设为请求的 url 即可,示例如下**。**

 upstream urlhash {
    hash $request_uri;
     server 127.0.0.1:8080;
     server 127.0.0.1:8081;
     server 127.0.0.1:8082;
 }

5.3、ip_hash

ip_hash 策略将客户端的 IP 作为 hash 算法的关键字来进行请求的分配,确保从同一个客户端发来的请求,会被分配到同一个服务上,除非服务不可用了,如果要删除一个服务,不能直接删除,用 down 标识,如果直接删除,那么就会重新对 ip 进行 hash 操作,之前的请求就不一定能落在原来的服务上。

upstream backend {
    ip_hash;
    server backend1.example.com;
    server backend2.example.com;
    server backend3.example.com down;
    server backend4.example.com;
}

5.4、加权轮询

通过 weight=number 实现

upstream backend {
    server backend1.example.com weight=5;
    server backend2.example.com weight=3;
    server backend3.example.com weight=2;
}
  • NGINX

    NGINX 是一个高性能的 HTTP 和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器。 NGINX 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本 0.1.0 发布于 2004 年 10 月 4 日。

    311 引用 • 546 回帖

相关帖子

回帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...