質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

Q&A

解決済

1回答

6374閲覧

nginxのmapディレクティブでの正規表現について

jamjam

総合スコア58

nginx

nginixは軽量で高性能なwebサーバーの1つです。BSD-likeライセンスのもとリリースされており、あわせてHTTPサーバ、リバースプロキシ、メールプロキシの機能も備えています。MacOSX、Windows、Linux、上で動作します。

0グッド

1クリップ

投稿2015/08/12 05:18

お世話になります。

nginxのアクセスログに、クライアント証明書に書いてあるCommonName(CN)を出力したくて調べた結果
log_formatに定義した変数「$ssl_client_s_dn_cn」を指定し、
さらにmapディレクティブに以下の記述をすることでCommonNameのみを出力することができました。

map $ssl_client_s_dn $ssl_client_s_dn_cn { default ""; ~/CN=(?<CN>[^/]+) $CN; }

ただ、正規表現が苦手かつ、ググったのを貼り付けただけなので
「$ssl_client_s_dn_cnに$CNを入れている」くらいしかわかりません。

どなたか、正規表現の部分を解説して頂けませんでしょうか?

宜しくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

mapディレクティブのキーである~/CN=(?<CN>[^/]+) の解説ですよね。調べてみると中途半端な表現に思えたのですが、動いているんですよね?
全部はわかりませんでしたが、回答します。

  • 最初の~は正規表現であることを示しています
  • /は謎です。NginxはPCREというPerl互換の正規表現ライブラリを使ってます
  • CN=という部分は対象文字列が「CN=で始まる場合」です
  • [^/]は文字クラスです。/以外の文字を示します
  • [^/]+/以外の文字1文字以上です。
  • (<CN>[^/]+)/以外の文字1文字以上でヒットするなら、CNという名前をつけます→なので値が$CNとなってます。
  • (?<CN>[^/]+)の?`は何者かわかりませんでした。最短一致の場合は量指定子の後につけるので…。Perlの正規表現の文化でしょうか?

完全な答えになってなくて恐縮ですが、回答させていただきました。

NginxのMapモジュール

投稿2015/08/12 07:41

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jamjam

2015/08/13 02:10

kompiroさん 有難うございます。 説明不足で申し訳なかったのですが、加工前の「ssl_client_s_dn」の値は以下の通りです。 ssl_client_s_dn:/C=JP/ST=hoge/L=hoge/O=hoge/OU=hoge/CN=hogehoge 謎の「/」と「?」を消して試してみました。 結論を申し上げると、 ・/を消す⇒動き変わらず。(/CN=で始まる場合という指定だったのかな?) ・?を消す⇒「test failed」と出て起動できず。 ?は大事な意味みたいです。 PCREでサブパターン使うときの作法みたいですね。 http://php.net/manual/ja/regexp.reference.subpatterns.php
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問