人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

nginxの動的コンテンツに対して

nginxについて質問させてください。

nginxは静的ページには強いが、以下のページを見ると動的ページは作成できない、.htmlファイルしか実行できないと書かれています。
https://www.saintsouth.net/blog/install-nginx-on …
http://blog.jicoman.info/2014/05/nginx_php-fpm/
他に、静的ページはnginx、動的ページは別のサーバとあります。
http://inoshiro.hatenablog.com/entry/20110806/13 …


自分にはあまり良くメリットが分からないのですが、今の世の中動的ページのないサイトは少ないと思います。
「静的ページはnginx、動的ページは別のサーバ」というのが自分の知識では複雑怪奇な気がします。
動的ページだけを別のサーバに、と言うのはどのようにすれば実現できるのでしょうか?
フレームワークなどを利用する時はnginxは利用できるのかな?と思ったのですが。
Apacheのように1つで全部出来るわけではないのでしょうか?


PHPの場合はPHP-FPMというのを利用しないといけないようです。
自分はPythonを使用していますが、uWSGIを使用すればnginxを使えると考えて良いのでしょうか?
また、その場合でも動的ページは作成できないのでしょうか?

アドバイスいただけたらありがたいです。

●質問者: valilian
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● a-kuma3
ベストアンサー

「静的ページはnginx、動的ページは別のサーバ」というのが自分の知識では複雑怪奇な気がします。

「複雑怪奇」というほどでもないです。
Apache では、java を使うときが同じような構成になります。

client
 ↓80 port
Apache
 ↓8080 port
Tomcat

「別のサーバ」というよりは、Nginx が「別のプロセス(別のホストにあっても良い)」と通信をする、という構成です。


動的なページ生成は、CGI という仕組みが最初です。
Apache(に限りません)が、別のプロセスを起動して、その標準出力を取り込んで http のレスポンスとして返します。

ただ、別プロセスを起動する、というのは、割りと処理コストがかかるので Apache と同じプロセス内で処理をしてしまおう、という動きが出てきました。
今どきは、perl とか php なんかは、外部プロセスとして起動するのが珍しいくらいです。

ただ、動的な処理を自プロセス内で動かすと、そちらにリソース(CPU やメモリ)を食われてしまうので、軽いはずの静的なコンテンツを返す方がひっぱられて遅くなってしまう、ということにもつながります。

java の場合は、Apache とは別のプロセスで処理をする、という戦略を取りました。
Apache:java を n:m に組み合わることで、さばかなければいけない処理の性格に応じて、使えるリソースを有効に使える、というメリットがあります。
例えば、静的なコンテンツをほとんど使わなくて、動的なコンテンツの生成が重たい場合には、Apache:java を 1:2 や 1:3 にしたりします。

Apacheのように1つで全部出来るわけではないのでしょうか?

Apache の CGI も mod_cgi というモジュールが処理しています。
本体に同梱はされていますが、「本体とは別のモジュールが処理している」という体裁です。
Apache 本体と mod_cgi が別に配布されていたことがあるかは知らないんですけど、mod_perl や php*_module なんかは最初は(今も?)別配布です。
だからこそ、それらを同梱した XAMPP なんてものがあるわけです。


自分はPythonを使用していますが、uWSGIを使用すればnginxを使えると考えて良いのでしょうか?

uWSGI が Nginx で CGI を使えるようにする仕組みなので、動的なページを作ることができるようになります。

Python なんかは、uWSGI プロセス内のスレッドとして動作させることもできるみたいです。

Example 10: optimizing CGIs (advanced)

You can avoid the overhead of re-running interpreters at each request, loading the interpreter(s) on startup and calling a function in them instead of execve() ing the interpreter itself.

The contrib/cgi_python.c file in the source distribution is a tiny example on how to optimize Python CGI scripts.

Running CGI scripts on uWSGI — uWSGI 2.0 documentation

valilianさんのコメント
a-kuma3さん、分かりやすいご回答まことにありがとうございました。 自分がなにか難しく考えすぎていたのかもしれません。 あまりサーバーの所を触ったことがないので理解ができないでおりました。 ありがとうございました。

2 ● sugimurase

Nginxと動的ページの処理エンジンの関係については a-kuma3 さんのおっしゃるとおりです。今回、たまたま私のページを参照いただいたようなので、追加で「Nginx に uWSGI + Django アプリ を組み込む」についての手順を投稿しました。
参考になれば幸いです。


valilianさんのコメント
sugimuraseさん、ありがとうございました。 リンク先の情報を元に試させて頂きます。 こういう情報は本当に助かります。 ありがとうございました。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