Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

WBOY
リリース: 2023-05-21 19:01:04
転載
1842 人が閲覧しました

1) もちろん、使用したいソフトウェアをダウンロードする必要があります。次は nginx 公式 Web サイトにアクセスしてください。 http://nginx.org/en/download.html はここにあります。現在使用しているバージョンは 1.1.7 ですが、基本的に今後のバージョンはすべて互換性があり、使用しているものはあまり低レベルな部分を含まないため、変更はありません。ここでは、私の場合はWindowsなので、当然Windows版をダウンロードします。ダウンロードしたら、まず起動する必要があります。 nginx フォルダーに入り、nginx を直接起動します。たとえば、ダウンロードした後、d:\software\developertools\server\nginx-1.1.7 に置き、直接 cmd してから cd d:\software\developertools\server\nginx-1.1.7 を実行します。コマンドラインに慣れている人は驚くかもしれませんが、そのフォルダーに進みません。自分で指定しない限り、Windows はパーティション間を移動しません。したがって、次のように d: を直接実行する必要があります:

Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

その後、nginx を直接起動します。ここで、ウィンドウが点滅するのが見えるかもしれません。Tomcat の使用によると、その経験があっという間に過ぎてしまったら、それは何かが間違っているという証拠ですよね?しかし、そうではありません。

Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

#この時点でタスク マネージャーを開くと、そこに 2 つの nginx.exe が表示されます。これは、すでに開始していることを示していますが、その理由については、ここでは詳しく説明しません。

Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

nginx を起動したので、tomcat を起動できます。http://localhost に直接アクセスしたい場合は、tomcat に直接アクセスできます。心配しないで、nginx が起動後にどのようになるかを見てみましょう。 http://localhost に直接アクセスすると、次の内容が表示されます。

Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

nginx が正常に起動し、nginx ディレクトリに直接アクセスしていることがわかります。では、これらは実際にはどこで設定されているのでしょうか。これには、nginx の重要な設定ファイルである nginx.conf が関係します。
2) nginx フォルダー内に conf フォルダーがあり、いくつかのファイルが含まれていることがわかります。他のファイルには関係なく、nginx.conf を開くと、次の段落が表示されます:

Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

このコードはサーバー内にあり、プロキシサーバーに相当しますが、もちろん複数設定することも可能です。注意深く分析してみましょう: listen: 現在のプロキシ サーバーがリッスンするポートを示します。デフォルトでは、ポート 80 をリッスンします。複数のサーバーを構成する場合は、リスナーを別の方法で構成する必要があることに注意してください。そうしないと、どこに行くかを決定できなくなります。 server_name: リスニング後のどこに行くかを示します、この時はローカルエリアに直接行きます、この時はnginxフォルダに直接行きます。 location: 一致するパスを示します。/ が設定されている場合、すべてのリクエストがここで一致することを意味します。 Root: root が設定されている場合、このリクエストのパスが一致すると、対応するファイルがこのフォルダーで見つかることを意味します. ここで、後で静的ファイルを提供するときに役立ちます。 Index: ホーム ページが指定されていない場合、指定されたファイルがデフォルトで選択されます。複数のファイルが存在する可能性があり、それらは順番にロードされます。最初のファイルが存在しない場合は、2 番目のファイルが見つかります。以下同様です。以下の error_page はエラーを表すページですが、ここでは当面使用しないので無視します。
具体的な設定がわかったので、localhost にアクセスするときに Tomcat に切り替える方法を説明します。実際、変更されたのは 2 か所だけです:

server_name localhost:8080;  
location / {  proxy_pass http://localhost:8080}
ログイン後にコピー

上記 2 か所を変更しました。私の Tomcat はポート 8080 上にありますが、必要に応じて変更できます。ここには新しい要素 proxy_pass があり、これはプロキシ パスを表します。これは、以前に指定する必要があったルートとは異なり、転送に相当します。ファイルを変更したので、nginx をシャットダウンしてから再起動する必要があるということでしょうか? 実際、その必要はなく、nginx はファイルをリロードできます。直接実行します: nginx -s reload
うれしすぎて、エラーを見つけました:

Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

原因は何ですか、エラーは次の場所で見つかりました。 45 行目、その行で } を見つけたくなかったので、慎重に検索したところ、追加した proxy_pass が非常に奇妙であることがわかりました。; 記号で終わっていませんでした。これが問題でした。これを直接変更し、再度実行すると、エラーはなく、問題ないことがわかりました。直接ロードしたくないが、構成ファイルに問題があるかどうかだけを確認したい場合は、次のように直接入力できます: nginx -t
これにより、構成ファイルにエラーがあるかどうかを確認できます。以下のすべての変更は、変更の完了後に nginx -s reload を実行して構成ファイルをリロードすることを前提としています。
すべて問題がなければ、http://localhost を再度開くと、次のページが表示されます:

Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

