• nginx.conf配置文件解析(http、server、location proxy_pass)


    nginx.conf配置文件解析(http、server、location)

    标签: nginxnginx-conf
    分类:

    nginx.conf文件在安装目录/conf目录下


    1、定义Nginx运行的用户和用户组

    user nginx nginx;

    2、nginx进程数,建议设置为等于CPU总核心数

    worker_processes 1;

    3、全局错误日志定义类型,[ debug | info | notice | warn | error | crit ]

    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;

    4、进程文件

    pid /var/run/nginx.pid;

    5、工作模式与连接数上限:worker_connections是单个后台worker process进程的最大并发链接数,并发总数是 worker_processes 和 worker_connections 的乘积, 即 max_clients = worker_processes * worker_connections

    events {
        worker_connections  1024;
    }

    6、http下的一些配置及其意义

    include       mime.types; #文件扩展名与文件类型映射表
    default_type  application/octet-stream; #默认文件类型
    sendfile on;  #开启高效文件传输模式,sendfile指令指定nginx是否调用sendfile函数来 输出文件,对于普通应用设为 on,如果用来进行下载等应用磁盘IO重负载应用,可设置 为off,以平衡磁盘与网络I/O处理速度,降低系统的负载。注意:如果图片显示不正常 把这个改成off。
    autoindex on; #开启目录列表访问,合适下载服务器,默认关闭。
    tcp_nopush on; #防止网络阻塞
    tcp_nodelay on; #防止网络阻塞
    keepalive_timeout 120; #长连接超时时间,单位是秒
    gzip on; #开启gzip压缩输出

    7、server虚拟主机一些配置及其意义
    这里写图片描述
    例如:

    http{
     #虚拟主机1
     server{
      listen       80;
      server_name  www.nginx1.com;
      location / {
         root   html;
         index  index.html index.htm;
      }
     }
    
     #虚拟主机2
     server{
      listen       80;
      server_name  localhost;
      location / {
         root   html;
         index  index.html index.htm;
      }
     }
    }

    这里server_name配置域名的时候,如果是本地测试,需要到windos下hosts文件里,把你的域名和ip添加进去(C:WindowsSystem32driversetchosts)

    nginx支持三种类型的 虚拟主机配置

    • 1、基于ip的虚拟主机, (一块主机绑定多个ip地址)
    server{
      listen       192.168.1.1:80;
      server_name  localhost;
    }
    server{
      listen       192.168.1.2:80;
      server_name  localhost;
    }
    • 2、基于域名的虚拟主机(servername)
    #域名可以有多个,用空格隔开
    server{
      listen       80;
      server_name  www.nginx1.com www.nginx2.com;
    }
    server{
      listen       80;
      server_name  www.nginx3.com;
    }
    • 3、基于端口的虚拟主机(listen不写ip的端口模式)
    server{
      listen       80;
      server_name  localhost;
    }
    server{
      listen       81;
      server_name  localhost;
    }

    server下的location映射解析(官方中文文档:ngx_http_core_module)匹配规则:location [ = | ~ | ~* | ^~ ] uri { ... }

    location URI {}:

    对当前路径及子路径下的所有对象都生效;

    location = URI {}:

    精确匹配指定的路径(注意URL最好为具体路径),不包括子路径,因此,只对当前资源生效;

    location ~ URI {}:

    location ~* URI {}:

    模式匹配URI,此处的URI可使用正则表达式,~区分字符大小写,~*不区 分字符大小写;

    location ^~ URI {}:

    不再检查正则表达式

    优先级:= > ^~ > ~|~* > /|/dir/

    举例:

    location = / {
        [ configuration A ]
    }
    
    location / {
        [ configuration B ]
    }
    
    location /documents/ {
        [ configuration C ]
    }
    
    location ^~ /images/ {
        [ configuration D ]
    }
    
    location ~* .(gif|jpg|jpeg)$ { 
        [ configuration E ] 
    } 
    解答:请求“/”匹配配置A, 请求“/index.html”匹配配置B, 请求“/documents/document.html”匹配配置C, 请求“/images/1.gif”匹配配置D, 请求“/documents/1.jpg”匹配配置E

    location配置规则

    1、“ =”前缀的指令严格匹配这个查询。如果找到,停止搜索。
    2、所有剩下的常规字符串,匹配最精确的(一般最长的那个)。如果这个匹配使用^〜前缀,搜索停止。
    3、正则表达式,在配置文件中是从上往下匹配的
    4、如果第3条规则产生匹配的话,结果被使用。否则,如同从第2条规则被使用
    特殊情况:
    两种情况下,不需要继续匹配正则 location :
    ( 1 ) 当普通 location 前面指定了“ ^~ ”,特别告诉 Nginx 本条普 通 location 一旦匹配上,则不需要继续正则匹配。
    ( 2 ) 当普通location 恰好严格匹配上 ,不是最大前缀匹配,则不再继续匹配正则

    在nginx中配置proxy_pass时,当在后面的url加上了/,相当于是绝对根路径,则nginx不会把location中匹配的路径部分代理走;如果没有/,则会把匹配的路径部分也给代理走。

     

    下面四种情况分别用http://192.168.1.4/proxy/test.html 进行访问。

    第一种:

    location  /proxy/ {

              proxy_pass http://127.0.0.1:81/;

    }

    会被代理到http://127.0.0.1:81/test.html 这个url

     

    第二咱(相对于第一种,最后少一个 /)

    location  /proxy/ {

              proxy_pass http://127.0.0.1:81;

    }

    会被代理到http://127.0.0.1:81/proxy/test.html 这个url

     

    第三种:

    location  /proxy/ {

              proxy_pass http://127.0.0.1:81/ftlynx/;

    }

    会被代理到http://127.0.0.1:81/ftlynx/test.html 这个url。

     

    第四种情况(相对于第三种,最后少一个 / ):

    location  /proxy/ {

              proxy_pass http://127.0.0.1:81/ftlynx;

    }

    会被代理到http://127.0.0.1:81/ftlynxtest.html 这个url

     

    上面的结果都是本人结合日志文件测试过的。从结果可以看出,应该说分为两种情况才正确。即http://127.0.0.1:81 (上面的第二种) 这种和 http://127.0.0.1:81/.... (上面的第1,3,4种) 这种。

    hosts,本地测试

    linux 修改/etc/hosts,加一条:127.0.0.1 www.you域名.cn .windows,修改hostname.

    另外nginx的反向代理Tengine(Nginx的升级版)的健康检查 也用到了location知识,可以去看看

  • 相关阅读:
    Mock
    JMeter分布式并发
    APP常见的性能测试指标
    Jmeter模拟微信用户
    jmeter性能测试
    小程序测试注意点
    性能测试常见瓶颈及调优方法
    常见的性能缺陷
    测试理论知识(一)
    ISO9126质量模型
  • 原文地址:https://www.cnblogs.com/shanwater/p/7788053.html
Copyright © 2020-2023  润新知