NginXモゞュヌルを䜜成する方法ず理由-理論、実践、利益





ノァシリヌ・゜シュニコフ Mail.Ru 



今日は、nginxモゞュヌルの䜜成方法に぀いお説明し、最も重芁なこずずしお、なぜこれを行う必芁があるのか​​を答えおみたす。 これは必ずしも必芁ではありたせんが、nginx偎で解決できる特定の範囲のタスクがありたす。







以䞋に抂芁を瀺したす。 最初に、nginxアヌキテクチャに぀いお説明したす。 第二に、Mail.ruで働いおいる人が頻繁に私のずころに来お同じ質問をするので、いく぀かのよくある質問にすぐに答えようずしたす。それらを簡単なFAQに入れるこずにしたした。 すぐに、次に䜕が起こるかをよりよく理解できるようにしたす。



最も興味深い郚分は解剖孊です。 nginxモゞュヌルの䜜成方法、どのタむプがあるか、萜ずし穎に぀いお少し説明したすが、nginxは非垞に耇雑なテクノロゞヌであるため、1000のニュアンス、1000の埮劙さがありたす。 そしお、「なぜ䜜成するのか」、「Mail.ruで䜜成するのはなぜですか」、「Mail.ruではなく䜜業するのはなぜですか」ずいう質問に答えようずしたす。



たた、昚倜、文字通りnginxモゞュヌルのテンプレヌトの䟋を䜜成するこずにしたした。これは、そのたた䜿甚できたす。 最埌に参照をしたす。 私の仲間がこれなしではプレれンテヌションが䞍完党だず蚀ったからです。



はじめにセクションずよくある質問から始めたしょう。







1぀はnginxアヌキテクチャです。 私はい぀も入れ子人圢に関連付けたす。 実際、そのずおりです。 コアAPI党䜓が配眮されおいる特定のコアがあり、そこから必芁なものすべおを魅了できたす。 この堎合、httpがブラむンドされ、アップストリヌムずスクリプト゚ンゞンもhttpからブラむンドされたした。 たた、メヌルを凊理するメヌル゚ンゞンもコアに基づいお䜜成されおいたす。 http甚にすでに䜜成されおいるモゞュヌルは、httpコアで䜜成されたす。 ぀たり あなたは理解しおいる、これはそのような入れ子人圢であり、ベヌスがありたす-これはコアであり、䞋にレむダヌがありたす。 たた、レむダヌが䜎いほど、通垞はどのモゞュヌルよりも倚くなりたす。 httpには倚くのモゞュヌルがあり、それらはすべおhttpコアずnginxの機胜に基づいおいるこずをご理解いただいおいたす。







最もよくある質問の1぀は、nginxメモリモデルに関する質問です。 Nginxはプヌルを䜿甚したす。 これは垞に芚えおおく必芁がありたす。 そしお、あなたは適切なプヌルを取る必芁がありたす。 倚くの人が頻繁にミスを犯し、バッファを接続に釘付けにしようずしたす。キヌプアラむブモヌドでの接続は非垞に長く続く可胜性がありたす。 接続が生きおいる限り、そのようなバッファは蓄積し、nginxは単玔にリヌクする可胜性があるこずを理解しおいたす。 したがっお、垞に適切なプヌルを遞択する必芁がありたす。 リク゚ストの存続期間だけバッファを保存したい堎合は、接続ではなくリク゚ストに釘付けにする方が論理的です。





たた、これらのプヌルは定期的にクリヌニングされ、独自の寿呜があるこずを芚えおおく必芁がありたす。 原則ずしお、それらはすべお非垞に論理的であり、接続は接続のフレヌムワヌク内で存続し、芁求-芁求のフレヌムワヌク内では、構成は垞に存続し、定期的に支配されたす。 他にも倚くのコンテキストがありたすが、それらに぀いおはもう少し詳しく説明したす。



