Ngnix学习笔记

介绍

Nginx是一款轻量级的HTTP服务器,采用事件驱动的异步非阻塞处理方式框架,让其具有极好的IO性能,时常用于服务端的反向代理和负载均衡

优点

  • 支持海量高并发,采用IO多路复用epoll,实际生产环境可支撑2-4w并发连接数

  • 内存消耗少、成本低

  • 配置文件简单、跨平台

主要功能

  • 正向、反向代理

  • 负载均衡、分流

  • 虚拟主机(绑定host)

nginx.conf文件结构

# 全局块
# 配置影响nginx全局的指令,比如:
# 1.允许nginx服务器的用户组
# 2.nginx进程pid存放路径
# 3.日志存放日志
# 4.配置文件引入
# 5.允许生成的worker_process数(一般设置为和CPU核数一样)
user nginx;
worker_process 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
  # events块
  # 配置影响nginx服务器或用户的网络连接,比如:
  # 1.每个进程的最大连接数
  # 2.选取哪种事件驱动模型处理连接请求
  # 3.是否允许同时接受多个网路连接
  # 4.开启多个网路连接序列化
  worker_connections 1024;
}
http {
  # http块,可嵌套多个server
  # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置,比如:
  # 1.文件引入
  # 2.mime-type定义
  # 3.日志自定义
  # 4.是否使用sendfile传输文件
  # 5.连接超时时间
  # 6.单连接请求数
  server {
  # server块
  # 配置虚拟主机的相关参数
    location [PATTERN] {
      # location块
      # 配置请求的路由
    }
    location / {
      root /usr/share/nginx/html; # 服务默认启动目录
      index index.html index.htm; # 默认访问文件
    }
    error_page 404 /404.html; # 配置404页面
    
    error_page 500 502 503 504 /50x.html; # 配置错误状态码显示页面
    location = /50x.html {
      root /usr/share/nginx/html;
    }
  }
}

一个配置文件

#user administrator administrators;  #配置用户或者组,默认为nobody nobody。
#worker_processes 2;  #允许生成的进程数,默认为1
#pid /nginx/pid/nginx.pid;   #指定nginx进程运行文件存放地址
error_log log/error.log debug;  #制定日志路径,级别。这个设置可以放入全局块,http块,server块,级别以此为:debug|info|notice|warn|error|crit|alert|emerg
events {
    accept_mutex on;   #设置网路连接序列化,防止惊群现象发生,默认为on
    multi_accept on;  #设置一个进程是否同时接受多个网络连接,默认为off
    #use epoll;      #事件驱动模型,select|poll|kqueue|epoll|resig|/dev/poll|eventport
    worker_connections  1024;    #最大连接数,默认为512
}
http {
    include       mime.types;   #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型,默认为text/plain
    #access_log off; #取消服务日志    
    log_format myFormat '$remote_addr–$remote_user [$time_local] $request $status $body_bytes_sent $http_referer $http_user_agent $http_x_forwarded_for'; #自定义格式
    access_log log/access.log myFormat;  #combined为日志格式的默认值
    sendfile on;   #允许sendfile方式传输文件,默认为off,可以在http块,server块,location块。
    sendfile_max_chunk 100k;  #每个进程每次调用传输数量不能大于设定的值,默认为0,即不设上限。
    keepalive_timeout 65;  #连接超时时间,默认为75s,可以在http,server,location块。

    upstream mysvr {   
      server 127.0.0.1:7878;
      server 192.168.10.121:3333 backup;  #热备
    }
    error_page 404 https://www.baidu.com; #错误页
    server {
        keepalive_requests 120; #单连接请求上限次数。
        listen       4545;   #监听端口
        server_name  127.0.0.1;   #监听地址       
        location  ~*^.+$ {       #请求的url过滤,正则匹配,~为区分大小写,~*为不区分大小写。
           #root path;  #根目录
           #index vv.txt;  #设置默认页
           proxy_pass  http://mysvr;  #请求转向mysvr 定义的服务器列表
           deny 127.0.0.1;  #拒绝的ip
           allow 172.18.5.54; #允许的ip           
        } 
    }
}

命令

  • 启动 nginx 或systemctl start nginx.service

  • 停止 nginx -s stop(立即停止) 或 nginx -s quit (进程完成当前工作后停止)

  • 重启 nginx -s reload 或 service nginx reload

  • 重载指定配置文件 .nginx -c /usr/local/nginx/conf/nginx.conf

  • 查看 nginx 版本 nginx -v

  • 验证nginx配置文件是否正确nginx -t

