Nginx
基本概念
-
反向代理 服务器做代理配置,使用代理服务器转发客户端的请求到真是的服务器上,用户无感知
-
负载均衡 客户端发送倒戈请求到服务器,某些请求可能需要连接数据库做数据查询处理之后返回数据,请求多且复杂怎么办 我们可以增加服务器的数量,将请求分发到不同的服务器处理 请求分发
- 轮询
- 加权轮询
- ipHash 固定的 ip 通过 hash 运算一定昂问到同一台服务器
- 动静分离 为了加快网页的解析速度,可以把动态资源和静态资源由不同的服务器来解析,加快解析的速度,降低原来单个服务器的压力
常用的 cmd 命令
- nginx (启动)
- nginx -s stop (停止)
- nginx -s reload (重载)
- 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/;
}