这时,我们发现它并不是刚才的welcome页面了,而是tomcat的管理页面了,不管我们点击什么链接都是没问题的,相当于直接访问http://localhost:8080一样。
3)上面我们直接试了一个小例子,让nginx进行转发,即所谓的反向代理。但实际上我们的需求不会是这样的,我们需要分文件类型来进行过滤,比如jsp直接给tomcat处理,因为nginx并不是servlet容器,没办法处理jsp,而html,js,css这些不需要处理的,直接给nginx进行缓存。下面我们来进行一下配置,让jsp页面直接给tomcat,而html,png等一些图片和js等直接给nginx进行缓存。这时最主要用的还是location这个元素,并且涉及到一部分正则,但不难:

location ~ .jsp$ {    proxy_pass http://localhost:8080;}  
location ~ .(html|js|css|png|gif)$ {  root d:/software/developertools/server/apache-tomcat-7.0.8/webapps/root;} 
location ~ .jsp$ {    proxy_pass http://localhost:8080;} 
location ~ .(html|js|css|png|gif)$ {  root d:/software/developertools/server/apache-tomcat-7.0.8/webapps/root;}
ログイン後にコピー

我们先要去掉之前配的location /,避免全部请求被拦截了。然后我们再来看看http://localhost

Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

当我们不指定jsp页面的时候,它会出现找不到,因为,此时并没有相应的location匹配,所以就会有404错误,这时就跳到了nginx自定义的error页面去了。而当我们用http://localhost/index.jsp去访问时,我们看到了熟悉的页面:

Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

而且图片那些都显示正常,因为图片是png的,所以直接在tomcat/webapps/root目录下直接查找,当然,如果我们点击manager application how-to这个链接,我们发现:

Nginx を Tomcat サーバーのリバース プロキシとして使用する方法

它还是找不到,为什么呢?因为这是个html页面,但它并不在root目录下,而是在docs目录下,但当我们匹配html时,我们却到root目录下去找,所以还是找不到这个页面。
一般情况下,如果我们需要用nginx来进行静态文件伺服,一般都会把所有静态文件,html,htm,js,css等都放在同一个文件夹下,这样就不会有tomcat这样的情况了,因为tomcat下的是属于不同的项目,这个我们就没办法了。
3)有些人会说,这些都只会找一台服务器,但如果我们想在一台服务器挂了的时候,自动去找另外一台,这怎么办?这实际上nginx都考虑到了。这时,我们之前用的proxy_pass就有大用途了。我们把之前的第一个例子,即全部都代理的修改一下:最后修改如下:

upstream local_tomcat {  server localhost:8080;}  
server{    location / {      proxy_pass http://local_tomcat;    }  
  ##......其他省略
}  
upstream local_tomcat {  server localhost:8080;} 
server{    location / {      proxy_pass http://local_tomcat;    } 
  #......其他省略
}
ログイン後にコピー

我们在server外添加了一个upstream,而直接在proxy_pass里面直接用http://+upstream的名称来使用。我们还是直接来http://localhost,还是和第一个一样的效果,所有链接都没问题,说明我们配置正确。upstream中的server元素必须要注意,不能加http://,但proxy_pass中必须加。我们刚才说可以在一个服务器挂了的情况下连到另外一个,那怎么弄呢?其实很简单,在upstream中的local_tomcat中配置多一个server。比如我现在弄多一个jetty,端口在9999,所以我们配置如下:

upstream local_tomcat {  server localhost:8080;  server localhost:9999;}  
upstream local_tomcat {  server localhost:8080;  server localhost:9999;}
ログイン後にコピー

此时,我们关闭tomcat,而只开jetty。我们来运行http://localhost看看效果: 我们看到它请求到了jetty的页面,但由于jetty的机制,这时没有显示jetty主页,这个我们先不管。但我们的在一个服务器挂的情况下自动使用另外一个的功能实现了。
但有时我们就不想它挂的时候访问另外一个,而只是希望一个服务器访问的机会比另外一个大,这个可以在server最后加上一个weight=数字来指定,数字越大,表明请求到的机会越大。

upstream local_tomcat {  server localhost:8080 weight=1;  server localhost:9999 weight=5;}  
upstream local_tomcat {  server localhost:8080 weight=1;  server localhost:9999 weight=5;}
ログイン後にコピー

 这时我们给了jetty一个更高的权值,让它更有机会访问到,实际上当我们刷新http://localhost访问的时候发现jetty访问机率大很多,tomcat几乎没机会访问,一般情况下,如果我们必须这样用,不要相关太大,以免一个服务器负载太大。当然,server还有一些其他的元素,比如down表示暂时不用到该服务器等等。

以上がNginx を Tomcat サーバーのリバース プロキシとして使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:yisu.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート