Nginx初探

本文详细介绍了Nginx的特性、启动方法、配置文件解析,包括正向代理、反向代理、负载均衡策略(轮询、权重、IP哈希、URL哈希、公平算法)以及Nginx的跨域、防盗链、缓存和Rewrite规则的使用。此外,还讨论了Nginx在处理高并发和优化性能方面的作用。
摘要由CSDN通过智能技术生成

一、介绍

Nginx 是一个高性能的HTTP和反向代理服务器,也是一个IMAP/POP3/SMTP服务器。Nginx的优点热部署、可以高并发链接、低内存消耗、处理响应快、具有高可靠性。

二、相关概念

正向代理:客户端配置代理服务器,进行互联网的访问。
反向代理:请求发送到反向代理服务器就会转发到真是服务器,对外暴露反向代理服务器。
负载均衡:平均分配到每个服务器上。
动静分离:动态页面和静态页面有不同的服务器进行解析。

三、Nginx的启动

在nginx的sbin目录下进行命令操作

查看版本号    ./nginx -v
启动          ./nginx 
停止          ./nginx -s stop
重新加载      ./nginx  -s relaod

四、nginx.conf配置文件详解

#user  nobody;
worker_processes  1;  # 并发处理的数量

error_log  logs/error.log  notice;  # 错误日志和级别

pid    logs/nginx.pid;   # nginx启动的pid

limit_conn_zone  key  name :size rate  # 限制传输速率

events {
    worker_connections  1024;  # 每个worker支持的最大连接
    use  epoll   #  还有select poll  配置内核模型
}


http {
    include       mime.types;
    default_type  application/octet-stream;

    # 日志的格式  其中$http_x_forwarded_for是记录真实的来源ip
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
   '$status $body_bytes_sent "$http_referer"''"$http_user_agent""$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile     on;  # 文件高效读取
    tcp_nopush   on;  # 提高网络传输速率,必须在sendfile开启下

    tcp_nodelay  on   # 实时性

    keepalive_timeout  65;

    gzip  on;   # 是否压缩传输
    gzip_comp_level 6 # [1-9] #推荐6 压缩级别(级别越高,压的越小,越浪费CPU计算资源)
    gzip_http_version 1.0|1.1  # 定义压缩版本
    gzip_types text/plain application/xml  #  压缩类型

    stub_status on  #  记录nginx的状态定义在server或者location下面

    server {
        listen       80;   # 监听的接口
        server_name  localhost;  # 提供服务器的域名

        #charset koi8-r;  # 编码格式

        #access_log  logs/host.access.log  main;

        location / { # 如果是~是正则表达式并且区分大小写,如果是~*就是不区分大小写,如果是=代表严格匹配
            root   html;
            index  index.html index.htm;  # 默认首页
            proxy_pass  http://127.0.0.1:8080;  # 进行转发路径,真实路径是proxy_pass+匹配规则
            alias   http://127.0.0.1:8080;  # 别名 真是路径就是自己
            autoindex on;   # 列出当前文件夹的内容  
            autoindex_exact_size  on  # 显示文件的大小  
            autoindex_localtime   on  # on代表问文件服务器时间 off代表gmt时间

            allow/deny  address|all   # 允许/拒绝,可以在http、server、location段中

            expires  时间   # 设置缓存
            
        }

    }
        # 放负载均衡的地址,在server块外面
        upstream myserver(服务名){
            server   127.0.0.1:8080;
        }
}

五、Nginx负载均衡

1.轮询(默认)

每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。

2.weight

指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。

upstream bakend {
    server 192.168.0.14 weight=4;
    server 192.168.0.15 weight=1;
}

3. ip_hash

每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。

upstream bakend {
    ip_hash;  
    server ip:port; 
}

4.url_hash

按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

upstream backend {
    server ip:port;
    hash $request_uri;
    hash_method crc32;  # hash算法
}

5.fair(第三方组件)

按后端服务器的响应时间来分配请求,响应时间短的优先分配。

upstream backend {
    server ip:port;
    fair;
}

设备的状态

