[転帖]nginx location配置の詳細説明

4691 ワード

nginx locationの配置の詳細説明
http://outofmemory.cn/code-snippet/742/nginx-location-configuration-xiangxi-explain
 
構文ルール:  location [=|~|~*|^~] /uri/ { … }
  • = 最初は正確なマッチングを示しています。
  • ^~ 最初はuriを表していますが、ある通常の文字列からスタートして、urlパスにマッチすると理解すればいいです。nginxはurlを符号化しないので、/static/20%/aaを要求します。規則^~/static/aaにマッチします。
  • ~ 冒頭に大文字と小文字を区別する正則が
  • にマッチすることを示します。
  • ~* はじめに、大文字と小文字を区別しない正則が
  • にマッチすることを示します。
  • !~および!~*は、それぞれ、大文字と小文字とを区別して一致しない正則
  • である。
  • / 汎用マッチングでは、どの要求も一致します。
  • 複数のlocationの配置の場合、マッチング順は(資料を参考にして来て、まだ実際に検証していないので、試してみれば分かります。こだわる必要はなく、参考までに):
    まずマッチング=、次にマッチングします。次はファイルの中の順序で正則にマッチします。最後は汎用マッチングに渡します。マッチングが成功した場合、マッチングを停止し、要求を現在のマッチング規則で処理します。
    例として、以下のような適合規則があります。
    location = / {
       #  A
    }
    location = /login {
       #  B
    }
    location ^~ /static/ {
       #  C
    }
    location ~ \.(gif|jpg|png|js|css)$ {
       #  D
    }
    location ~* \.png$ {
       #  E
    }
    location !~ \.xhtml$ {
       #  F
    }
    location !~* \.xhtml$ {
       #  G
    }
    location / {
       #  H
    }
    
    その効果は以下の通りです。
    ルートディレクトリにアクセスする/たとえばhttp://localhost/ ルールAにマッチする
    アクセスhttp://localhost/login ルールBにマッチしますhttp://localhost/register 一致ルールH
    アクセスhttp://localhost/static/a.html マッチングルールC
    アクセスhttp://localhost/a.gifを選択します。http://localhost/b.jpg ルールDとルールEに適合するが、規則Dの順序が優先され、ルールEは機能しない。http://localhost/static/c.png ルールCに優先的にマッチします。
    アクセスhttp://localhost/a.PNG ルールEは、ルールDにマッチしないので、ルールEは、大文字と小文字を区別しない。
    アクセスhttp://localhost/a.xhtml ルールFとルールGは一致しません。http://localhost/a.XHTMLルールGは一致しません。大文字と小文字は区別されていません。ルールF、ルールGは排除法に属しています。適合規則は合致していますが、一致しないので、実際の応用にはどこで使われているかを考えてみます。
    アクセスhttp://localhost/category/id/1111 最終的にルールHにマッチします。以上の規則は全部一致しないので、この時は、FastCGI(php)、tomcat(jsp)、nginxが方向プロキシサーバとして存在するべきです。
    したがって、実際に使用する場合、個人的には少なくとも3つの適合規則の定義があると思います。
    #       ,              ,         ,     。
    #                ,          
    #        
    location = / {
        proxy_pass http://tomcat:8080/index
    }
    
    #                 ,  nginx  http      
    #        ,         ,         
    location ^~ /static/ {
        root /webroot/static/;
    }
    location ~* \.(gif|jpg|jpeg|png|css|js|ico)$ {
        root /webroot/res/;
    }
    
    #           ,                
    #               ,        
    #            , .php,.jsp        
    
    location / {
        proxy_pass http://tomcat:8080/
    }
    
    nginxの他の構成情報紹介
    三、ReWrite文法last – 基本的にはこのFlaGを使います。break – Rewirteを中止し、redirectに引き続きマッチしませんでした。 – 一時リダイレクトされたHTTP状態302 permanentを返します。 – 永久リダイレクトのHTTP状態301を返します。
    1、以下は判断できる表現です。-fおよび!-fは、ファイル-dおよび!-dが存在するか否かを判断するために使用され、ディレクトリ-eおよび!-eが存在するか否かを判断するために使用される。ファイルまたはディレクトリ-xおよび!-xが存在するか否かを判断するために使用される。
    2、以下は判定のためのグローバル変数です。
    例:http://localhost:88/test1/test2/test.php
    $host:localhost
    $server_port:88
    $request_uri:http://localhost:88/test1/test2/test.php
    $document_uri:/test1/test2/test.php
    $document_root:D:
    ginx/html $request_filename:D:
    ginx/html/test1/test2/test.php
    四、Redirect文法
    server {
        listen 80;
        server_name start.igrow.cn;
        index index.html index.php;
        root html;
        if ($http_host !~ "^star\.igrow\.cn$" {
            rewrite ^(.*) http://star.igrow.cn$1 redirect;
        }
    }
    
    五、防犯チェーン
    location ~* \.(gif|jpg|swf)$ {
        valid_referers none blocked start.igrow.cn sta.igrow.cn;
        if ($invalid_referer) {
            rewrite ^/ http://$host/logo.png;
        }
    }
    
    六、ファイルタイプによって有効期限を設定する
    location ~* \.(js|css|jpg|jpeg|gif|png|swf)$ {
        if (-f $request_filename) {
            expires 1h;
            break;
        }
    }
    
    七、あるディレクトリへのアクセス禁止
    location ~* \.(txt|doc)${
    root /data/www/wwwroot/linuxtone/test;
    deny all;
    }
    
    添付:使用可能なグローバル変数の一部
    $args
    $content_length
    $content_type
    $document_root
    $document_uri
    $host
    $http_user_agent
    $http_cookie
    $limit_rate
    $request_body_file
    $request_method
    $remote_addr
    $remote_port
    $remote_user
    $request_filename
    $request_uri
    $query