• nginx几个知识点汇总


    WHY? 为什么用Nginx而不用LVS?

    7点理由足以说明一切:
    1 、高并发连接: 官方测试能够支撑 5 万并发连接,在实际生产环境中跑到 2 ~ 3 万并发连接数。?
    2 、内存消耗少: 在 3 万并发连接下,开启的 10 个 Nginx 进程才消耗 150M 内存( 15M*10=150M )。?
    3 、配置文件非常简单: 风格跟程序一样通俗易懂。?
    4 、成本低廉: Nginx 为开源软件,可以免费使用。而购买 F5 BIG-IP 、 NetScaler 等硬件负载均衡交换机则需要十多万至几十万人民币。?
    ? 使用 Nginx 做七层负载均衡的理由?
    5 、支持 Rewrite 重写规则: 能够根据域名、 URL 的不同,将 HTTP 请求分到不同的后端服务器群组。?
    6 、内置的健康检查功能: 如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。?
    7 、节省带宽: 支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。

    nginx几个知识点汇总

    处理query_string
    (1)什么是query_string:
    http://i.cnblogs.com/EditPosts.aspx?opt=1

    上面链接中的?后面的opt=1就是query_string,即url中?后面的都是
    (2)nginx中如何获取到上面的值。本例以query_string有一个key为例,多个就是多个正则引用$1,$2的区别而已
    nginx中全局变量$args和$query_string中存放的数据就是请求的url中带的query_string
    如何获取query_string中key对应的value呢,以上面的链接为例,就是key:opt 对应的value: 1

    方法1:下面使用了permanent,因为使用last没有生效。那个大神给看看是什么原因

    复制代码
    location /EditPosts.aspx {
                if ($args ~ opt=(d+)){
    	        set $opt $1;  #将截取到的opt对应的值$1赋值给变量$opt(变量必须以$开头,并且不能与nginx预设的全局变量同名)以备后用。
                    rewrite  /(.*).aspx  /$1/$opt? permanent;   #最后的?很关键,表示正则结束,不然rewrite后的url会变成/EditPosts/1?opt=1
    } }
    复制代码

    在正则表达式中可以,可以使用小括号对变量值进行截取,在花括号中使用$1...$9引用截取的值(注意,$后面的数字从1开始的哦)

    方法2:

    复制代码
          location /EditPosts.aspx {
                if ($args ~ opt=(d+)){
                    rewrite  /(w*).aspx  /$1/$arg_opt? permanent; #即$arg_query_string中key代表的字符串  				
                }  	
            }		
    复制代码



    log_format及nginx的部分预设全局变量的值:

    复制代码
        log_format  main '$remote_addr - $remote_user [$time_local]  "$uri" - "$request_uri" -"$request" -"$status"     "$http_referer" "$http_user_agent" '
    	                 ' "$http_x_forwarded_for"  "$request_time" '
    	                 '[$cookie_customerID_cookie_flag] [$args]'
    	;	
    
    127.0.0.1 - - [11/Jul/2016:17:11:56 +0800]  "/bbs/index.html" - "/bbs/" -"GET /bbs/ HTTP/1.1" -"200"     "-" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36"  "-"  "0.000" [-] [-]
    127.0.0.1 - - [11/Jul/2016:17:11:57 +0800]  "/vender/AdminLTE/AdminLTE.min.css" - "/vender/AdminLTE/AdminLTE.min.css" -"GET /vender/AdminLTE/AdminLTE.min.css HTTP/1.1" -"200"     "http://localhost/bbs/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36"  "-"  "0.000" [-] [-]
    127.0.0.1 - - [11/Jul/2016:17:11:57 +0800]  "/vender/bootstrap_v3.3.5/css/bootstrap.min.css" - "/vender/bootstrap_v3.3.5/css/bootstrap.min.css" -"GET /vender/bootstrap_v3.3.5/css/bootstrap.min.css HTTP/1.1" -"200"     "http://localhost/bbs/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36"  "-"  "0.000" [-] [-]
    复制代码



    粘一个匹配过程:

    复制代码
            location / {
                root   D:/workspace/webapp;
                index  index.html index.htm;
            }
    
    	location /api {
                proxy_pass   http://localhsot:9090/api;		   
            }
    		
    		location /topic/view {
                rewrite  /topic/view/(.*) /topic/#/$1 permanent;
            }		
    		
    		location ~ /topic/module/d+ {
                if ($args ~ type=(d+)){
    			    #set $type $1;
                    #rewrite  /topic/module/(d+)  /hello/#/$1?cid=$type? permanent;   
                    rewrite  /topic/module/(d+)  /hello/#/$1?cid=$arg_type? permanent;   				
                }  	
                rewrite  /topic/module/(d+)  /hello/#/$1 permanent;   			
            }
    复制代码

    2016/07/12 18:44:23 [debug] 3580#292: post event 0054E058

    2016/07/12 18:44:23 [debug] 3580#292: delete posted event 0054E058
    2016/07/12 18:44:23 [debug] 3580#292: accept on 0.0.0.0:80, ready: 0
    2016/07/12 18:44:23 [debug] 3580#292: malloc: 00512E08:256
    2016/07/12 18:44:23 [debug] 3580#292: *89 accept: 127.0.0.1:49491 fd:400
    2016/07/12 18:44:23 [debug] 3580#292: *89 event timer add: 400: 60000:3736476011
    2016/07/12 18:44:23 [debug] 3580#292: *89 reusable connection: 1
    2016/07/12 18:44:23 [debug] 3580#292: *89 select add event fd:400 ev:0
    2016/07/12 18:44:23 [debug] 3580#292: *89 post event 0054E0A8
    2016/07/12 18:44:23 [debug] 3580#292: *89 delete posted event 0054E0A8
    2016/07/12 18:44:23 [debug] 3580#292: *89 http wait request handler
    2016/07/12 18:44:23 [debug] 3580#292: *89 malloc: 005211A0:1024
    2016/07/12 18:44:23 [debug] 3580#292: *89 WSARecv: fd:400 rc:0 444 of 1024
    2016/07/12 18:44:23 [debug] 3580#292: *89 reusable connection: 0
    2016/07/12 18:44:23 [debug] 3580#292: *89 malloc: 00518010:4096
    2016/07/12 18:44:23 [debug] 3580#292: *89 http process request line
    2016/07/12 18:44:23 [debug] 3580#292: *89 http request line: "GET /topic/module/7?channel=3 HTTP/1.1"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http uri: "/topic/module/7"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http args: "channel=3"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http exten: ""
    2016/07/12 18:44:23 [debug] 3580#292: *89 http process request header line
    2016/07/12 18:44:23 [debug] 3580#292: *89 http header: "Host: localhost"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http header: "Connection: keep-alive"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http header: "Upgrade-Insecure-Requests: 1"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http header: "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http header: "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http header: "Accept-Encoding: gzip, deflate, sdch"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http header: "Accept-Language: zh-CN,zh;q=0.8"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http header: "Cookie: JSESSIONID=608D2B53198A02DE2B977D976A6DE026"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http header done
    2016/07/12 18:44:23 [debug] 3580#292: *89 event timer del: 400: 3736476011
    2016/07/12 18:44:23 [debug] 3580#292: *89 generic phase: 0
    2016/07/12 18:44:23 [debug] 3580#292: *89 rewrite phase: 1
    2016/07/12 18:44:23 [debug] 3580#292: *89 test location: "/"
    2016/07/12 18:44:23 [debug] 3580#292: *89 test location: "api"
    2016/07/12 18:44:23 [debug] 3580#292: *89 test location: "topic/view"
    2016/07/12 18:44:23 [debug] 3580#292: *89 test location: ~ "/topic/module/d+"
    2016/07/12 18:44:23 [debug] 3580#292: *89 using configuration "/topic/module/d+"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http cl:-1 max:1048576
    2016/07/12 18:44:23 [debug] 3580#292: *89 rewrite phase: 3
    2016/07/12 18:44:23 [debug] 3580#292: *89 http script var
    2016/07/12 18:44:23 [debug] 3580#292: *89 http script var: "channel=3"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http script regex: "channel=(d+)"
    2016/07/12 18:44:23 [notice] 3580#292: *89 "channel=(d+)" matches "channel=3", client: 127.0.0.1, server: localhost, request: "GET /topic/module/7?channel=3 HTTP/1.1", host: "localhost"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http script if
    2016/07/12 18:44:23 [debug] 3580#292: *89 http script regex: "/topic/module/(d+)"
    2016/07/12 18:44:23 [notice] 3580#292: *89 "/topic/module/(d+)" matches "/topic/module/7", client: 127.0.0.1, server: localhost, request: "GET /topic/module/7?channel=3 HTTP/1.1", host: "localhost"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http script copy: "/bbs/#/"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http script capture: "7"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http script copy: "?cid="
    2016/07/12 18:44:23 [debug] 3580#292: *89 http script var: "3"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http script regex end
    2016/07/12 18:44:23 [notice] 3580#292: *89 rewritten redirect: "/bbs/#/7?cid=3", client: 127.0.0.1, server: localhost, request: "GET /topic/module/7?channel=3 HTTP/1.1", host: "localhost"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http finalize request: 301, "/topic/module/7?channel=3" a:1, c:1
    2016/07/12 18:44:23 [debug] 3580#292: *89 http special response: 301, "/topic/module/7?channel=3"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http set discard body
    2016/07/12 18:44:23 [debug] 3580#292: *89 HTTP/1.1 301 Moved Permanently
    Server: nginx/1.10.1
    Date: Tue, 12 Jul 2016 10:44:23 GMT
    Content-Type: text/html
    Content-Length: 185
    Location: http://localhost/bbs/#/7?cid=3
    Connection: keep-alive

    2016/07/12 18:44:23 [debug] 3580#292: *89 write new buf t:1 f:0 0051896C, pos 0051896C, size: 205 file: 0, size: 0
    2016/07/12 18:44:23 [debug] 3580#292: *89 http write filter: l:0 f:0 s:205
    2016/07/12 18:44:23 [debug] 3580#292: *89 http output filter "/topic/module/7?channel=3"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http copy filter: "/topic/module/7?channel=3"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http postpone filter "/topic/module/7?channel=3" 00518B04
    2016/07/12 18:44:23 [debug] 3580#292: *89 write old buf t:1 f:0 0051896C, pos 0051896C, size: 205 file: 0, size: 0
    2016/07/12 18:44:23 [debug] 3580#292: *89 write new buf t:0 f:0 00000000, pos 00EC39D8, size: 132 file: 0, size: 0
    2016/07/12 18:44:23 [debug] 3580#292: *89 write new buf t:0 f:0 00000000, pos 00EC3780, size: 53 file: 0, size: 0
    2016/07/12 18:44:23 [debug] 3580#292: *89 http write filter: l:1 f:0 s:390
    2016/07/12 18:44:23 [debug] 3580#292: *89 http write filter limit 0
    2016/07/12 18:44:23 [debug] 3580#292: *89 WSASend: fd:400, s:390
    2016/07/12 18:44:23 [debug] 3580#292: *89 http write filter 00000000
    2016/07/12 18:44:23 [debug] 3580#292: *89 http copy filter: 0 "/topic/module/7?channel=3"
    2016/07/12 18:44:23 [debug] 3580#292: *89 http finalize request: 0, "/topic/module/7?channel=3" a:1, c:1
    2016/07/12 18:44:23 [debug] 3580#292: *89 set http keepalive handler
    2016/07/12 18:44:23 [debug] 3580#292: *89 http close request
    2016/07/12 18:44:23 [debug] 3580#292: *89 http log handler
    2016/07/12 18:44:23 [debug] 3580#292: *89 free: 00518010, unused: 1022
    2016/07/12 18:44:23 [debug] 3580#292: *89 free: 005211A0
    2016/07/12 18:44:23 [debug] 3580#292: *89 hc free: 00000000 0
    2016/07/12 18:44:23 [debug] 3580#292: *89 hc busy: 00000000 0
    2016/07/12 18:44:23 [debug] 3580#292: *89 tcp_nodelay




    上面提到的问题解决了,原因是如下:

    2016/07/12 20:13:28 [debug] 4044#3764: *15 http process request line
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http request line: "GET /topic/module/7?channel=3 HTTP/1.1"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http uri: "/topic/module/7"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http args: "channel=3"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http exten: ""
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http process request header line
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http header: "Host: localhost"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http header: "Connection: keep-alive"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http header: "Upgrade-Insecure-Requests: 1"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http header: "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http header: "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http header: "Accept-Encoding: gzip, deflate, sdch"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http header: "Accept-Language: zh-CN,zh;q=0.8"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http header done
    2016/07/12 20:13:28 [debug] 4044#3764: *15 event timer del: 400: 3741821009
    2016/07/12 20:13:28 [debug] 4044#3764: *15 generic phase: 0
    2016/07/12 20:13:28 [debug] 4044#3764: *15 rewrite phase: 1
    2016/07/12 20:13:28 [debug] 4044#3764: *15 test location: "/"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 test location: "api"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 test location: "topic/view"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 test location: ~ "/topic/module/d+"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 using configuration "/topic/module/d+"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http cl:-1 max:1048576
    2016/07/12 20:13:28 [debug] 4044#3764: *15 rewrite phase: 3
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script var
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script var: "channel=3"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script regex: "channel=(d+)"
    2016/07/12 20:13:28 [notice] 4044#3764: *15 "channel=(d+)" matches "channel=3", client: 127.0.0.1, server: localhost, request: "GET /topic/module/7?channel=3 HTTP/1.1", host: "localhost"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script if
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script regex: "/topic/module/(d+)"
    2016/07/12 20:13:28 [notice] 4044#3764: *15 "/topic/module/(d+)" matches "/topic/module/7", client: 127.0.0.1, server: localhost, request: "GET /topic/module/7?channel=3 HTTP/1.1", host: "localhost"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script copy: "/bbs/#/"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script capture: "7"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script args
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script copy: "cid="
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script var: "3"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http script regex end
    2016/07/12 20:13:28 [notice] 4044#3764: *15 rewritten data: "/bbs/#/7", args: "cid=3", client: 127.0.0.1, server: localhost, request: "GET /topic/module/7?channel=3 HTTP/1.1", host: "localhost"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 post rewrite phase: 4
    2016/07/12 20:13:28 [debug] 4044#3764: *15 uri changes: 11
    2016/07/12 20:13:28 [debug] 4044#3764: *15 test location: "/"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 test location: "api"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 test location: "topic/view"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 test location: ~ "/topic/module/d+"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 using configuration "/"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http cl:-1 max:1048576
    2016/07/12 20:13:28 [debug] 4044#3764: *15 rewrite phase: 3
    2016/07/12 20:13:28 [debug] 4044#3764: *15 post rewrite phase: 4
    2016/07/12 20:13:28 [debug] 4044#3764: *15 generic phase: 5
    2016/07/12 20:13:28 [debug] 4044#3764: *15 generic phase: 6
    2016/07/12 20:13:28 [debug] 4044#3764: *15 generic phase: 7
    2016/07/12 20:13:28 [debug] 4044#3764: *15 access phase: 8
    2016/07/12 20:13:28 [debug] 4044#3764: *15 access phase: 9
    2016/07/12 20:13:28 [debug] 4044#3764: *15 access phase: 10
    2016/07/12 20:13:28 [debug] 4044#3764: *15 post access phase: 11
    2016/07/12 20:13:28 [debug] 4044#3764: *15 content phase: 12
    2016/07/12 20:13:28 [debug] 4044#3764: *15 content phase: 13
    2016/07/12 20:13:28 [debug] 4044#3764: *15 content phase: 14
    2016/07/12 20:13:28 [debug] 4044#3764: *15 content phase: 15
    2016/07/12 20:13:28 [debug] 4044#3764: *15 content phase: 16
    2016/07/12 20:13:28 [debug] 4044#3764: *15 content phase: 17
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http filename: "D:/workspace/webapp/bbs/#/7"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 add cleanup: 00DF8948
    2016/07/12 20:13:28 [error] 4044#3764: *15 CreateFile() "D:/workspace/webapp/bbs/#/7" failed (3: The system cannot find the path specified), client: 127.0.0.1, server: localhost, request: "GET /topic/module/7?channel=3 HTTP/1.1", host: "localhost"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http finalize request: 404, "/bbs/#/7?cid=3" a:1, c:1
    2016/07/12 20:13:28 [debug] 4044#3764: *15 http special response: 404, "/bbs/#/7?cid=3"
    2016/07/12 20:13:28 [debug] 4044#3764: *15 internal redirect: "/404.html?"

  • 相关阅读:
    C++语法小记---string类
    C++语法小记---标准库
    C++语法小记---运算符重载
    C++语法小记---函数重载
    C++语法小记---友元
    C++语法小记---开篇
    STM32使用printf丢失第一个字母的问题
    AD芯片的基准参考电压问题
    运算放大器的调试经验
    [置顶] TIM_GetCounter与TIM_GetCapture1的区别
  • 原文地址:https://www.cnblogs.com/panxuejun/p/6054657.html
Copyright © 2020-2023  润新知