down 模式表示不参与负载均衡

upstream bakend {
    server ip:port down;
}

 backup 预留备份服务器  不常用

upstream bakend {
    server ip:port backup;
}

 max_fails 允许请求失败的次数

upstream bakend {
    server ip:port max_fails=10;
}

fail_timeout  经过max_fail  失败后服务暂停时间

upstream bakend {
    server ip:port fail_timeout=10s;
}

max_conns 限制最大的接收连接数

upstream bakend {
    server ip:port max_conns=100;
}

六、Nginx 跨域

add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';

七、Nginx 防盗链

server {
   listen      80;
   server_name 127.0.0.1;
   location / {
	proxy_pass http://127.0.0.1:8080/image/;
	}
    location ~* .+\.(js|css|png|svg|ico|jpg)$ {
      valid_referers none blocked 192.168.1.8;   # none 代表 "Referer" 来源头部为空的情况
                                                 # blocked "Referer"来源头部不为空,但是里面的值被代理或者防火墙删除了,这些值都不以http://或者https://开头。
                                                 # 存放白名单 
      if ($invalid_referer){  # 如果不合法直接404
          return 404;
      }
  }
}

vaild_referers 有效的引用连接,如下,否则就进入$invaild_refere,返回403 forbiden。

TIPS:这里需要注意html里面的路径要保持一致。

八、Nginx 缓存

http {
  // ..... 其他的配置
  proxy_cache cache;  // 定义缓存名称
  proxy_cache_path  /data/nuget-cache levels=1:2 keys_zone=nuget-cache:20m max_size=50g inactive=168h;  // 缓存路径含义:路径 levels  缓存目录结构(1:2缓存两层)  keys_zone 名称:10m  max_size  最大饱和
  proxy_cache_valid 404 1m;            // 缓存过期 404缓存一分钟
  proxy_cache_key $uri$is_args$args;   // 缓存的内容
  proxy_redirect  off;                 // 跳转重定向
  proxy_set_header Host $host;         // 设置头
  proxy_connect_timeout                // 设置代理超时时间
  proxy_no_cache  1                    // 1 就是不缓存页面

  server {
    listen  8081;
    server_name  xxx.abc.com;
    location / {
      proxy_pass http://localhost:7878;
      add_header  Cache-Control  max-age=no-cache;  // 添加缓存

      limit_req req_zone  burst  nodelay;  // 延迟处理请求数超过burst定义的数量多余的返回503,
      limit_conn zone number;            // 同一时刻只允许多少个链接
    }
  }

  limit_req_zone $binary_remote_addr zone=req_zone:1m rate=1r/s   // 定义请求限制,在location中引用
  limit_conn_zone $binary_remote_addr  zone=name:size
}

九、Rewrite

作用:url地址的重写和重定向

rewrite  regex(匹配到的路径) replacement 修改成 [flag]  

flag的种类和区别
    last  停止rewrite检测
    break  停止rewrite检测
        区别:last会停止当前这个请求,并根据rewrite匹配的规则重新发起一个请求。新请求又从第一阶段开始
              break不会重新发起一个请求,只是跳过当前的rewrite阶段,并执行本请求后续的执行阶段
    redirect  返回302 地址栏会显示重定向后的地址
    permanent  返回301 地址栏会显示重定向后的地址

rewrite匹配优先级:1 执行server块的;2 执行location的;3 执行选定location块中的。

十、Nginx相关问题

nginx多个同名的server的优先级

在最前面的server优先。

多个location的优先级

= (精确的) >  ^ 以什么开头  > ~ (匹配 区分大小写) >  ~*(不区分大小写)

location = code/ { }
location ^code/ { }
location ~ code*/ { }
location ~* code*/ { }

alias和root的区别
root访问的是  root+匹配到的内容;alias  会把匹配到的直接转成root去进行解析。

try_files 按顺序检查文件是否存在

try_files $uri $uri/ /index.php

1. 将用户请求的uri内容是否在本地,存在则解析
2. 将请求加/, 类似重定向
3. 最后交给路径去处理(index.php)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值