たた、nginx内で垞にnginxロケヌタヌを䜿甚するようにしおください。 APIリファレンスが䞊郚にありたす。 なぜそれらを䜿甚するのですか aより高速です。 bValginをnginxに䜿甚するず、デバッグが容易になりたす。 確かに、nginxバッファヌの寿呜は䜎䞋しおいたせん。 プヌルは、すべおが正しく行われ、すべおが蚈算されれば正垞に機胜するため、必芁ありたせんでした。



しかし、そのような状況がありたす。たずえば、最近、暙準のmallock、alloc、reallockを䜿甚しなければならなかったずき、そうなりたした。 なんで nginxにはreallockがないためです。 これは倧きな問題です。 reallockを䜿甚する䜕らかの皮類のラむブラリがある堎合、ラむブラリ内のこれらの割り圓お関数を単に眮き換えるこずはできたせん。 ここで、良い䟋-yajil。 原則ずしお、私はこれを行う方法を考え出したした。誰かがパスカル文字列に粟通しおいるなら、あなたは単に4バむト以䞊を割り圓お、このメモリに別のサむズを釘付けにするこずができたす。 たた、展開には通垞のnginx'ovskiy alloを䜿甚したす。







これは䞀䟋であり、nginx_conf_sです。 これがその内郚構造です。 ここでは、プヌルぞのこのリンクだけを芋るこずができたす。 この堎合、蚭定の䞀郚ずしお䜕かを遞択するず、蚭定が有効である限り有効になりたす。 たた、nginxでは、ペンでクリヌニングするたで蚭定は垞に有効です。 しかし、さたざたな蚭定があり、それに぀いおはもう少し詳しく説明したす。 だから、私たちは垞に、あなたが釘付けしたい構造を芋お、それがどこに䜏んでいるかを倧䜓理解しなければなりたせん。 しばらくするず、これらすべおがマシン䞊にありたすが、最初にこれを非垞に明確に守る必芁がありたす。







そしお、nginxの内容ず、リポゞトリ内でのその構造の配眮に぀いお簡単に説明したす。 APIの最䞊郚、およびそれ以䞋-䜕がありたすか。 たず、nginxには倚くのデヌタ構造があり、それらを䜿甚しようずしたす。a圌らはすでにnginxプヌルに぀いお知っおいたす。 bこれは、nginxではほずんどすべおのデヌタ型がtypedefシステム型たたは独自の構造のいずれかであるため、nginxデヌタ型で䜿甚する最もネむティブな方法です。



たた、nginxコアには、自然にファサヌドにラップされたAPIを備えたOSがありたす。 これは、nginxで独自のhttpモゞュヌルを䜜成しない堎合に䟿利ですが、たずえば、独自のTCPモゞュヌルのようなものであれば、これも可胜です。 httpはコアに基づいお䜜成されおおり、必芁に応じお、必芁に応じお拡匵できるためです。 たた、ファむル蚘述子の掗緎を担圓するステヌトマシンや、ログ、スクリプトや構成の操䜜など、その他の倚くの䟿利な機胜を芋぀けるこずができたす。







そしお今、最も興味深く、最も痛みを䌎う、たたはむしろ、最も未知のものです。 これがnginxモゞュヌルの配眮方法、タむプです。 私は時間に限りがあるので、私は䞻に3぀だけに぀いお話すこずにしたした。 そしお、おそらく最も興味深いのは、アップストリヌムに関するこずです。 芁するに、それは本圓に別のレポヌトのトピックだからです。







したがっお、今日は3぀の䞻芁なモゞュヌルのみを怜蚎したす-これらはハンドラヌ、フィルタヌ、プロキシヌです。 䞀蚀で蚀えばプロキシ。 実際、httpはコアベヌスのモゞュヌルでもあるため、他にも倚くのタむプのモゞュヌルがありたす。 しかし、非垞に長い時間であり、これもたた別のレポヌトのトピックであるため、このようなニュアンスには觊れたせん。







nginxのすべおは、1぀のパタヌンに埓いたす。 これが責任の連鎖パタヌンです。 蚀い換えるず、ナヌザヌからのリク゚ストはhttpモゞュヌルを通過し、httpモゞュヌルはいく぀かのシヌケンス-モゞュヌルのチェヌンを開始したす。 そしお、それらがすべおうたく機胜しおいれば、ナヌザヌは良い答えを埗るでしょう。そうでなければ、゚ラヌが発生したす。 最も近い䟋えは、次のコヌド行です。







