35

私はしばらくの間 Web プログラミングを行っており、LAMP スタックに精通しています。nginx/starman/dancer スタックをいじってみることにしましたが、すべてのピースが互いにどのように関連しているかを高レベルから理解する方法について少し混乱しています。スタックのセットアップは、LAMP スタックのセットアップほど単純ではないように思えますが、それはおそらく、各要素がどのように関連しているかをよく理解していないためです。

nginx が果たしている役割 (軽量の Web サーバー/プロキシ) は理解していますが、starman が pgsi、plack、dancer とどのように関係しているかについては混乱しています。

これらの部分が互いにどのように関連しているか、およびスタックのセットアップを取得するためにそれぞれが必要な (または必要でない) 理由の概要を説明していただければ幸いです。ありがとう!

4

4 に答える 4

50

私は最終日、さまざまなコンポーネントについて読んで過ごしましたが、自分の質問に答えるのに十分な理解があると思います. 私の答えのほとんどは Web 上のさまざまな場所にありますが、うまくいけば、すべての要素を 1 か所にまとめることで何らかの価値が得られるでしょう。

  • Nginx: スタックで最初に理解すべき最も明白な部分は nginx です。Nginx は、ユビキタスな Apache Web サーバーの代わりとして機能する軽量の Web サーバーです。Nginx はプロキシ サーバーとしても機能します。その使用は急速に拡大しており、現在、すべての Web ドメインの約10%にサービスを提供しています。nginx の重要な利点の 1 つは、各接続を処理するプロセス スレッドを作成するのではなく、非同期でイベント駆動型であることです。理論的には、これは nginx が多くのシステム リソースを使用せずに多数の接続を処理できることを意味します。
  • PSGI: PSGIはプロトコルです (特定の実装と区別するため)プラックなどのプロトコル)。私が収集できる限り、PSGI を作成する主な動機は、Apache が最初に作成されたとき、Perl などで記述されたスクリプトで要求を処理するためのネイティブ サポートがなかったことです。これを行う機能は、mod_cgi を使用して Apache に追加されました。Perl アプリケーションをテストするには、アプリケーションが Web サーバー内で実行されるため、Web サーバー全体を実行する必要があります。対照的に、PSGI は Web サーバーが Perl などで記述されたサーバーと通信できるプロトコルを提供します。これの利点の 1 つは、Web サーバーとは別に Perl サーバーをテストするのがはるかに簡単になることです。もう 1 つの利点は、アプリケーション サーバーが構築されると、最高のパフォーマンスを提供するさまざまな PSGI 互換 Web サーバーに簡単に切り替えてテストできることです。
  • Plack: これは、PSGI 互換の Web サーバーと perl アプリケーション サーバーの間の接着剤を提供する PSGI プロトコルの特定の実装です。Plack は Perl の Ruby の Rack に相当します。
  • Starman: PSGI プロトコルと互換性のある perl ベースの Web サーバー。私が抱えていた混乱の 1 つは、なぜ Starman と Nginx の両方を同時に使用したいのかということでしたが、ありがたいことに、その質問はStackoverflow で非常によく答えられました。本質的には、Perl プロセスを必要とせずに nginx に静的ファイルを提供させ、同時に perl アプリケーション サーバーをより高いポートで実行できるようにする方がよいということです。
  • Dancer : Perl 用の Web アプリケーション フレームワーク。Ruby on Rails に相当するものです。または、より正確に言えば、Ruby の Sinatra に相当します (違いは、Sinatra が最小限のフレームワークであるのに対し、Ruby on Rails はより包括的な Web フレームワークであるということです)。PHP を扱い、これまで Web フレームワークを実際に使用したことがない人として、これがサービング スタックにどのように関係しているかについて少し混乱しました。Web フレームワークのポイントは、データベース クエリを Web アプリケーションのオブジェクト/データ構造に変換するなど、Web アプリケーションで非常に頻繁に実行される一般的なタスクを抽象化することです。

  • インストール (ubuntu 上):

    sudo apt-get インストール nginx
    sudo apt-get install build-essential curl
    sudo cpan App::cpanminus
    sudo cpanm スターマン
    sudo cpanm Task::Plack
    sudo apt-get install libdancer-perl
  • 実行する:
CD
ダンサー - a mywebapp
sudo plackup -s Starman -p 5001 -E 展開 --workers=10 -a mywebapp/bin/app.pl

これで、Starman サーバーがポート 5001 で Dancer アプリケーションを実行するようになります。nginx がトラフィックをサーバーに送信するようにするには、変更する必要があります

/etc/nginx/nginx.conf
http セクションに次のようなルールを追加します。

        サーバー {
               server_name permanentinvesting.com
               80を聞いてください。

                場所/css/ {
                  エイリアス /home/ubuntu/mywebapp/public/css/;
                  有効期限は 30 日です。
                  access_log off;
                }



               位置 / {
                  proxy_pass http://localhost:5001;
                  proxy_set_header X-Real-IP $remote_addr;
                }

        }

最初のロケーション ルールは、nginx が /css ディレクトリ内の静的コンテンツを取得して処理する必要があることを指定します。

/home/ubuntu/mywebapp/public/css/
. 2 番目のロケーション ルールは、ポート 80 の Web サーバーへのトラフィックを Starman サーバーに送信して処理する必要があることを示しています。あとは nginx を起動するだけです:

sudo サービス nginx 開始
于 2012-08-26T22:51:10.257 に答える
5

あなたの答えはこれまでのところ正しいですが、次の方法で nginx を設定することをお勧めします。

server {
    listen 80;
    server_name foo.example.com;

    location / {
        # Serve static files directly:
        if (-f $request_filename) {
            expires 30d;
            break;
        }

        # Pass on other requests to Dancer app
        proxy_pass_header Server;
        proxy_pass http://localhost:5001/;
    }
}

これにより、nginx は css だけでなく、すべての静的ファイル (JavaScript と画像) を提供します。

この例は、2011 年の Perl Dancer Advent から取ったものです :)

于 2012-12-29T18:25:21.730 に答える