43298


**PythonをWeb上で、下記何れかの方法により動作させようと思っているのですが**

[code]

    ・Nginx、CGI、Python
    ・Nginx、uWSGI、Python
    
[/code]

* * *

**Q1.CGIを選択するメリットについて**  
・何かありますか？  
・手軽に実装できることぐらい？  
・性能的にwsgiより劣るわけではない？？

* * *

**Q2.wsgiについて**  
・Pythonに特化したインターフェース定義ですか？  
・それとも、CGIに代わる新たな接続標準仕様？  
・CGIが古いというわけではない？？

* * *

**Q3.uWSGIについて**  
・wsgi規格のインターフェースを実装したもの？  
・Nginxで使用できるwsgiは他にもありますか？  
・uWSGIは、Nginxに特化しているわけではない？？

* * *

**環境**  
・CentOS  
・Nginx


CC BY-SA 3.0
2018-04-16T04:59:09.677
43286
2018-05-19T09:38:24.007
2018-05-19T09:38:24.007
3060
7886
question
python nginx uwsgi
「CGI」と「uWSGI」について


> Q1.CGIを選択するメリットについて  
>  ・何かありますか？

http通信を理解する、勉強するために題材にすることはあります。  
それくらい、生のhttp通信に近い仕組みです。

> ・手軽に実装できることぐらい？

手軽とは言いがたいと思います。  
生のhttp通信に近いことしか実装しないのであれば手軽かもしれません。

> ・性能的にwsgiより劣るわけではない？？

生のhttp通信に近いため、セキュリティの考慮や多くのことを望まなければ、処理が少なくて済むため、高速かもしれません。

> Q2.wsgiについて  
>  ・Pythonに特化したインターフェース定義ですか？

はい。

> ・それとも、CGIに代わる新たな接続標準仕様？

いいえ。  
しかし、PythonのWSGIを参考にPerl用のPSGI、Ruby用のRackが開発されたそうです。

> ・CGIが古いというわけではない？？

産まれてからの経過年数はWSGIよりも古いです。

> Q3.uWSGIについて  
>  ・wsgi規格のインターフェースを実装したもの？

はい。  
uWSGIは比較するならGunicornなどのWebアプリケーションサーバーと比較した方がよいでしょう。  
uWSGIははじめはWSGIプロトコルに対応した高機能なWebアプリケーションサーバーとして作られましたが、現在はWSGIだけでなくPSGIやRackも扱えます。

> ・Nginxで使用できるwsgiは他にもありますか？  
>  ・uWSGIは、Nginxに特化しているわけではない？？

uWSGIはNginx用というわけではありません。Webアプリケーションサーバーです。  
uWSGIを使っていても、NginxやApache等のWebサーバーを前段に配置するのが一般的です。  
前段のWebサーバー(Nginx等)とWebアプリケーションサーバー(uWSGIやGunicorn等)はリバースプロキシ等で通信します。


CC BY-SA 3.0
2018-04-16T13:46:04.790
43298
2018-04-16T13:46:04.790
806
43286
answer


CGIを中心に補足します。

Q1.CGIを選択するメリットについて

CGIについては、python2.7の公式ドキュメントに詳しい説明があります。python3の方にはないので内容は古いですが、説明は詳しいです。  
<https://docs.python.org/ja/2.7/howto/webservers.html>

CGIは、リクエスト毎に新しいPythonインタプリタを起動するため起動に時間がかかり非効率です。
その問題を解決したものの一つにFastCGIがあります。CGIと言った場合に、古典的CGIはもうあまり使われていないのでFastCGIのことを指す場合も多いです。古典的CGIの方は性能が劣りますが、FastCGIの方は性能的に問題はありません。PHPの場合は、php-
fpmというソフトが有名でFastCGIが広く使われています。しかし、Pythonでは、公式マニュアルでWSGIの使用を勧めているためかそれほど使われていません。

NginxでFastCGIを動かしたい場合は、nginx製のFCGI Wrapというモジュールや, FastCGIの機能をもつ lighttpd
Webサーバを、NginxとPythonアプリの間に置きます。

Q2.WSGIについて  
WebサーバとPythonで記述されたWebアプリケーションとの標準インターフェースです。Webサーバー側でWSGIを実装したソフトウェア（いわゆるアプリケーションサーバー）には、uWSGI,
Gunicorn, NGINX
Unit等があります。アプリケーションサーバーを使う場合、通常はNginxをリバースプロキシにして前に置きます。リバースプロキシを使う理由は、セキュリティの向上やSSL対応、コンテンツの圧縮、画像等の静的ファイルのキャッシュをリバースプロキシで行うことによりアプリケーションサーバーの負荷軽減が図れます。


CC BY-SA 3.0
2018-04-22T10:46:53.537
43476
2018-04-22T11:01:00.770
2018-04-22T11:01:00.770
15171
15171
43286
answer