私はそれが完璧なアナロゞヌだず思った、私は正しいこずを願っおいたす。 誰もがこの行を理解しおいたすか これは本質的にbashです。 䜕かを぀かんで、最初の行をデリミタヌで取埗したす。 成瞟を぀けお単語を数えたす。 nginxモゞュヌルの動䜜原理はこれに非垞に䌌おいたす。 ぀たり パむプが砎損するず、チェヌン党䜓が飛び出し、bashで゚ラヌが発生したす。 信号などもありたす。 Nginxにも同じこずがあるため、すべおのnginxモゞュヌルはそのように扱う必芁がありたす。







たた、もう少し深く掘り䞋げるず、チェヌンであるこずに加えお、このチェヌンもフェヌズに分割されおいるこずがわかりたす。 nginxには倚くのフェヌズがあり、各フェヌズは特定の条件䞋で特定の時点で呌び出され、フェヌズ内のすべおのハンドラヌが枡されたす。その埌、そのフェヌズの結果が別のフェヌズに切り替えられたす。 基本的に、この図はこれを瀺しおいたす。 フェヌズには特定のモゞュヌルセットがあり、通過しお結果を取埗し、次のフェヌズに進みたす。



そしお、nginx_httpで利甚できるようになったフェヌズは次のずおりです。







圌らは自発的です、私はここに質問がないず思いたす。 ぀たり server_rewrite、config search、rewrite normal、content_phase。







それでは、モゞュヌルの開発方法に取り掛かりたしょう。 モゞュヌルごずに行う必芁があるのは、これらのこずです。







たず、nginxのモゞュヌルはすべおconfigで始たりたす。 Nginxには、モゞュヌルや他のモゞュヌル、さらには内郚nginxに察しおも、このような構造に名前を付ける特定の方法がありたす。 そのような呜名芏則、぀たり ngx_httpは、珟圚httpに察しお䜕かを行っおいるこずを瀺しおいたす。 次はモゞュヌルの名前です-それは䜕でも構いたせん。 そしお、それに応じお、構成タむプの1぀-main、server、loc-および_conf。



ずころで、高負荷システムHighLoad ++の開発者の䌚議の過去5幎間の公開ビデオを公開したした。 YouTubeチャンネルを芖聎、孊習、共有、賌読したす 。


誰もがnginx_configを芚えおいたすか これはそこから来おいたす。 メむンがありたす-これは最もグロヌバルなスコヌプであり、サヌバヌ、ベヌタサヌバヌ、堎所がありたす。 ロケヌションの堎合-ロケヌションも考慮し、特定の堎合のみ。 実際、これらの構成ず構造は、さたざたな段階でマヌゞできたす。 この構造を䜜成するのを劚げるものは䜕もないので、メむン、サヌバヌ、および堎所ず堎所に存圚するようになりたす。 必芁なのは、1぀の関数を蚘述し、特定のビットマスクを蚭定するこずだけです。 これに぀いおは埌で詳しく説明したす。







ディレクティブ。 nginx configにはディレクティブがありたす。 そしお、それに応じお、モゞュヌルを開発する際には、管理者ずナヌザヌに䜕らかのペンを提䟛する必芁があるこずを理解する必芁がありたす。 nginxには、このための特別な構造がありたす-ngx_command_sです。 APIぞのすべおのリンクをここに投皿するので、埌で芋るこずができたす。耇雑なこずは䜕もありたせん。 実際、ここにあるのは名前だけです。 名前は、nginx configでディレクティブがどのように衚瀺されるかです。 これはタむプであり、このディレクティブが䜕であるかをマスクしたす。 ぀たり それは堎所、メむンconf、サヌバヌconfに存圚したす。 この倉数の倀を解析するコヌルバックが存圚したす。 倚数の既補のコヌルバックがありたす。 たずえば、ngx_stringを䜿甚し、行を保存する必芁がある堎合、このコヌルバックを実装するのではなく、nginxから既補のコヌルバックを䜿甚する必芁がありたす。 そしお、いく぀かのシステムフィヌルドに぀いおは、次のスラむドで説明したす。







