web-dev-qa-db-ja.com

Nginxリバースプロキシとサブドメイン

Nginxの設定に問題があります。私はすでに問題を検索しましたが、私が見た提案された解決策は私にとってはうまくいきませんでした。

Tomcatサーバーにいくつかのアプリがあり、jbossサーバーにいくつかのアプリがあります。別のサーバーNginxでリバースプロキシとして構成しましたが、正常に動作します。今、私がやることは、ドメイン名を使用してTomcatとjbossのアプリにアクセスすることです。例えば。 Tomcat.domain.com:8080/app1というアドレスにTomcatのアプリがあります。 Tomcat.domain.com:8080/app2など(jbossアプリの場合でも)。リバースプロキシを使用すると、この出力があります。指定されたサーバーに属していないポート番号も指定する必要はありません。しかし、私はこの方法でサブドメインを使用します:app1.domain.com、app2.domain.comなど。したがって、Nginxの私の構成は、リバースプロキシでのみ機能し、使用されるものです(簡単にするために、Tomcatに関する行のみを報告します)。

upstream Tomcat_server {

    server Tomcat.domain.com:8080;
}
server {
     listen 80;
     location /app1 {
                  proxy_pass http://Tomcat_server;
                  proxy_set_header  X-Forwarded-Host $Host;
                }
    }

サブドメイン構成の場合、サーバー定義に関する部分を次のように変更しました。

server {
     listen 80;
     server_name app1.domain.com;
     location / {
                  proxy_pass http://Tomcat_server/app1;
                  proxy_set_header  X-Forwarded-Host $Host;
                }
    }

一部のフォーラムで提案されているとおりですが、機能しません。 DNSを管理するサーバー上で、app1.domain.comがproxy.domain.comサーバーを指すように指定します。ログを見ましたが、何もありませんでした。私は何をすべきか?

ありがとう

ルシアナ

5
Luciana D

DNS設定を確認することもできます。

Python DjangoやRuby on RailsなどのWebフレームワークを使用して、さまざまなアプリケーション用にオンザフライで作成する複数のサブドメインも使用します。

典型的な例はmydomain.comにあります。myapp.mydomain.comが必要な場合があります。myappはmy_server_IP:some_portで提供されるフレームワークです。

そのようなこと(同じOR異なるポートでオンザフライで多くのサブドメイン)を達成するために、DNSからWebサーバーに決定を委任しますWildcard DNS record- Wikipediaを参照 。名前が示すように、そのようなレコードはa catch all domainを生成します。これは、仮想ホスト-ドメインプロキシなどを使用してWebサーバーから簡単に管理できます。

GoDaddyのDNS管理ツールのAワイルドカードレコードは次のようになります。

Host Points To TTL

* YOUR_SERVER_IP 1 Hour

app.mydomain.comに対するすべてのリクエストをotherserver.com:9000/index.htmlに渡すNginx構成ファイル

結果:ブラウザに入力するとhttp://app.mydomain.comになり、Nginxはotherserver.com:9000/index.htmlからコンテンツを提供します。

server {
    listen   80;

    server_name app.mydomain.com www.app.mydomain.com;

    access_log  /var/log/nginx/app_mydomain_com_access.log;
    error_log   /var/log/nginx/pp_mydomain_com_error.log;

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;

    location / {
        proxy_pass http://otherserver.com:9000/index.html;
    }

}
5
Stef K

DNSはすべての権利であり、ローカルドメインで運用する前に試用していました。問題をより簡単に解決しました(index.htmlまたは他のファイルはなく、フォルダー名しかありません)。最後に、これは誰かに役立つと思います、構成は次のとおりです:

upstream Tomcat_server {
    server Tomcat.domain.com:8080;
}
server {
    listen 80;
    server_name app1.domain.com;
    location / {
        proxy_pass http://Tomcat_server/app1/;
        sub_filter /app1/  /;
    }
}

proxy_passの最後にある「/」が必要です...

sub_filterは、結果が次のようになることを避けるために必要です。

   app1.domain.com/app1

それだけです。サブドメインを使用すると(私の場合のように)アプリに何らかの病気が発生する可能性があるため、Tomcat 6で動作するアプリのこの構成を改善しようとしています。

3
Luciana D