2016-09-24 10 views
0

私は1台のサーバーに複数のdjangoアプリケーションをホスティングしています。

すると、ユーザの訪問:http://dev-app.example.com/testapp1

私はアプリの間で同じ資産が、それらに同じパスを使用していないので、動的に$のURIから生成されたルート・パスと静的/奉仕する必要があります。

私のnginxの設定ファイルツリー:

nginx 
├── sites-enabled 
│   ├── myconf 
│   myapps/ 
│   ├── testapp1 
│   └── testapp2 

MYCONFファイル:

server { 
    listen 8088; 
    server_name dev-app.example.com; 

    location = favicon.ico { access_log off; log_not_found off; } 

    location /static 
     # The line below isn't working even if the $uri has the string I want to concatenate 
     root /home/user$uri/current; 
    } 

    include /etc/nginx/myapps/*; 
} 

testapp1ファイル:

location /testapp1 { 
    include uwsgi_params; 
    uwsgi_pass unix:/home/user/testapp1/current/testapp1.sock; 
} 

testapp2ファイル:

location /testapp2 { 
    include uwsgi_params; 
    uwsgi_pass unix:/home/user/testapp2/current/testapp2.sock; 
} 

nginxの組み込み変数$ uriを使用して、要求されたアプリケーションごとにmyconfファイルに/ staticの場所のルートパスを作成します。

ユーザーが、私はこれを提供したいhttp://dev-app.example.com/whatever開き

# In the myconf file 
location /static { 
    root /home/user/whatever/current; 
} 
+0

nginxの設定の大きな部分を表示できますか?これがどう動くべきかわかりません... – GwynBleidD

+0

@GwynBleidD私はちょうど、ありがとう。 –

+0

正しく理解されているかどうかを確認するだけで、あなたのアプリケーションは '//yourdomain.com/testapp1'と' // yourdomain.com/testapp2'に提供されますが、両方のアプリケーションで静的ファイルは '/yourdomain.com/static '。正しい? – GwynBleidD

答えて

0

それがそのように動作しません内部の静的な場所を設定します。

まず、HTTPリクエストの仕組みを理解する必要があります。ウェブサイトまたは静的ファイルの各リクエストは別々のものであり、独自のURLを持っています。 Nginxは静的ファイルが要求されたウェブサイトを要求するためにスタティックファイルのリクエストをペアにすることはできません...

nginxがこれを知る唯一の方法は、Refererヘッダーであり、そのブラウザは静的ファイル。これには、静的ファイルが要求されたWebドキュメントへのパスが含まれている可能性もありますが、空でもかまいません。また、ウェブサイトのルートへのパスを含めることもできます。

また、ブラウザは、ユーザーが訪問http://example.com/testapp1とそのサイトがhttp://example.com/static/style.cssのための参照が含まれているので、もし、ブラウザがそれをキャッシュし、http://example.com/testapp2ブラウザへの要求に新しいCSSファイルをダウンロードしませんが、むしろ使用しますが、彼らはできる限りのことをキャッシュしようとしますキャッシュされたもの。

ウェブクライアントが常に適切なRefererヘッダーを送信し、静的ファイルをキャッシュしないことが確実であれば、nginxの変数$http_refererからアプリへのパスを抽出しようとすることがあります。

+0

明確にしていただきありがとうございますので、1つのサーバーブロックに複数のアプリケーションをホストする方法はありませんか? –

+0

はい、あります!しかしそうではありません。それぞれのアプリに別々の静的パスを作成するだけです。 djangoの 'STATIC_URL'設定を確認してください。 – GwynBleidD

+0

ありがとう。実際には、何らかの理由で静的にする必要があります。私はsub-subdomain(testapp1.dev-app.example.com)を使用して終了しました。最初の部分(testapp1)をキャプチャし、nginx confのif文を使用しました。 –

0

は、各サーバブロック

server { 
    listen 80; 

    server_name pool.simlabdevelopments.com; 
    root /srv/http/simlabdevelopments.com; 

    location /static/ { 
    alias /srv/webapps/autopool/static/; 
    } 
} 
+0

私は1つのサーバーブロックしか持っていないので、$ uriに基づいてエイリアス/ルート動的を作成したいと思います。 –

関連する問題