正向、反向代理

正向代理

概念:客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转发请求并获取内容返回给客户端。

特点:正向代理是代理服务器代理了客户端,去和目标服务器进行交互,通过正向代理服务器访问目标服务器,目标服务器不知道真正的客户端是谁;一般是由客户端架设的,比如在自己的机器上安装一个代理软件。

场景:访问原来无法访问的资源;提高访问速度,做缓存加速访问的资源;对客户端访问授权;记录用户访问记录,对外隐藏用户信息

 反向代理

概念:反向代理服务器接收客户端连接请求,将请求转发到内部网络上的服务器,从服务器得到结果返回到客户端。

特点:反向代理是代理服务器代理了目标服务器,去和客户端进行交互,通过反向代理服务器访问目标服务器时,客户端不知道真正的目标服务器是谁;一般是服务器架设的,比如在自己的机器集群中部署一个反向代理服务器。

场景:负载均衡,将客户端请求分发到不同的真实服务上;隐藏服务器真实IP;提高访问速度,对静态内容及短时间内有大量访问请求的动态内容提供缓存服务;提供安全保障,可以作为应用层防火墙,提供加密和SSL加速,HTTP访问认证等。

负载均衡

概念:服务器接收到的请求按照规则分发的过程称为负载均衡,负载量就是服务器接收到的来自客户端和nginx反代服务器的请求数量。

nginx负载均衡策略:

  • 默认轮询:每个请求按时间顺序逐一分配到不同的后端服务器,如果后端某个服务器宕机,能自动排除故障系统
# constPolling 作为存放负载均衡的变量
upstream constPolling {
    server localhost:10001; 
    server localhost:10002;
}
server {
    listen 10000;
    server_name localhost;
    location / {
      proxy_pass http://constPolling; #在代理的时候接入constPolling
      proxy_redirect default;
    }
}

  • 加权轮询:设置weight权值,有效利用主机资源,值越大被访问的概率越高
upstream constPolling {
    server localhost:10001 weight=1; 
    server localhost:10002 weight=2;
}
  • ip_hash:每个请求根据访问ip的hash结果分配,每个访客固定访问同一个后端服务,可以有效解决session共享问题
upstream constPolling {
     ip_hash; 
     server    localhost:10001 weight=1;
     server    localhost:10002 weight=2;
}
  • fair算法:安装upstream_fair模块,fair算法可以根据页面大小和加载时间长短进行负载均衡,响应速度短的优先分配
upstream constPolling { 
    server    localhost:10001;
    server    localhost:10002;
    fair; 
}

综合使用场景

  1. 同一个域名通过不同目录访问子系统,通过配置不同的location指向不同的项目目录代码或者项目启动的服务
server {
  # 通过匹配物理路径指向不同项目目录
  location /b {
    alias /var/www/html/mall/;
    index index.html index.html;
  }
  # 通过代理指向,指向项目服务
  location /b/ {
    proxy_pass http://127.0.0.1:8082/;
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

2.自动适配PC/移动端页面

server {
  listen 80;
  server_name localhost;
  location / {
    root /usr/share/nginx/pc;
    if($http_user_agent ~* '(Andriod|webOS|iPhone|iPod|BlackBerry)') {
      root /usr/share/nginx/mobile;
    }
    index index.html;
  }
}

3.前端单页面应用刷新404问题

server {
  listen 80;
  server_name localhost;
  location / {
    root /usr/share/nginx/html/dist; # vue打包后的文件夹
    index index.html index.htm;
    try_files $uri $uri/ /index.html;
  }
}

4.权限控制

server {
  listen 80;
  server_name localhost;
  charset utf-8;
  
  # 只可以访问指定的请求,否则返回403
  if($request_method !~^(GET|POST|HEAD)$) {
    return 403;
  }
  
  location / {
    #IP访问限制
    allow 192.168.0.3;
    deny all;
    
    root html;
    index index.html index.htm;
  }
}

参考链接

🚗 🚗 🚗 前端仔也需要懂的nginx内容 - 掘金

终于有人把正向代理和反向代理解释的明明白白了! - 云+社区 - 腾讯云

https://segmentfault.com/a/1190000038431473

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值