劄想パヌト1のWordPress

だから、もしあなたがnginxの幞せな所有者であり、高貎な偏執狂者であり、ある意味地獄でワヌドプレスを眮くこずに決めたなら...最初に思い浮かんだのは、「この創造物を自由に制限する必芁がある」

誰もが独自のゎキブリを持ち、誰かが䞀般的にApacheを実行するため、アカりント蚭定ずphp5-fpm蚭定を省略したす。 ただし、ここでは、WordPressの䞀般的な郚分に぀いお説明したす。 私が䜕をしたか、䜕が起こったのか、そしおその理由に぀いお曞きたす。

フォルダヌ


PHPファむル


これはWordpress 4.0の兞型的なスむヌトです。

䜕が必芁ですか phpファむルず管理パネルぞのアクセスを制限し、静的をレンダリングし、xmlrpcを閉じる必芁がありたす。

管理パネルずphpファむルぞのアクセスを制限したす


私のバヌゞョンのwordpressでは、ナヌザヌのコメントを保存せず、xmlrpcを䜿甚したせん。 コメントぞのアクセスを安党に提䟛する方法、およびnginxずwordpressのその他の緊急の問題に぀いおは、この蚘事の第2郚で説明したす。もちろん、もしあれば䜜成したす。 Apacheがないため、.htaccessファむルは圹に立ちたせん。
したがっお、䞊蚘の内郚告発者を閉じたす。

堎所〜* ^ /\。htaccess | xmlrpc \ .php$ {
  404を返したす。
 }


その埌、xmlrpc.phpおよび.htaccessリク゚ストを䜿甚するず、404゚ラヌが発生したす。 403ず200の䞡方のトロロロを発行するこずは可胜ですが、これはすでに奜みの問題です。

次に、残りのものぞのアクセスを制限したす。 制限により、私は承認リク゚スト、぀たりauth_basicを意味したす。

堎所〜* ^ / wp-admin /。*<\。php$ {
    auth_basic「パスワヌドで保護」;
    auth_basic_user_file users / somefile;
    root / path / to / site / root;
    その他のオプション
 }


*このコヌドは、/ wp-admin /から静的を芁求するずきにnginxに承認を芁求させ、nginxは静的を発行したす。

次に、ファむルぞのアクセスを制限したす。

堎所〜*/ wp-admin / | / wp-cron \ .php | / wp-config \ .php | / wp-config-sample \ .php | / wp-mail \ .php | / wp-settings \。 php | / wp-signup \ .php | / wp-trackback \ .php | / wp-activate \ .php | / wp-links-opml \ .php | / wp-load \ .php | / wp-comments-post \ .php | / wp-blog-header \ .php | / wp-login \ .php | / wp-includes /.*\。php | / wp-content /.*\。php{
    auth_basic「パスワヌドで保護」;
    auth_basic_user_file users / somefile;
    root / path / to / site / root;
    その他のオプション
 }


/wp-includes/.*?\.phpのような゚ントリには、wp-includes以䞋のすべおのphpファむルが含たれたす。

完了したした。アクセスをクロヌズしたした。 ここで、公開バヌゞョンに必芁な芁玠を遞択的に含めたす。これは本文でさらに詳しく説明したす。

安党なWordpressで安党な投皿を有効にする


wp-login.phpを承認しお閉じた埌、安党な投皿を曞き蟌み、リンクずパスワヌドを投皿から適切なナヌザヌにドロップするこずにより、ナヌザヌ...は未知のりィンドりを怖がりたす。 パスワヌドは、GETパラメヌタヌを䜿甚したpostリク゚ストずしおwp-login.phpファむルに枡されるので、 Action = postpass 。

nginxは倚くの制限を課しおいたす

どうする

解決策がありたす 同じフォルダヌにwp-login.phpぞのシンボリックリンクを䜜成したす。 このwp-postpass.phpがありたす。 シンボリックリンクが必芁なので、wordpressを曎新するず、 wp-login.phpも曎新され、リンクによっおファむルが曎新されたす...それがLinuxが倧奜きな理由です。

次に、nginx configに次のように蚘述したす。

堎所〜*/wp-postpass\.php{
    if$ args〜 "^ action = postpass $"{
       set $ wppostpass 1;
    }
    if$ wppostpass〜0{
       403を返したす。
    }
    その他のオプション
 }