MODULE_NAMEずいうモゞュヌルを䜜成するずしたす。 したがっお、特定の倉数、通垞の敎数があり、この敎数をconfigに転送したす。 この配列でこのような構造䜓を宣蚀するだけです。 倚くの異なる倉数がある堎合、この配列の芁玠が倚くなりたす。 そしお今、私が蚀ったように、このマスク、この堎合、このビットマップは、1぀の匕数が受け入れられるこずを瀺しおいたす。 これは、このディレクティブが構成、サヌバヌ構成、およびメむン構成の堎所に存圚する可胜性があるずいう事実です。 ただ堎所がある堎合は、このマスクの別の郚分を远加する必芁がありたす。



したがっお、これはnginx関数であり、通垞のintを解析するために存圚したす。 これは特に時間を節玄するためです。そのため、毎回この機胜はありたせん。 offsetofは、このフィヌルドが私たちの構造のどこにあるのかを説明するだけで、これは叀き良きC-shnyハックです。 実際のずころ、この文脈では䞎えられたずおりに取らなければならないので、私はそれに焊点を合わせたせん。 ぀たり 远加のセマンティックロヌドは実行したせん。



そしお、そのような配列は通垞のngx_null_command-配列がなくなったこずを瀺すマヌカヌで終わりたす。 nginxでは、モゞュヌル内で宣蚀するほずんどすべおが静的であり、どこかで倖郚化されたす。nginxでは、モゞュヌルを開発する2぀の方法がありたす-nginxでモゞュヌルをコンパむルするか、モゞュヌルをロヌドするか、埌で詳しく説明したす。 この堎合、圓面はすべおが静的であり、このマヌカヌはこの配列を最埌たで通過するため、最終マヌカヌが必芁であるこずを芚えおおく必芁がありたす。







ここでは、いく぀かのディレクティブを䜜成したしたが、すべお正垞に機胜したすが、nginx内にむンストヌルし、構成ずそのマヌゞを䜜成する必芁がありたす。 これを行うには、ngx_http_module_tのような構造がありたす。 たた、非垞に簡単です。むンストヌルのいく぀かの段階がありたす。これは事前構成です。これは、事埌構成が発生する前であり、他のいく぀かの機胜に぀いおも次のスラむドで詳しく説明したす。







たずえば、以前に発衚したこず、ディレクティブがその堎所に正しくマヌゞされるようにしたす。 行う必芁があるのは、モゞュヌル内で宣蚀した2぀のコヌルバックの構造をハンマヌで叩き、ngx_pallocを䜿甚しお構成を展開するこずです。 そしおマヌゞしたす。 nginxでは、nginxが理解できるプリミティブ型の堎合、倉数をマヌゞするための倚数の関数セットが既にありたす。 これが独自のタむプである堎合、たずえばxmlなどの解析する必芁がある非垞にトリッキヌな行があり、別の構造で蚘述する堎合は、関数ずマヌゞが必芁であり、倉数の蚭定を自分で蚘述する必芁がありたすそれをコヌルバックに枡したす。 そしお、この機胜のマヌゞ蚭定の段階で、いく぀かの远加チェックを行い、そのような゚ラヌが発生したず蚀うこずができたす。 ここでは、䜕かを誓玄し、他のこずをするこずもできたす。







すべお、蚭定がちら぀き、ディレクティブを取埗したした。 ここで最も興味深い郚分は、nginxにモゞュヌルが衚瀺されたこずをどのように䌝えるかです。 これにはngx_module_tがありたす-これは特別なタむプです。 そしお、再び、オブゞェクト内で静的ず宣蚀されおいたす。 通垞の倉数。 蚘述し、コンテキストを䌝え、これらのコマンドを䜜成し、より柔軟な管理のために远加のコヌルバックも可胜です。 ぀たり intマスタヌ、マスタヌからの出口などで特定のアクションが必芁な堎合を考えおみたしょう。 ここでは、原則ずしお、すべおが明確であるず思いたす。質問はありたせん。 ただ䜙分なコントロヌルノブ。 たずえば、なぜこれが必芁なのですか モゞュヌルが共有メモリを䜿甚しおいる堎合、ストリヌムを終了しお匷制終了するずきにロックを解陀したいず思うでしょう。 このため、これらのペンが存圚したす-远加のアクション甚。



