私は現在ポート80でnginxを実行しており、サーバー名はexample.com
およびwww.example.com
として構成されています。
私は Flask アプリケーションも持っています。これはポート80からアクセスできるようにしたいが、ホスト名app.example.com
を使用しています。
Nginxはすでにポート80を使用しているので、app.example.com
リクエストをFlaskアプリケーションにどのように正確にルーティングしますか?
サーバーにはIPv4アドレスが1つしかないことに注意してください。
かなり簡単なはずです。
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と同じように使用できます。
ポート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 を使用するアプリケーション