この堎合、 / wp-postpass.phpaction = postpassを芁求するず、wppostpass倉数の倀は1になり、堎所は最埌たで機胜したす。 ベアリク゚ストwp-postpass.phpたたは他のパラメヌタヌここでわかるように、$行の先頭から^たでチェックされたすの堎合、403゚ラヌが発生したす。これは、アクセスが閉じられたこずを意味したす。

そのようなスキヌムが機胜するためには、 ngx_http_substitutions_filter_moduleが必芁です 。 構成に登録する必芁がありたす

 subs_filter 'https://example.com/wp-login.php\?action=postpass' 'https://example.com/wp-postpass.php?action=postpass' gi;


次に、nginxはwp-login.phpAction-postpassリンクをwp-postpass.phpAction-postpassに自動的に倉曎し、ナヌザヌはパスワヌドでログむンしお保護されたレコヌドを衚瀺できたす。

別のサヌバヌで静的デヌタを取り出し、CDNを接続したす


ロヌド䞭、js、css、および小さなgifは圹割を果たしたせん。メモリがある堎合、nginxはキャッシュにそれらを保存し、十分なメモリがある堎合、すべおのサむト統蚈をtmpfsセクションに転送できるためです3.8 GB読み取りおよび曞き蟌み745k iops ' s。

ただし、1぀のサヌバヌの堎合、誰かがファむルを早く取埗し、埌で誰かが取埗したす。倚くのクラむアントがいる堎合、1MBのファむル1000個を配信するずき、rateを入力しないずチャネルはたるみたす。

これらの堎合、キャッシングCDNプロバむダヌが発明されたした。 たずえば、 cloudflareです。

仕事の原理は、圌らの写真に顕著に瀺されおいたす



CDNを䜿甚しない堎合、すべおの芁求は最終サむトに送られ、CDN芁求からはプロバむダヌのCDNに送られたす。これは䞭間リンクずしお機胜したす。 この堎合、1000人のナヌザヌが1 MBのファむルを芁求するず、このファむルはCDNプロバむダヌによっおキャッシュに察しお1回芁求され、その埌1000人のナヌザヌが配垃されたす。 Àla google docsスタむルのDDoSオプションで、 big_photo.jpg  Ver = 1 、次にbig_photo.jpg  Ver = 2などを芁求した堎合 䞭皋床のキャッシュモヌドが遞択されcloudflareにある、キャッシュのみが静的である堎合は機胜したせん。その埌、 big_photo.jpg 、 big_photo.jpgver = 1たたはbig_photo.jpgver = 123を芁求するず、サヌバヌからbig_photo.jpgが芁求されたす。クラむアントが匕数付きのファむルを芁求した堎合でも、圌ず圌だけですそれらは単に無芖されたす。 これにより、基本的にddosからも保護する必芁があるcdnプロバむダヌによるddos問題が解決されたす。

私はあたり登りたせんでしたが、デフォルトの統蚈は次の堎所に保存されおいるこずがわかりたした。

したがっお、それらのために堎所に新しいルヌルを䜜成し、 ngxずngx_http_substitutions_filter_moduleを䜿甚したす 。
このモゞュヌルをむンストヌルする必芁はありたせん。曞き換えモゞュヌルのみで実行できたすが、それだけで䟿利であり、それを通じおバック゚ンドからの出力を改善できたす。

構成に以䞋を远加したす。

	 subs_filter_types text / html;
	 subs_filter_types text / xml;


htmlおよびxmlドキュメントの出力をフィルタリングしたす。

次に

 subs_filter 'https://example.com/wp-content/uploads/' 'https://static.example.com/uploads/' gi;
 subs_filter 'https://example.com/wp-content/themes/' 'https://static.example.com/themes/' gi;
 subs_filter 'https://example.com/wp-content/plugins/' 'https://static.example.com/plugins/' gi;
 subs_filter 'https://example.com/wp-includes/js/' 'https://static.example.com/js/' gi;
 subs_filter 'https://example.com/wp-includes/css/' 'https://static.example.com/css/' gi;
 subs_filter 'https://example.com/wp-includes/certificates/' 'https://static.example.com/certificates/' gi;
 subs_filter 'https://example.com/wp-includes/fonts/' 'https://static.example.com/fonts/' gi;
 subs_filter 'https://example.com/wp-includes/images/' 'https://static.example.com/images/' gi;


したがっお、htmlおよびxmlのリンクは曞き換えられたす。 これで、元のリンクを知っおいる゚ンドナヌザヌがサヌバヌを悪甚せずに、CDNに誘導されるこずを確認するこずができたす。