この点に基づいお、誰もがnginxモゞュヌルを䜜成する方法を理解しおいるか、すでに掚枬しおいるず思いたす。 実際に行う必芁があるのは、いく぀かの静的倉数を蚘述し、いく぀かのコヌルバックを宣蚀するこずだけです。 そしお、モゞュヌルが取り䞊げられたす。 しかし、これだけではありたせん。珟圚最も重芁なニュアンスは、ハンドラヌをフェヌズに远加する方法ずフィルタヌを䜜成する方法です。 nginx内のいく぀かのむベントに察しお関数を呌び出すだけです。







そしお、これに぀いお今すぐ話したす。 ハンドラヌずフィルタヌに぀いお。 これらは2぀の異なる゚ンティティです。







念のためフェヌズに戻りたす。 フェヌズは、すべおのフェヌズが完了するか、フェヌズが䞭断されなくなるたで、特定の時点を発生させ、特定のチェヌンを発生させ、チェヌンを終了しお次のフェヌズに進みたす。 そしお、ハンドラヌだけがフェヌズで動䜜したす。 ぀たり ハンドラヌずは䜕ですか これらのフェヌズのいずれかに任意の関数をバむンドできたす。 そしお今、私はそれを行う方法を玹介したす。







芚えおいるように、モゞュヌルを宣蚀するずき、远加のペンを枡すこずができたす。 ここで、蚭定埌、぀たり ディレクティブがすでに解決されおいる堎合、倉数を取埗し、それらを入力し、いく぀かのフェヌズをバむンドし、初期化䞭に関数を远加し、それに応じおこの関数で次のこずを説明する必芁がありたす-フェヌズの内容を取埗したすすべおnginxコア蚭定から。これはすべおhttpコアラむフに含たれおいるためです。 そしお、通垞のarray_pushを䜿甚しおそこに関数を远加するだけです。 それだけです。コンテンツに察しおこの関数が呌び出されたす。



蚀い換えるず、フェヌズコンテンツずは䜕ですか 誰かが私たちから応答を返すず、フェヌズの内容がひっくり返り、そこで䜕でもできたす。たずえば、サヌバヌからの応答に含たれる単語の数をカりントしたり、独自のアルゎリズムでさらに圧瞮したりできたす。 そしお、それがファむルであろうずなかろうず、誰かが私たちから答えを返すたびに、この関数が呌び出されたす。 その䞭で、すでにhttp-requestを操䜜したり、必芁なデヌタを匕き出したり、そこに䜕かを远加したり、逆に削陀したりできたす。 そしお、各フェヌズで行うこずができたす。 芚えおおくべき䞻なこずは、すべおのフェヌズが異なる時間に呌び出されるこずです。 ぀たり、コンテンツを操䜜する必芁がある堎合、ハンドラをログフェヌズに远加する必芁はありたせん。 ログフェヌズは、倧たかに曞き留める必芁があるずきに発生するためです。 このフェヌズに興味がある堎合は、逆に、远加の統蚈を収集できたす。 このフェヌズでは、コンテンツを凊理する必芁がありたす。



ずころで、私は良い䟋を思い出したした。 前回コンテンツフェヌズを行ったずき、top.mail.ruのカりンタヌ甚にその堎で画像を生成する必芁がありたした。 これが良い䟋です。 ぀たり 私は䜕もしたせんでした。ク゚リパラメヌタやカりンタIDなどに応じお、この新しい画像を生成したした。







フィルタヌ これはわずかに異なる゚ンティティです。 フィルタヌずは䜕ですか チェヌンを芚えおいたすか 実際、フィルタヌは、フィルタヌの単玔な単䞀リンクリストです。







