Nginx (エンジン x) は、高性能な HTTP およびリバース プロキシ サーバーであり、IMAP/POP3/SMTP サーバーでもあります。 Nginx は、ロシアで 2 番目に訪問数の多いサイト Rambler.ru (ロシア語: Рамблер) 向けに Igor Sysoev によって開発されました。最初の公開バージョン 0.1.0 は、2004 年 10 月 4 日にリリースされました。 ソース コードは BSD のようなライセンスの下でリリースされており、安定性、豊富な機能セット、サンプル構成ファイル、システム リソースの消費量が少ないことで知られています。 2011 年 6 月 1 日に、nginx 1.0.4 がリリースされました。 Nginx は、BSD のようなプロトコルに基づいてリリースされた軽量の Web サーバー/リバース プロキシ サーバーおよび電子メール (IMAP/POP3) プロキシ サーバーです。その特徴は、メモリの占有量が少なく、強力な同時実行機能を備えていることです。実際、nginx の同時実行機能は、同じタイプの Web サーバーよりも優れています。中国本土の nginx Web サイトのユーザーには、Baidu、JD.com、Sina、NetEase、Tencent、Taobao などがあります。 今日は、正規表現の使用規則についてお話します。まずは簡単にいくつかの例を挙げて、説明していきたいと思います。 正規表現とは何か 正規表現とも呼ばれる正規表現。正規表現(英語:Regular Expression、コードではregex、regexp、またはREと略されることが多い)は、コンピューターサイエンスの概念です。正規表現は、特定のパターン (ルール) に一致するテキストを取得して置換するためによく使用されます。 多くのプログラミング言語は、正規表現を使用した文字列操作をサポートしています。たとえば、Perl には強力な正規表現エンジンが組み込まれています。正規表現の概念は、もともと sed や grep などの Unix ツールによって普及しました。正規表現は多くの場合「regex」と略され、単数形は regexp、regex、複数形は regexps、regexes、regexen となります。 正規表現は、いくつかの一般的な文字といくつかのメタ文字で構成されます。通常の文字には大文字、小文字、数字が含まれますが、メタ文字には特別な意味があります。これについては以下で説明します。 最も単純なケースでは、正規表現は通常の検索文字列のように見えます。たとえば、正規表現「testing」にはメタ文字が含まれていません。「testing」や「testing123」などの文字列と一致しますが、「Testing」とは一致しません。 正規表現を実際にうまく使用するには、メタ文字を正しく理解することが最も重要です。次の表に、すべてのメタ文字とその簡単な説明を示します。
例1: Wap側アクセスをPC側ドメイン名に自動リダイレクト この場合の要件は、携帯電話を使用してドメイン名 www.baidu.com にアクセスすると、自動的に m.baidu.com に書き換えられることです。ドメイン名 www.souhu.com にアクセスすると、ドメイン名 m.souhu.com に書き換えられます。 if ( $server_name ~ ((|www.|)([if ( $ser| #メインドメイン名をフィルタリングする if ( $server_name ~ ((www.|)([\S\s]*)) ) { $domain $3 を設定します。 } #初期値を設定します。set $temp 0; #支払いドメイン名かどうかを判定する if ( $host ~* (pay|zf) ) { $temp を "${temp}1" に設定します。 } #携帯電話かどうかを判断します if ($http_user_agent ~* (mobile|nokia|iphone|ipad|android|samsung|htc|blackberry)) { $temp を "${temp}2" に設定します。 } #ジャンプするかどうか判断する if ( $temp = "02" ) { ^(.*) https://app.$domain を永久に書き換えます。 } スクリプトロジック分析: まず、メインドメイン名を取得する必要があるため、正規表現を使用して一致させる必要があります。ドメイン名 www.baidu.com を例にとると、最初に表示されるのは www. フィールドですが、ユーザーが直接 baidu.com と入力してアクセスする場合もあるため、ここでは (www.|) を使用して一致させ、次にこのフィールドを一致させます。以下の $3 は、3 番目の括弧内の値を取得し、最終的に変数 $a に割り当てることを意味します。次の手順では、組み込み変数 $http_user_agent を使用して、ユーザーがサイトにアクセスする方法を判断し、リダイレクト操作を実行します。 例2: Nginx IPホワイトリスト この場合の要件は、バックエンド アクセスが特定の IP アドレスからのアクセスのみを許可することです。他の IP アドレスがアクセスした場合は、別のエラー ページにジャンプするか、直接ホームページに戻ります。 #初期値を定義する $my_ip を 0 に設定する; #指定されたホワイトリストかどうかを判断します if ( $http_x_forwarded_for ~* "10.0.0.1|172.16.0.1" ){ $my_ip を 1 に設定します。 } # ホワイトリストにないIPをリダイレクトする if ( $my_ip = 0 ) { ^/$ /40x.html を書き換えます。 } スクリプトロジック分析: これは実は、ユーザーがパソコンからアクセスしているのか、携帯電話からアクセスしているのかという上記の判断と同じですが、異なるのは組み込み変数だけです。Nginx の組み込み変数では、$http_x_forwarded_for がお客様がアクセスした実際の IP アドレスなので、この組み込み変数を判断に使用し、同時に初期値を追加します。 例3: URLアドレスを書き換えて送信されたコンテンツを非表示にする この場合の要件は、フォームコンテンツを送信した後、http://baidu.com/index.php?user=admin&pass=123などの一部のパラメータを除いたURLアドレスが表示されるため、URLをhttp://baidu.com/indexに書き換える必要があることです。 ^/(\w+)/(\w+)/z(\d+) /$1/$2/$3/$arg_x/$arg_y? を書き換えますか? 永久的に; ^/(\w+)/(\w+)/(\d+)/(\d+)/(\d+) /$1/$2/$3/$4_$5.png を永続的に書き換えます。 スクリプトロジック分析: まず、URL の進化について考えてみましょう。http://baidu.com/index.php?user=admin&pass=123 => http://baidu.com/index.php/user/admin/pass/123 => http://baidu.com/index。次に、進化に応じて段階的に進めていきます。nginx の書き換えの通常の一致は、疑問符の後のパラメータと一致しないため、$arg_{パラメータ名} を使用してパラメータを保持する必要があります。また、一致ルールは疑問符で終わる必要があります。最後に、置き換える他のいくつかの項目と一致し、書き換えが完了します。 要約する 正規表現は難しくありません。よく使われるマッチングメタ文字はほんのわずかです。正規表現はソケットゲームとも言えますが、このゲームは非常に広く使われています。 以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: MySQLでMyISAMストレージエンジンをInnodbに変更した操作記録のまとめ
目次ケース1:ケース2:ケース3:簡単にまとめると:過去 2 日間で、完全なテーブル スキャンを引き...
原因このブログを書いた理由は、今日Leetcodeの日課問題をやっていたからです。文字列を整数(at...
1. 基本的なテキスト要素を使用してコンテンツをマークアップするまず表示効果を見てみましょう:対応す...
この記事では、ドラッグアンドドロップをJSオブジェクト指向で実装するための具体的なコードを参考までに...
1. Dockerの紹介1.1 仮想化1.1.1 仮想化とは何ですか?コンピュータにおける仮想化とは...
//文法: @media mediatype and | not | only (メディア機能) ...
「人間中心」と「グリーンデザイン」という2つの視点から考える——デザイン業界の同僚とも議論する2つの...
MySQL データベースでは、テーブルが互いに関連付けられた後は、それらを任意に削除することはできま...
目次utf8mb4 の紹介UTF8 バイト数超過エラーutf8mb4 サポートデフォルトの文字エンコ...
ターゲットzabbix フロントエンド監視の iostat コマンドでデータの 1 つを表示します。...
最近、Textrea に転送したときに、データが本当に行ごとに保存できるかどうかという問題に遭遇しま...
MySQL を使用する場合、日付は通常、datetime や timestamp などの形式で保存さ...
目次1. コア1. Domノードを取得する2. ノードの更新2.1 実践演習3. Domノードを削除...
<a href="https://www.jb51.net/" title...
序文MySQL で show create table <tablename> コマンド...