堎所〜* ^ / wp-content / themes /。*<\。php$ {
	曞き換え^ / wp-content /(.*)$ https://static.example.com/$1 permanent;
 }

堎所〜* ^ / wp-content / plugins /。*<\。php$ {
	曞き換え^ / wp-content /(.*)$ https://static.example.com/$1 permanent;
 }

堎所〜* ^ / wp-content / uploads /。*<\。php$ {
	曞き換え^ / wp-content /(.*)$ https://static.example.com/$1 permanent;
 }

堎所〜* ^ / wp-includes / js /。*<\。php$ {
	曞き換え^ / wp-includes /(.*)$ https://static.example.com/$1 permanent;
 }

堎所〜* ^ / wp-includes / css /。*<\。php$ {
	曞き換え^ / wp-includes /(.*)$ https://static.example.com/$1 permanent;
 }
堎所〜* ^ / wp-includes / certificates /。*<\。php$ {
	曞き換え^ / wp-includes /(.*)$ https://static.example.com/$1 permanent;
 }
堎所〜* ^ / wp-includes / fonts /。*<\。php$ {
	曞き換え^ / wp-includes /(.*)$ https://static.example.com/$1 permanent;
 }
堎所〜* ^ / wp-includes / images /。*<\。php$ {
	曞き換え^ / wp-includes /(.*)$ https://static.example.com/$1 permanent;
 }


その結果、phpファむルをリク゚ストしおも䜕も起こりたせん。 そしお、静的静的なWPの堎合はphpではないすべおを芁求するず、ナヌザヌは静的サヌバヌにリダむレクトされたす。

静的サヌバヌのnginxプロファむルのセットアップに぀いおは、 以䞋で説明したす 。

次に、䜿甚するcloudflareたたはその他のcdnプロバむダヌでアカりントを䜜成し、DNSを登録しお、wordpressが動䜜するexample.com をキャッシュせずに static.example.comドメむンのキャッシュを有効にしたす。

静的サヌバヌの構成


リタヌンを静的サヌバヌに転送したため、正しく構成する必芁がありたす。

 127.0.0.1を蚱可したす。
 IPv4サヌバヌを蚱可したす。
 IPv6サヌバヌを蚱可したす。
 CDNサヌバヌのIP /サブネットを蚱可したす。
 ...
 CDNサヌバヌのIP /サブネットを蚱可したす。
すべおを拒吊したす。


ロヌカルホストぞのアクセス、倖郚IPたずえば、どのスクリプトからサヌバヌ自䜓ぞのアクセス、およびプロバむダヌのCDNサヌバヌぞのアクセスを蚱可する必芁がありたす。 たずえば、CloudFlareサブネットはこのリンクにありたす。 そしお、もちろん、他のすべおのナヌザヌぞのアクセスをブロックしたす。 CDNが突然トラフィックを回線に配眮するこずにした堎合は、...空きチャネルを残したす。

たた、ダミヌサヌバヌを静的サヌバヌ党䜓のルヌトずしお䜜成する必芁がありたす。

ルヌト/パス/ぞ/サむト/ダミヌ;


ロケヌション/たたは= /にある静的サヌバヌに到達し、そこで指定されたロケヌションず䞀臎しないリク゚ストは、同じダミヌディレクトリに送られたす。 このディレクトリはサヌバヌ{}内に曞き蟌たれたす 。

さらにロケヌショングリヌティング

堎所= / {
	 default_type text / html;
	 200「c'est static、c'est simpleP」を返したす。
 }


これは、ルヌトをリク゚ストしたナヌザヌに衚瀺されるテキストです。 䜕でも曞くこずができたす。insideを䜿甚するずきの䞻なものは" escape quotes as \"です。

次に、staticsでlocationを登録する必芁がありたす。

 location〜* ^ / uploads /.*<\。php$ {
	 root / path / to / site / root / wp-content;
	自動むンデックスオフ;
	 index index.html;
 }

堎所〜* ^ /テヌマ/.*<\。php$ {
	 root / path / to / site / root / wp-content;
	自動むンデックスオフ;
	 index index.html;
 }

堎所〜* ^ / plugins /.*<\。php$ {
	 root / path / to / site / root / wp-content;
	自動むンデックスオフ;
	 index index.html;
 }

堎所〜* ^ / js /.*<\。php$ {
	 root / path / to / site / root / wp-includes;
	自動むンデックスオフ;
	 index index.html;
 }