そしお、ハンドラヌを特定のフィルタヌに远加するために必芁なこずは、top_header_filterずいうnginx静的倉数を取埗し、そこにハンドラヌを远加するだけです。 この堎合、これはheader_filterであり、ハンドラヌはヘッダヌを凊理する段階のある時点で毎回呌び出されたす。



良い実甚的な䟋。 カりンタヌにクッキヌを蚭定しお確認する必芁がありたす。 必芁なのは、新しいヘッダヌフィルタヌを远加しお、到着したヘッダヌをチェックし、䜕らかの方法で通垞のCookieに倉換するこずだけです。 これは、これが䜿甚される理由の良い䟋です。



これが䜿甚される別の良い䟋です。 暙準のnginxディレクティブであるadd_headerのようなディレクティブは誰もが知っおいたす。 圌女はこれらのヘッダヌを䜿甚したす。



぀たり 圌女はhttpヘッダヌで䜕でもできたす。 そしお、むンストヌル党䜓は垞にこのようになりたす。 実際、ただ身䜓がありたす、私は圌のこずを忘れたした。 圌は同じむデオロギヌ、同じリストを持っおいたすが、コンテンツ凊理の段階で機胜したす。







そしお、最も興味深い。 私たちの構造は必芁です。 nginx向けに開発したこずがあるなら、このフレヌムワヌクがあなたの芪友になりたす。 倚くの堎合、このコヌドにアクセスしたす。おそらく、それらに䜕かをバむンドしお、すぐにゞャンプしたす。 圌女は巚倧です、圌女は知る必芁がありたす。 埮劙な違いがたくさんありたす。 したがっお、䜕かを開発したい堎合、この構造に慣れるには、そこに耇雑なものは䜕もありたせん。ただそれを読んで理解する必芁がありたす。 接続自䜓、ナヌザヌから送信されたヘッダヌを保存したす。ヘッダヌはナヌザヌから離れ、すべおのハンドラヌハンドラヌ、独自のプヌルを保存し、このリク゚ストで動䜜したす。 圌女は䜓も保存したす。 さらに、nginxはすべおを支払うため、保蚌されたボディ党䜓を枛算するか、保蚌された...を送信する必芁がある堎合、実際には垞にパむプずしお機胜するため、最埌たで蓄積されない堎合がありたす。 正確に保蚌されたものを送信する必芁がある堎合は、特別な関数を呌び出しお特定のリク゚ストを䜿甚する必芁がありたす。 より正確には、ハンドラヌに送られた特定のリク゚スト構造。







そしお、ここでnginxの最も興味深く、最も難しい瞬間に来たす-これはチェヌンバッファです。 nginxでは、任意のバッファヌでの䜜業はチェヌンバッファヌです。 これは基本的に、単䞀リンクのバッファのリストです。 これは非垞に泚意が必芁です。ファむル内にある可胜性があり、共有メモリである可胜性があり、読み取り専甚メモリである可胜性があり、䞀時メモリである可胜性がありたす。 ニュアンスが非垞に倚いので、チェヌンバッファヌには入らないず思いたした。 あなたが圌に぀いお知る必芁がある䞻なこずは、あなたのメッセヌゞが来るこずができるずいうこずです、しかし、䞀般に、1぀の断片ではなく、身䜓は、小さな小さな断片で、バッファに入っおくるこずができたす。 これは、アップストリヌムを開発しおいる堎合に特に重芁です。 アップストリヌムは䞀般に4Kたたはバむトで取埗できるため、すべおを解析する必芁がある堎合は、チェヌンで機胜するトリッキヌなストリヌムパヌサヌを実行する必芁がありたす。 埌のread meの䟋でリンクを提䟛したす。これらのアップストリヌムのうち玄2぀を削陀したした。これらのナヌザヌは、nginx内でストリヌムパヌサヌを実装する方法に興味がありたす。 そのような重芁なルヌルがただあるので、nginxはブロックできたせん。 ワヌカヌは1人です。 そこにThreadPoolがあったずしおも、誰も䜿甚するこずはめったにありたせん。このワヌカヌを長時間ブロックするず、倚くのrpが倱われたす。 これも垞に芚えおおく必芁がありたす。



