美文网首页部署运维
一篇就弄懂Nginx的常规用法

一篇就弄懂Nginx的常规用法

作者: VienFu | 来源:发表于2019-07-02 16:10 被阅读15次

本文旨在讲述nginx的常见概念及用法。

1. 概念

Nginx(engine-x)是一个高性能的Web服务器和HTTP反向代理服务器,当然它还可以用作负载均衡、HTTP缓存和邮件服务器等。

Nginx作为Web服务器,跟Apache相比,它占用的资源更小,能够支持更多的并发连接(官方文档宣称可达到50000个),效率更高。

2. 正向代理和反向代理的区别

首先,正向代理和反向代理本质的区别是其代理的对象不同,正向代理代理的是客户端,代替客户端去访问服务器;而反向代理则是代理的服务端,代替服务器去接受客户端的请求,下面以买房为例简单说明一下:

正向代理

假设A现在要买一个二手房,并且知道C手里有满足自己需求的房源,但是却不认识C;而B同时认识A和C,这样A就可以通过B来购买C的房子。整个过程中A对于C来讲是无感的但是A却清楚明白自己是从C那儿获取的房源。

反向代理

同样A要买一个二手房但是不知道具体的房源,而B呢手里有很多房源恰好有满足自己需求的,这样A通过B就可以买到自己心仪的房子了。整个过程中A是不知道自己所买的房子真正的户主是谁,B在中间就充当一个类似现在很多房屋中介的角色。

下面讲讲几种场景下nginx的配置,通常http模块一般用作nginx全局配置,通过include来导入各个server的配置,http模块在此处就不展开了,主要围绕server模块来进行。

3. 反向代理

nginx是通过关键字proxy_pass来实现的,下面是一个实例:

server {
        listen 80;
        server_name  www.example.com;

        location / {
            proxy_pass  192.168.0.12:8090;
        }
}

4. 负载均衡

nginx的负载均衡是关键字upstream配合proxy_pass来实现的,下面是简单的例子:

http {
  upstream django_project {
      server www.xxx.com:8001;
      server www.yyy.com:8001;
      server www.zzz.com:8001;
  }
  server {
    listen 80;
    server_name: www.example.com;

    location / {
      proxy_pass django_project;
    }
  }
}

另外负载均衡可以有很多策略,默认采用轮询的方式,还支持权重、ip哈希、url哈希等,此处不一一说明了。

5. Nginx其它配置说明

nginx缓存

nginx缓存就是将请求过的内容在本地建一个副本,下次请求时直接响应而不必去访问后端,那如何启用nginx的缓存功能呢?

启用nginx缓存,需要先在http全局区域设置proxy_cache_path,然后在server区域通过proxy_cache使用它,当然还有一些其他的设置参数,下面通过具体的实例来说明:

http {
  ...
  # 设置缓存的目录、名称及占用内存大小
  # 设置每次加载时最大加载时间及文件的数量
  # 设置缓存占用最大内存总量
  proxy_cache_path /var/www/nginx_cache keys_zone=mytest:10m loader_threshold=300 load_files=200 max_size=200m;
  server {
    listen 80;
    server_name www.example.com;
    # 使用缓存mytest
    proxy_cache mytest;
    location / {
      proxy_pass www.example01.com:8090;
      # 设置缓存的有效期
      proxy_cache_valid any 5m;
      # 设置最少几次请求进行缓存
      proxy_cache_min_uses 5;
      # 设置当如下参数不为空时跳过缓存
      proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
    }
  }
}

另外还可以通过proxy_cache_methods来指定哪些方法被缓存。

nginx跳转/重定向

此功能是通过nginx的rewrite模块来实现的,使用正则表达式改变URI,并且根据变量来转向以及选择配置。

常见格式:
rewrite uri_regex replacement [flag]

rewrite的几种flag:

  • break:停止处理当前rewrite模块的指令集,其他模块的指令集不受影响,且不会发起新一轮location的匹配;
  • last:停止处理当前rewrite模块的指令集,开始搜索与更改后的URI相匹配的location;
  • redirect:临时重定向;
  • permanent:永久重定向;

下面举一个简单的例子:

server {
  listen 80;
  server_name: localhost;

  location /mytest {
    rewrite ^/mytest /mytest00;
    rewrite ^/mytest00 /more/index.html break;
    # rewrite ^/mytest00 /more/index.html last;
    rewrite ^/more/index\.html /mytest02;  # 不会被执行
    proxy_pass https://www.baidu.com;
  }

  # location /more/index.html {
  #  proxy_pass https://www.baidu.com;
  # }
}

在浏览器上输入:localhost:80/mytest,结果输出百度产品大全页面;
如果把break行注释掉,而last行去掉注释,则会页面输出error;
而进一步把其下location区域注释去掉,则页面输出百度产品大全页面。

rewrite模块还支持if指令,另外rewrite 指令是使用指定的正则表达式regex来匹配请求的urI,如果匹配成功,则使用replacement更改URI。rewrite指令按照它们在配置文件中出现的顺序执行。可以使用flag标志来终止指令的进一步处理。如果替换字符串replacement以http://,https://或$ scheme开头,则停止处理后续内容,并直接重定向返回给客户端。

跨域

服务器默认是不允许跨域的,为了解决跨域的问题,我们可以在nginx做如下配置:

location / {
  add_header Access-Control-Allow-Origin *;
  add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
  add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization'

  if ($request_method = 'OPTIONS') {
    return 204;
  }
}

相关文章

  • 一篇就弄懂Nginx的常规用法

    本文旨在讲述nginx的常见概念及用法。 1. 概念 Nginx(engine-x)是一个高性能的Web服务器和H...

  • 一篇就弄懂HAProxy的常规用法

    首先,本文主要从应用角度来讲讲HAProxy的常规用法,不会涉及到特别深的东西,另外本文涉及到的实例都是在ubun...

  • 一篇就弄懂Linux netstat和tcpdump的常见用法

    1. Netstat Netstat是一款CLI工具,它可以列出系统上所有的网络连接情况,包括tcp、udp和其他...

  • 常规用法

    windows 启动mongodb python自动生成和安装requirements.txt依赖 mysql数据...

  • BroadcastReceiver和LocalBroadcast

    常规 BroadcastReceiver 的常规用法 LocalBroadcastManager 特点 广播数据在...

  • Excel 公式

    Excel有许多公式,这篇文章就列出常用的Excel公式用法。 if函数,可进行数据进行判断常规用法是:IF(判断...

  • 06.Element UI组件之按钮

    一、Button组件的常规用法 |--基础用法: |--...

  • Swift-SnapKit用法探究

    [TOC] snapKit用法实践 snapKit常规用法 snaptKit 是masonry的swift版本,布...

  • iframe内容汇总

    iframe的常规用法就不说了,就那么用,这里总结一下iframe里其他的用法和功能 1.iframe高度自适应 ...

  • iframe内容汇总

    iframe的常规用法就不说了,就那么用,这里总结一下iframe里其他的用法和功能 1.iframe高度自适应 ...

网友评论

    本文标题:一篇就弄懂Nginx的常规用法

    本文链接:https://www.haomeiwen.com/subject/gxedxqtx.html