web-dev-qa-db-ja.com

ポート80で2つのサーバーアプリケーションを実行できますか?

私は現在ポート80でnginxを実行しており、サーバー名はexample.comおよびwww.example.comとして構成されています。

私は Flask アプリケーションも持っています。これはポート80からアクセスできるようにしたいが、ホスト名app.example.comを使用しています。

Nginxはすでにポート80を使用しているので、app.example.comリクエストをFlaskアプリケーションにどのように正確にルーティングしますか?

サーバーにはIPv4アドレスが1つしかないことに注意してください。

6
Mark

かなり簡単なはずです。

Flask自体が80以外のポートで実行されていることを確認してください。

次に、NginXをリバースプロキシ(およびWebサーバー)として使用して、app.example.comのサブドメインを処理し、次に、それをlocalhost:8080のプロキシとして処理します(またはflaskアプリケーションがバウンド)。

upstream flask  {
      server 127.0.0.1:8080; #Flask
}

server {
    listen       YOUR_PUBLIC_IP:80;
    server_name  app.example.com;

location / {
     proxy_pass  http://flask;
     proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
     proxy_redirect off;
     proxy_buffering off;
     proxy_set_header        Host            $Host;
     proxy_set_header        X-Real-IP       $remote_addr;
     proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
   }

}

Server_nameが異なる限り、すべてポート80に多くのserver {}ブロックを配置でき、Apache VirtualHostsと同じように使用できます。

4
Tom O'Connor

ポート80でアプリケーションを直接提供することはお勧めしません。標準のHTTPサーバーがポート80でリッスンし、Python(Flask)アプリケーションのWSGIサーバーにリクエストを転送することをお勧めします。

App.example.comに対するすべてのリクエストをWSGI(Pythonアプリケーションサーバー)に送信するようにnginxを設定する必要があります。このように、 http://example.com:80 へのリクエストはnginxによって直接提供され、仮想ホストapp.example.com:80へのすべてのリクエストは転送されますPythonアプリケーションサーバー。好みに応じて、uWSGIまたはgunicornを使用してPython/Flaskアプリケーションを実行できます。

App.example.comを仮想ホストとして構成するには、次のような内容のファイル(たとえば、Debianベースのディストリビューションを使用している場合は/etc/nginx/sites-available/app.example.com)を作成する必要があります。

server { 
  server_name app.example.com; 
  access_log /var/log/nginx/app-access.log; 
  error_log /var/log/nginx/app-error.log; 
  location /static { 
    root /var/www/app.example.com/static; # adjust to fit your path here 
  } 
  location / { 
    uwsgi_pass unix:/tmp/uwsgi_app.sock; 
    include /etc/nginx/conf.d/uwsgi_params; 
  } 
}

location /セクションの内容は、使用する特定のWSGIサーバーに応じて調整する必要があります。以下を参照してください。

次に、新しい仮想ホスト構成をサイト対応にシンボリックリンクし、nginxを再起動する必要があります。

ln -sf /etc/nginx/sites-available/app.example.com /etc/nginx/sites-enabled/
/etc/init.d/nginx restart

同じIPアドレスとTCPポートで複数のサイト(仮想ホスト) にサービスを提供するようにnginxを構成する方法の詳細については、このドキュメントを参照してください。

UWSGIでnginxを構成する方法を説明する2つのブログエントリを次に示します。 Deploying Flask With Nginx and uWSGISetting up Flask nginxおよびuWSGI を使用します。 gunicorn(RubyのUnicornアプリケーションサーバーのPython WSGIポート)を使用する場合は、このSOの質問を確認できます: 実行中Flask nginxとgunicorn を使用するアプリと Serving Flask Nginxとgunicorn を使用するアプリケーション

1
zorlem