#084 ApacheとNginxを知ったら中級エンジニア!?Webサーバーの役割と設定の勘所
2022/10/19 ·
-
ちょっと今日じゅんぺい君に伝えたいことがあるんですけどなんなりとエンジンXとかアパッチ何やってるか知ってますか?あーなんか裏でゴニョゴニョやってるやつですねあれって何のいる?あれいやあれいらないんじゃないのかなと思いますいらないよねあれいらないと思いますって思ってました僕もそんな時代がありました1年目1年目だって研修の時使わないもんなんか使わないあれ使った?なんか
-
それがもともと入ってる動くやつそれも含まれてるやつを使ってみたいな感じで使った気はしますそうなんだじゃあ使わなかったのは俺だけかもしれないわなんでいらないのかなっていう逆パターンであるからいるんだろうなって思ってました頭がいいあの
-
ちょっと人によるかもしれないですけどあれ非常に存在意義が分かりづらいのででも重要なのでそれが何のためにあるのかっていうのとあとどんなことしてるんだろうがざっくり分かってそうですね今ちょっとおふざけしましたけどマジでよく聞くじゃないですかマジでそのアパッチなのなんともやってるのNJXなの聞くけどなんかまあ
-
人なんだろうなと思いつつもよくわかんないのでぜひ聞きたいなと思いますそこだいたいわかるようにします今日お願いします着実に中級への階段を登っていきましょうということで知識編ですね今日は知識編ですねではお話ししていきますNGXとかApacheとかだいたいミドルウェアのウェブサーバーと言われるものなんですけど
-
最初は飲食店に例えてお話させてくださいよく飲食店出てきがちのイマジンプログラマーまず一旦飲食店で研修とかで作るフレームワーク単体ララベル単体でウェブサーバー立ててアクセスして手元で動くみたいなのをやるじゃないですかこれ飲食店で例えると頑固親父が一人でやってるラーメン屋です
-
自営業のどういうことかっていうと頑固親父の人が料理も作るし注文も受けるしお皿も出すし片付けもするワンオペワンオペだとさ限界があってさばけても8人ぐらいお店でWebサーバーエンジンXとかって何のためにいるかっていうとパフォーマンス向上のためにいるんですよ基本的に安定性とか
-
なるほど実際のウェブサイトってもっとそういうちっちゃい店舗じゃなくて100人入るようなお店ですよねみたいなそういうことですかローカル開発は全然中華屋でいいけど最悪ローカルはなくてもいけちゃうやつってことなんですかねウェブサーバーはなくてもいいローカルはねローカルで動かす分にはなくてもいけると
-
一方ちゃんとしたサービスにしようとするとそれじゃあお店は回りませんと僕らがよく行くガストを思い浮かべてくださいガストガストは頑固やじのアーメン屋と違ってキッチンの人もいるしホールの人もいるし分業してますとこれで言うとエンジンXが私みたいなミドルであってホールの人の役割をします直接お客さんとコミュニケーションを取って
-
でよくわかんないリクエストないものを注文された時にないですよって言ってちゃんとキッチンの人が大変にならないように事前に拒否してくれたりとかあとはお水程度ならすぐ出せるものは出しちゃうとかそうするとキッチンの人はまともなリクエストにだけ対応してちゃんと料理を作るに集中ができるとはいはいなるほどねしかも
-
お店が広くなればなるほどいっぱいウェイターを雇えばいいというわけだと簡単に増加できるよねそうですそうです経由することでパフォーマンスが上がるっていうのはなんとなくイメージつきます分業してで
-
そうすると安定してサービスが出せるんだよそれが主なEngineXとかApacheとかのざっくりとした役割なるほどイメージはバッチリ分けましたなので商用とか商用っていう言い方か商用で何か出すときはちゃんとウェブサーバー立ててやりましょうねとちゃんとフレームワークによってはてかほとんど出ると思うんですけどフレームワークで起動するとちゃんとEngineXとか経由してウェブサービス立てる
-
提供しろよっていうワーニング文が出ますデベロップモードとかでやると
-
ここまでざっくり分かったと思うのでざっくりイメージやや深いところにいきましょうかここからは選手交代して私の方から具体的な役割というかマジで何してるのというところをお話ししていこうかなと思いますお願いします今回言ってるこのウェイターってやつはコンピューターの世界で言うと俗に言うウェブサーバーって呼ばれてる部分ですねはい
-
まずそもそものウェブサイトの表示の仕組み言えますかそもそもの仕組みですかざっくりしたウェブが表示されるまでの動きです検索します検索ちょっと待ってねユーザーがリクエストを飛ばします飛ばしてそれを元にデータを持ってきて
-
画面に返すその通りですその中の一体どの部分を担当しているのかウェブサーバーでしょさっきの話からいくと今のだといないんじゃないですかオルでじゃあリクエストを飛ばしてデータを取ってくるところの間にいて考えてますデータを
-
今度は画面に返すときの間にもいるアパッチちょっとわかんないどっちどっちどっちほぼ正解アパッチまずですね役割としては大体そんな感じなんですけどウェブサーバーっていうのはハード面とソフト面の2つの意味でまず使われることが多いですちょっとまず3層アーキテクチャの話からしようかなこれは難しそうな話ですねはい
-
かっこいいサーバーってざっくりサーバーって言われてるんで今の話だとクライアントが1個あってサーバー1個あってみたいなイメージに感じちゃうんですけど一般的なサーバーって実はいわばさっきのウェイターとキッチンとみたいな感じで分かれてるんですよよく使われる構成がウェブ3層アーキテクチャっていう
-
構成になってますとはいでこれは3つあって1つがウェブサーバーと言われてる層はいでもう1つがアプリケーションと言われてる層はいでもう1つがデータベースと言われてる層ですねこの3つを組み合わせて使われてることがまあ一般的にはよくありますよとはいでこれを全部さっきの例えにはめてくとはいウェブサーバーがウェイターやってますうん
-
アプリケーションが料理やってますデータベースは食材ですね食材庫冷蔵庫冷蔵庫です要はウェイターが注文取りますよねそれをリクエスト受け取ってるんですよバシーンとそれをバシーンとバシコン受け取って次料理人にピーってあの
-
レシートみたいなのを送るじゃないですか料理人それを受け取ってガシガシ料理するんですけど必要なデータ食材を冷蔵庫から引っ張ってきてそれをユーザーがちゃんと解釈しやすいように料理してウェイターに渡しますよねウェイターがそれを送り返しますとこのウェイター部分のマシーンのことをウェブサーバーと言いますとさっきハードとソフト2つあるって言ったんですけどさっき
-
アパッチとかエンジンXはこれのソフトの部分なんですよ
-
何がソフトかっていうとこれをPCにインストールすることによってそのPCがさっきのウェブサーバーとしての役割を持つようになりますよっていうソフトなんですね要は本当にインストールするやつあなたのPCにもApacheとかEngineXをインストールすればウェブサーバーになっちゃうというわけですよなるほどウェブサーバーウェイターになるってことですねウェイターになります
-
もうちょい具体的なところを言うとまずウェブの表示って全部httpハイパートランスファーhttハイパーテキストトランスファープロトコルその通りハイパーテキストトランスファーするプロトコルですとはい
-
なので送られてきたhttpを解釈する機能を持ってますよとこういうリクエストねOKってあとはそれをサーバーに流したアプリケーション側に流して戻ってきたやつを次レスポンスにまた調理して調理はしてないかウェブサーバーがですかうん
-
なんかヘッダーとか足してるかもしれないですね確かにそれをまたhttpの形式に変換して送り返すっていうところを具体的にはやってるわけですねなるほど今の説明したのがウェブサーバーでアパッチとかエンジンXがやってることですよとあと謎にアプリケーションあったと思うんですけどあの辺は言語だと思っていいかもしれないですねPHPとかRubyとかそういう系代表的なサービスっていうところでですねさっきあの
-
ウェブサーバーのソフトウェアの代表的なサービスというところでさっきちょっとシェアを見たんですけど今だいぶちょっと勢力図が変わろうとしている気配しますね戦国時代の訪れを感じます今さら何かが進化したってことかちょっと新しいサービス出てきてるのかな昔からあったのかなちょっとわからんけど今まで出てきたエンジンXとかアパッチとか
-
がもちろん2トップなんですけど今ちょっと今回はですねトップ5までその特徴と一緒に紹介していこうかなと知らんわお願いします思いますまずシェア第1位が今ねエンジンXですねそうなんですねこれはですねどういう特徴があるかっていうと大量のデータを処理するために作られてるんで大規模な中規模から大規模なサイトに向いてますうーん
-
Amazonとかはそういうの?Amazonは分かんないけどね大量そうなのでもそういう大量のあれが飛んできそうなところがよく使ってるそうでApacheは逆にもこれすごい歴史あって一世を風靡したサービスなんですけどこれはですね小規模から中規模に向いてるようなサービスになってますね仕組みのところで言うと
-
ウェブサーバーってリクエストっていろんなとこから飛んでくるじゃないですかそのリクエストをさばくためにプロセスっていうのを立ち上げるんですよでもアパッチはその1リクエストに対して1プロセス立ち上げるんで
-
一個一個のさばく性能は高いんですけどいっぱい来るとたくさんプロセス立ち上がるんでしんどくなっちゃうんですよなんですけどエンジンXは1プロセスで複数のリクエストさばけるんで大量のやつが来ても大丈夫っていう構成になってますねざっくりこの辺の2つはよく使われるんですけど規模に応じて使い分けるといいかなっていう感じですね多分1
-
ちょっと前とかだと次のシェア高かったのがマイクロソフトIISっていうIIS?知らない?知らないわIISだと思うWindowsサーバー立てたことないからWindowsサーバーとかで使うんですか?そうマイクロソフトが出してるだけあってWindowsサーバーで使うんですけど第3位ですか?いやこれはね実は5位ですちょっと前まではでも代表的なサーバーだったっぽいけど今もシェア5%ですね5位で5%とか5位で5%あそううん
-
それだけエンジンXとアパッチが強いってことですか?エンジンXとアパッチ強いだいぶ強いです2つでもう6、7割いってんじゃないかななるほどただこのIISっていうのが多分一昔前の代表だったんでウェブサーバーで調べるといろんなサイトでこのトップ3だぜみたいな感じで出てくるんですけど今シェア見たらねここもうトップ3じゃなくなってますねへーで今来てるのがですね1つが今3位
-
3位がですねクラウドフレアサーバーっていうのがクラウドフレアってアメリカのCDNとかセキュリティ系のクラウドサービス提供してる会社のやつなんですけどそのサーバーが来てるっぽいですねこの前これクラウドフレア多分障害起きてましたねそうなんだそれでノーション1回止まってた気がするCDNが原因だったかな確かそのサーバーが来てますよと何がいいんですかそれはGoogle先生に聞きましょうか
-
クラウドフレア聞いたことあるななんでだっけクラウドフレア自体はでもね有名な気がするよああそうなんですねCDNCDNとはコンテンツデリバリーネットワーククラウドフレアサーバーの特徴なんですけどはい検索しても分かりません分かりました分からないのは分かりましたこのクラウドフレアって結構そのCDNコンテンツデリバリーネットワークってえーと要は
-
普通1個のサーバーから配信するんですけどそれを世界中にあるいろんなサーバーに分散して配信するような仕組みですね物理的に距離近くなりやすいんで結構パフォーマンス上がるよとかサーバーに負荷集中しなくなるんでパフォーマンス上がるんですけど
-
そういうサービスが有名すぎてクラウドフレアサーバーで調べてもクラウドフレアのCDNの情報ばっかでちょっと見つかりませんまあでもそのCDNを導入しやすくなりそうじゃないですかあり得るね多分そういうことな気がしますね想像ですが完全に想像なのであれなんですけどねそうですただこれが今シェア3位になってます物理サーバーじゃなくてクラウドを使えるから
-
これは多分アプリケーションさっき言ったPCをウェブサーバーにするためのソフトウェアの話なんででもシェア伸びてるってことは単純にパフォーマンスとかもいいんでしょうねやることやってくれるとちゃんとした会社が開発してるやつだし信頼も厚いんじゃないですかはいシェア今4位これは結構名前最近聞きますねライトスピード知らんぴー
-
なんか軽そうですね軽くて速そうですね速さが売りみたいなやつですね速さが売りなんですけど多分まだ運用実績多くないからシェアがまだ伸びてる途中って感じだと思いますね採用しづらいですよね大きいソフトとかだとソフトというかアプリとかだとそうそうそうそう
-
パフォーマンス的には結構エンジンXと競わせてどっこいどっこいみたいな感じになってるっぽいんで記事によってはもしかしたら超えてるのかなアパッチュリアでも性能良さそうですねただ
-
あんまりこの辺のウェブサーバーのソフトウェアって頻繁に入れ替えるものでもないと思うんで入れ替えないね使ったことあるやつ使いたいしねだからその業界の中で伸びてきてるってことは今後もちょっとじわじわ伸びていってるんじゃないかなっていう気はします確かにちなみに僕このライトスピード知ったきっかけがですね
-
レンタルサーバーあるじゃないですかロリポップかなロリポップとかで見たときにウェブサーバーのシステム選べますよみたいになっててその中にちょっと有料のプランみたいなのでライトスピードに変わってて機能いいのかなみたいな感じで見かけましたね名前は覚えておこうはい
-
代表的なサービスはまとめると1位がエンジンX2位がパッチ3位クラウドフレアサーバー4位ライトスピード5位マイクロソフトIISというところでこのサーバーだけでほとんどのシェアを占めていると思いますね
-
深く覚えなきゃいけないものではないと思ってるので引き覚えあればいいぐらいそうね一旦使うときに学べばいいからねどういうときに設定するのっていう感じなんですけど多分
-
順平とかだと今現場出てそこで開発してって感じじゃないですかなので普通に考えたらサービスすでに運用されてることが多いだろうし商用の環境を順平が構築するみたいなことはあんまりないと思うので将来的に自分でサービス立てたりとかっていうことをするときにやっと触ることがあるかなっていう感じですねこの辺のソフトウェアは
-
なるほどあと僕があったケースだと僕の言ってた現場の開発環境ってEC2自分で立てるみたいな感じだったんですよAmazonのクラウドのサーバーですねコンピューティングのやつですね仮想サーバーそこに自分で立てなきゃいけなかったんでその時にちょっとアパッチの設定いじんなきゃみたいなのあったんですけど
-
もしかしたら開発環境そういうサーバーちゃんと立ててますよっていうとこだと自分で設定する機会が来るかもしれないって思うので今日はですね駆け出しのためにこの設定だけやっとけば一旦
-
一旦大丈夫でしょみたいな勘どころがあるんでそこだけ解説して終わりにしようかなと思いますお願いしますまずウェブサーバーってリクエスト受け取ってさっきhttp解釈して処理投げるって言ったじゃないですか実際そのサーバーってめっちゃいろんなディレクトリ入ってるんですよ
-
めっちゃいろんなディレクトリがあってこのディレクトリにはコマンドが入っててとかこのディレクトリには設定が入っててとかこのディレクトリにはログが入っててとかいろんなものがあるんですけどこのディレクトリにはアプリケーション入ってるみたいななんですけど全部見られていいわけじゃないんですよ覗かれたくないのがファイルとか見たらログインできちゃうじゃんって感じじゃん
-
はいはいはいなのでそういうファイルは見せたくないでもアプリケーションは表示したいじゃないですかはいなので一つやることがこのディレクトリ公開しますよっていうのを設定するんですね見せたいやつ見ていいやつだけそう例えばリクエスト来たらこのディレクトリからファイル探しますよみたいなディレクトリを設定するんですようん
-
あともう一個はどのファイルを返すかっていうのを決めるんですねなので例えばPHPで動いてるんだったらindex.phpとかindex.htmlとかっていうファイル名を決めますと
-
この2つを決めると例えばURLにアクセスきましたとリクエストきましたそしたらウェブサーバー何を返すかっていうとそのディレクトリの中にあるインデックスHTMLとかを返すんですねっていう設定が一旦分かればある程度なんとかなりますウェブサーバーは間違えて変なの公開しないようにしないようにっていうとこだけ守ればそうなので
-
その設定っていうのはどこでその設定はですねアパッチだったらアパッチの設定ファイルを置く場所も決まってるんでどのレイヤーに階層に置いてくださいってことですかそうそうそう大体ねあの
-
LinuxとかだったらスライETCっていうディレクトリがあってその中におそらくhttpdっていうディレクトリがあってその中にapache.confとか.confの拡張室ついて入ってるんですけどその中のですねドキュメントルートっていうところに公開するディレクトリ決めてディレクトリインデックスっていうところにファイル名を決めると
-
ググってください詳細を書くと公開できますよって感じですね決まってるんですねそこは設定書いたら再起動したらその通り動くなるほどこれがウェブサーバーでございますちなみにエンジンXとかエンジンXからアパッチに変えましたってなった時に画面上で変わるところとかはあるんですかあります
-
どこら辺でわかるんですかURLとかは違いますよねURLとかには出ないんですけどエラー出た時とかにわかります普通に使ってる分にはわかんない普通に使ってる分には単純にウェブサイト返されちゃうんでわかんないですけど待ってわかるかレスポンスのヘッダーとかにもしかしたら出るかもしれないけどちょっとごめんそこまではわからん
-
エラー出るって分かるよね実装してないエラー画面とかデフォルトのエラー画面出した時にアパッチから出しましたこのエラー画面みたいな表示というか出るぐらいでアプリケーションでさ例えばエラー画面とかだったりさAmazonとかってさエラー出たらワンちゃんの画像出るの分かる?あーはい1回くらい見たことある気がしますああいうのとかから
-
漏れてしまった設定し忘れのエラーみたいなやつがあったりするんですよ作り忘れちゃうとねっていう時にウェブサーバー側のデフォルトのエラー画面みたいなやつが出ますねビビったるさですよ
-
普通はそんなユーザーは意識しないエンジニアだったらそのエラー画面に出くわした時にここエンジンX使ってるんだってちょっとワクワクするそのくらいで逆にそのエラー画面に表示できたのもテンション上がりますけどね確かにねなんかやってんぞこれお茶目さんめー
-
普通は見れないんですね普通は見れないように作るはずだから実装のミスがあったら分かるって感じですねAmazonとかでそれ見たら多分お金もらえるんじゃないかな報告したら見つけようAmazonで見つけるのはめちゃめちゃむずいと思う
-
なるほどねというウェブサーバーですねこの辺ね深掘りして何の得があるかって言われると最初はあんまりメリット感じづらいと思うんですけどドッカーとかだと多分ねいじる機会はあるかもしれないなんとなくアパッチの
-
ドッカーの方に上げてみたいな設定みたいな書き込んだ記憶はありますけどなんかいるんだろうなぐらいの感じでしかやってないんでそうですね多分商用関係作るっていうよりもローカルの開発環境のためにドッカーのファイル作ったりとか何かしらの仮想マシンとか作ってサーバー作る時とかにそれを知ってるとスムーズにことが進むっていうそういう気持ち良さはありますね
-
まあ儀式じゃなくて儀式の意味も知れるっていうのはそうネットにある記事をコピペしてやった動いたじゃなくてちゃんと設定できるようになるそうっていうそれで教えれるようになりますしね中級エンジニアとして確かになので後輩が入ってきてウェブサーバーって何って言われたらあのウィーターですって言えばいいんじゃないですかそうです説明できるなこれうん
-
深掘りされるとあれかもしれないですけど朝掘りでいい朝掘りで進めていきますね今のところあと自分が分かんないこと聞かれたらそれはくぐろっかそれはいいね
-
いやなんかすっきりしますねこれはでもすっきりすると思います駆け出しの僕からするとすっきりしましたんで聞いてる駆け出しの方もすっきりすると思いますこれはそうなってくれると嬉しいですねそうですねじゃあちょっともうここからもまた別のねいろんなことをすっきりさせるようにちょっと頑張って台本考えていきましょうかそうですねもうやっとボール投げられないようにまたなんかちょっとこういうの書いて
-
決してほしいとかこれもやっとしてるみたいなの教えてくれると話考えやすいんで確かに嬉しいですね過去の自分に問いかけて話題作ってるんで今そうだね確かに最初の頃ウェブサーバー何も理解してなかった地道に啓蒙活動していきましょうこういうこと終わりましょうかそれでは皆さんも
-
サーバーライフサーバーライフアパッチ
#084 ApacheとNginxを知ったら中級エンジニア!?Webサーバーの役割と設定の勘所