Nginx

112 阅读2分钟

Nginx

基本概念

  1. 反向代理 服务器做代理配置,使用代理服务器转发客户端的请求到真是的服务器上,用户无感知

  2. 负载均衡 客户端发送倒戈请求到服务器,某些请求可能需要连接数据库做数据查询处理之后返回数据,请求多且复杂怎么办 我们可以增加服务器的数量,将请求分发到不同的服务器处理 请求分发

  • 轮询
  • 加权轮询
  • ipHash 固定的 ip 通过 hash 运算一定昂问到同一台服务器
  1. 动静分离 为了加快网页的解析速度,可以把动态资源和静态资源由不同的服务器来解析,加快解析的速度,降低原来单个服务器的压力

常用的 cmd 命令

  1. nginx (启动)
  2. nginx -s stop (停止)
  3. nginx -s reload (重载)
  4. nginx -s quit (安全退出)

Nginx 中常用的配置项 (conf/nginx.conf)

配置项中的注释用 # 做注释

全局块

配置会影响 Nginx 全局的指令。一般有以下

  • 运行 Nginx 服务器的用户组
  • Nginx 进程 pid 的存放路径
  • 日志文件的存放路径
  • 配置文件的引入
  • 是否允许生成 wroker process
user administrator administratorsl; # 配置用户或者组,默认为 nobody

worker_processes 2; # 允许生成的 worker process 数量

pid /nginx/pid/nginx.pid; # 指定 Nginx 运行进程文件存放的地址

error_log log/error.log; # 错误日志的存放路径

http 块

配置影响 Nginx 服务器或与用户的网络连接。常有以下的配置

  • 每个进程的最大连接数
  • 选择那种事件驱动模型
  • 是否允许同时生接受多个网络连接
  • 开启多个王瑞连接序列化
events {
  accept_mutex on; # 设置网络连接序列化,防止惊群现象的发生 默认为 on
  multi_accept on; # 设置一个进程是否同时接受多个网络请求 默认为 off
  use epoll; #设置事件驱动模型,Nginx 中常用的事件驱动模型是 epoll (select|poll|kqueue|epoll|resig|dev/poll|eventport)
  worker_connections 1024; # 最大的连接数 默认为 512
}

upstream

用来配置一组代理服务器的地址

upstream myServerGroup {
  server 127.0.0.1:1233 weight=4 ;
  server 127.0.0.1:2222 weight=5 backup; # 热备,当上一个服务器出翔异常的时候使用这个
}

server 块

配置以恶虚拟主机的相关参数,一个 http块 中可以有多个 server

http {
  server {
    keepalive_requests 120; # 单连接请求上限次数。
    listen 4545; # 监听的端口号
    server_name 127.0.0.1; # 监听的地址
    location ~*^.+$ {
      root path; # 根路径
      proxy_pass http://(自定义upstream); # 请求转向自定义的 upstream 服务器列表
      deny 123.2.4.123; # 拒绝该 ip 访问
      allow 172.123.34; 允许该 ip 访问
    }
  }
}

location 块

配置请求得路由,以及各种路由得处理情况, Location 块通过指定模式来与客户端请求得URL想匹配

// 配置请求转发,凡是匹配到 /api/* 都代理到服务器后台真实得地址

// 转发到指定得地址
location /api/ {
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header REMOTE-HOST $remote_addre;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://192.168.31.100:8080/;
}

// 定义集群,将请求转发到集群服务器组上处理(按权重分配转发的路径)
upstream serverhub {
  server http://192.168.1.100:8080 weight=5;
  server http://192.168.1.101:8080 weight=3;
}
location /api/ {
  proxy_set_header Host $http_host;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header REMOTE-HOST $remote_addre;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_pass http://serverhub/;
}