2

動作中のSpring MVCアプリがあります。ベータ版ユーザーが見られるようにしたい。私はドメイン名/セットアップネームサーバーとそのすべての dns を購入しました。

次のようにローカル ホストからアプリにアクセスします。

localhost:8080/myApp

しかし、現実世界では、 のようにアクセスしたいと考えていますmydomain.com。だから私はたくさんグーグルで検索し、人々がこれらのことのために「最速」としてnginxを推奨しているのを見つけました. したがって、次の構成でnginxをインストールしました:

server {

  listen 80;

  server_name www.mydomain.com mydomain.com;
  location / {
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://localhost:8080;
    }

} #end server

問題 :

訪問するmydomain.comと、よく知られている tomcat page が表示されますIf you're seeing this page via a web browser, it means you've setup Tomcat successfully. Congratulations!

手動で移動するとmydomain.com/myApp、すべてが期待どおりに機能します。

質問 :

これを次のように構成する方法はありますか:

mydomain.com転送先のアドレスバーに入力するとmydomain.com/myApp

または、この場合、私は完全にオフです。これを行う簡単な方法はありますか?

アップデート:

ROOT を他のディレクトリに変更してから ROOT ディレクトリに展開すると、fvu の提案に従って tomcat から 404 が取得されます。

type Status report

message

description The requested resource is not available.

サーバー ログからこのエラーを取得できます。

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.util.Log4jConfigListener
java.lang.IllegalStateException: Web app root system property already set to different value: 'webapp.root' = [/tomcat_9090/webapps/myApp/] instead of [/tomcat_9090/webapps/ROOT
/] - Choose unique values for the 'webAppRootKey' context-param in your web.xml files!

更新 II :

構成を次のように変更すると:

proxy_pass http://localhost:8080/myApp/;

Web サイトは機能しているように見えますが、実際には機能していません。リンクが機能しない、css/js が読み込まれない。

4

1 に答える 1

2

を使用してnginxを構成する場合proxy_pass http://localhost:8080/myApp/;、唯一の問題は、リンクとリソースを作成して、デフォルトの Tomcat Servlet パスではなく、予想される base-url パスを使用する方法です。

Spring Framework 3.1+を使用できる場合、新しいプロファイル機能は、他の Web フレームワークと同様に、アクティブなプロファイルに応じて異なるベース URL を定義するのに役立ちます。パスは、サーバーまたは環境に応じて実行時に決定されます。

たとえば、少なくとも 2 つのプロパティ ファイル (production.properties と dev.properties) でそれぞれに baseurl フィールドを宣言するとします。

  • production.properties

    baseurl = //yourdomain.com
    
  • dev.properties

    baseurl = //localhost:8080/myApp
    

次に、お気に入りの Spring の方法を使用して、次のように、異なる環境ごとにプロパティをロードします。

<util:properties id="properties" location="classpath:META-INF/default.properties" />
....
<beans profile="development">
    <util:properties id="properties" location="classpath:META-INF/dev.properties" />
</beans>

以前の要件では、JSP テンプレート ページでbase タグを次のように定義できました。

<spring:eval expression="@properties['baseurl']" var="baseurl" />

<base href="${baseurl}/" />

最後に、すべてのリンクとリソースを相対パスとして宣言できます。

<link rel="stylesheet" href="css/app.css">
<script src="js/libs/jquery-1.7.1.min.js"></script>
<a href="">Home</a>
<a href="about">About</a>
...

何らかの理由でベース タグに問題がある場合は、すべてのリンクを ${baseurl} で宣言することもできます。<link rel="stylesheet" href="${baseurl}/css/app.css">

このソリューションを使用すると、すべてのサーバーが独自のアクティブ プロファイルを持ち、すべてのリンクとリソースが実行時に更新されます。

于 2012-12-22T23:25:26.003 に答える