そしお、この䜙談の埌、再びチェヌンバッファに戻りたす。 基本的に、構造党䜓は次のようになりたす。







぀たり 最埌に、これがファむルである堎合、file_pos、タグ、および䞀連のフラグがありたす。 そしお、原則ずしお、これらのコメントはすべおnginxから取られおいたす。 芚えおおく必芁がありたす。 フィルタヌたたはハンドラヌで、倉曎できないずマヌクされおいるものにメモリの䞀郚が到着し、そのようなコンテンツを倉曎する暩利がないず想像しおください。 それを自分自身にコピヌし、必芁に応じお倉曎し、さらに提䟛する必芁がありたす。 したがっお、これらのフラグは垞にチェックする必芁がありたす。



たたは別の良い䟋。 私が曞いたモゞュヌルの倚くは、チェックin_fileが存圚する堎合、チェヌンバッファヌで動䜜したせん。 私が望んでいたので、これがすぐに機胜するような芁件がありたした。 神が犁じおいる堎合、nginxがファむル、キャッシュ、たたは他の堎所からプルを開始するず、すべおが死にたす。 , chain buffer , in_file, , : «, , ». , .



, upstream-.







6 nginx. opensource, . , . ぀たり , , upstream chain buffer, , . - . , . , tp_transcode – , .







Proxies. , , upstream, load-, , .. . , . , .







, upstream? proxy pass. proxy pass? , , , chain- , . . , - , , nginx . ぀たり – http, https - json . application server' . upstream.



, , upstream – API nginx, : ) , , - ; ) , .. , upstream', url. upstream'. , .. .



, upstream', , . , , upstream .



, , , . , , , OpenResty, balancer_by_lua, .. lua , , , , , . -. . , CPU , , - lua-, , url , .







, , , . .







. . nginx . , . , conf, nginx, . , , . . ++ runtime , . . , -, nginx ++ runtime. . , nginx , nginx . . , .







, , nginx-, . nginx-, . , , nginx.







. , .



, , nginx . – nginx' . , - nginx , apt-get install nginx . .



, nginx-. , mail.ru. , , , . , , . , .



, , , , – nginx SO'. ? nginx SO' . , nginx .



, . , , Debian, , nginx . , . , , . , . , , wiki.



, , , mail.ru, , . Docker. nginx, docker image, . , , .







, , – ?







– , , . nginx, , - nginx nginx. , http 3.0, .







, , « nginx-?». , – nginx ReverseProxy – - , , , nginx , . ぀たり , , , ReverseProxy, nginx-, . , application -, , , , . -.







, 3 mail.ru. http-, , , , , , .. – nginx. . , , , JS-, , image- . 4 .



圌は䜕をしおいたすか , , . . nginx, CPU, . - SSL , . - SSL . . .



, , -. . , , , , . - , , .







. . OpenResty, nginx- , . , . , - nginx , . , . OpenResty, .







. , , http, .. , , - http, ? upstream , http X. . 2 . , . , .



, , 3 , upstream'. , 100 , , , . , , .. ぀たり . make , . .





→ github

→ twitter



— Highload++ , — «».



— " HTTP- web- ", HighLoad++ Junior .



  • キャッシュなしのHTTPプロキシの仕組み。

    氞続的な接続ずは䜕ですかHTTPキヌプアラむブずの違いは䜕ですか

    アップストリヌムずのHTTPアクセラレヌタが確立できる方法、タむミング、および接続数。

    キュヌが送信されおアップストリヌムに接続されるのを埅っおいるリク゚ストはどうなりたすが、アップストリヌムはそのたたで、100リク゚ストごずに接続をドロップしたす。

    HTTPパむプラむン化ずは䜕ですかたた、最新のHTTPアクセラレヌタヌでどのように䜿甚されおいたすか。

    べき等でない芁求ずは䜕か、そしおそれらを心配する必芁がある理由。




All Articles