堎所〜* ^ / css /.*<\。php$ {
	 root / path / to / site / root / wp-includes;
	自動むンデックスオフ;
	 index index.html;
 }

堎所〜* ^ /蚌明曞/.*<\。php$ {
	 root / path / to / site / root / wp-includes;
	自動むンデックスオフ;
	 index index.html;
 }

 location〜* ^ / fonts /.*<\。php$ {
	 root / path / to / site / root / wp-includes;
	自動むンデックスオフ;
	 index index.html;
 }

堎所〜* ^ / images /.*<\。php$ {
	 root / path / to / site / root / wp-includes;
	自動むンデックスオフ;
	 index index.html;
 }


static.example.com/images/pic.pngをリク゚ストするず、サヌバヌは/ wp-includes / images / pic.pngディレクトリからファむルを返したすが、 static.example.com / images / pic.phpの堎所をリク゚ストするず、クリックしお結果ずしおナヌザヌが圌らはダミヌ/画像/ pic.phpからファむルを提䟛したすが、これはそこにないため、゚ラヌ404です。

それでも速床を䞊げるにはレヌトを远加する必芁がありたす。

 limit_rate_after 16m;
 limit_rate 2m;


16メガバむトの埌、速床はストリヌムごずに2 MB /秒に䜎䞋したす 。 これは、巚倧なファむルをキャッシュするずきにCDNがチャネル党䜓を詰たらせないようにするためです。

cloudflareの堎合、この資料の執筆時点での最倧ファむルサむズは512メガバむトであり、 無料料金プランでサポヌトされおいる圢匏は次のずおりです。css、js、jpg、jpeg、gif、ico、png、bmp、pict、csv、doc、pdf 、pls、ppt、tif、tiff、eps、ejs、swf、midi、mid、ttf、eot、woff、otf、svg、svgz、webp、docx、xlsx、xls、pptx、ps、class、jar。

リク゚ストのフィルタリング


䞀床に2぀のケヌスがありたす。
  1. メディアファむルをダりンロヌドするず、 example.com /attachment_id = XXのようなリンクを取埗したす。XXはこのメディアファむルのペヌゞIDです。 それに応じお、1、2、3の順に䞊べ替えたす...ナヌザヌは、すべおのコンテンツず、そのコンテンツが自分に向けられおいない郚分を送り出すこずができたす。
  2. phpにはびらんがいっぱいです。 おそらく、これは蚀語のアヌキテクチャではなく、プログラマヌのスキルや、この䜜成が展開する環境の蚭定ではありたせん。 しかし、ワヌドプレスを配眮したら、将来のバグに備えたす。

これを行うには、nginxの構成のサヌバヌ{}にコヌドを蚘述したす 。

 if$ args〜* "attachment_id | eval | duplicate | base64 | substring | preg_replace | create_function"{
	 403を返したす。
 }


次に、リク゚ストの匕数にattachment_id、eval、duplicate、base64、substring、preg_replace、create_functionが含たれる堎合、nginxは403゚ラヌを返し、リク゚ストは朜圚的な脆匱性を実行するためにダむナミクスに枡されたせん。

nginxのsubs_filterを介したパン


このモゞュヌルの目的はここで芋盎されたした 。

タスクデフォルトでは、wordpressは珟圚のりィンドりでメディアファむルぞのリンクを開きたす。 そしお、あなたは新しい必芁がありたす。

解決策 nginx kogfigに小さなコヌドを远加したす。

 subs_filter '<a href=\'https://static.example.com/uploads/(.*?)\'>' '<a href = \' https//static.example.com/uploads/$1 \ 'target = \' _ blank \ '>' gi;
 subs_filter '<a href=\"https://static.example.com/uploads/(.*?)\">' '<a href = \ "https//static.example.com/uploads/$1 \ "target = \" _ blank \ "> 'gi;


その埌、タヌゲット= "_ blank"がフロント゚ンドを䜿甚しおメディアぞのリンクに远加されたす。

タスクどこでもxmlrpc.phpリンク...を削陀する必芁がありたす。

解決策 nginx kogfigに小さなコヌドを远加したす。

 subs_filter 'https://example.com/xmlrpc.php' 'https://example.com/xmlrpc.txt' gi;


xmlrpc.txtでは、むヌスタヌ゚ッグを貌り付けるこずができたす。

あずがき



頑匵っお

Source: https://habr.com/ru/post/J244911/


All Articles