虚拟主机+ Nginx + Tomcat

在我的虚拟主机+ Apache httpd服务器+ Tomcat + mod_jk连接器中,帖子有很多评论。 我希望每个人都这样。 但是,使用mod_jk连接器安装和配置Apache httpd服务器非常困难。 最近我学会了nginx。 我作为负载均衡器浏览了Nginx服务器。 这篇文章与虚拟主机+ Apache httpd服务器+ Tomcat + mod_jk连接器相同,但我将用Nginx替换Apache httpd Web服务器。

为什么选择Nginx?

Nginx还是开源Web服务器。 它易于配置,并且可以以最小的内存(RAM)占用空间处理大量的网络流量。

为什么我们需要虚拟主机?

在帖子(Tomcat中的虚拟主机)中,我们讨论了如何在Tomcat中设置虚拟主机。 它具有成本效益,因为仅一个公共IP即可托管多个域。 如果我们有大型组织,并且每个部门都希望在不同的计算机上本地托管其网站。 那么如何实现虚拟主机的概念呢? 在这篇文章中,我们将看到我们如何通过Nginx做到这一点。

问题场景:

在大型组织中,他们有多个部门,每个部门都希望将其网站托管在不同的计算机上。 因此,可以使用不同的本地IP地址在本地访问这些网站。

当我们映射到公共地址时,我们将面临问题。 我们有两种选择,要么购买尽可能多的公共地址,要么将一台服务器置于前端并委派这些请求。

我们将使用第二个选项。 我们将Nginx Web服务器放在所有部门服务器的前面。 因此,仅一个公共IP就足够了。 所有域DNS条目均指向Nginx服务器。 在这里,我正在使用本地DNS(/ etc / hosts文件)来模拟相同的环境。 所以我在这些条目中添加了

然后Nginx服务器将这些请求委托给相应的tomcat服务器。 从用户(浏览器)角度来看,此过程是完全透明的。 假设我们认为有3个部门,每个部门都有自己的tomcat,并且他们在各自的tomcat中部署了自己的Web应用程序。 (部门1,部门2,部门3)。 现在,URL和相应的Web应用程序名称:

  • ramki.com是Tomcat1中的department1webapp
  • blog.ramki.com是Tomcat2中的department2webapp
  • Tomcat3中的www.krishnan.com department3webapp

在我的虚拟主机+ Apache httpd服务器+ Tomcat + mod_jk连接器帖子中,我们看到了制作虚拟主机的4个步骤

  1. 安装Apache httpd Web服务器
  2. 安装mod_jk连接器
  3. 配置JK连接器
  4. 配置Apache httpd服务器应用虚拟主机概念

这些步骤是如此复杂,并且很难调试(疑难解答)。 今天,我将使用Nginx服务器。

安装Nginx

我们可以通过存储库(apt-get,yum)或从源代码安装nginx。 在这里,我从这里从源代码构建nginx。 然后,我提取压缩文件。

./configure --help

上面的命令显示了可用于编译的可能的命令行选项。 为了配置使用此命令:

./configure --prefix=/home/ramki/nginx --with-http_ssl_module

如我们所见:

–prefix用于指定nginx服务器要安装的位置,此处使用我的主文件夹(例如/ usr / local / nginx)
–with-http_ssl_module在这里我指定安装SSL模块(https),这不是必需的。 如果我们想要安全的网页,则需要此模块。 现在我们编译源代码make并根据我们的配置sudo make install nginx。 安装完成后,要启动nginx:

cd /home/ramki/nginx/sbin   
sudo ./nginx

现在打开浏览器并转到http:// localhost以获取nginx默认页面。 要停止nginx,我们需要通过-s选项传递停止信号

sudo ./nginx -s stop

将虚拟主机添加到Nginx

如果要添加虚拟主机,则需要在nginx配置文件( conf / nginx.conf )中添加更多服务器块。 每个服务器块代表一个虚拟主机。 每个服务器块如下所示:

server {
                  listen       80;
                  server_name  blog.ramki.com;
        
                 location / {
                             proxy_pass http://127.0.0.1:8282;
                 }
        }

此处,每个服务器块都绑定(监听)端口80。仅当server_name值(此处为blog.ramki.com)与HTTP标头“ 主机”字段匹配时,此服务器块才会发生响应。 Location指令将模式与URL匹配。 如果匹配,则执行位置块。 proxy_pass指令将请求委托给后端服务器。 在这个想法中,我们需要提到后端服务器的IP和端口。

假设客户端发出请求http://blog.ramki.com,则此块与请求的资源匹配。 因此,将执行此块,然后将位置指令/与我们的URL匹配,因此将执行proxy_pass,将我们的请求委托给后端服务器。

这样,我们需要为其他2个虚拟主机添加另外2个服务器块。 相应地更改IP地址和端口号。

现在一切正常。 如果您尝试访问http://ramki.com/department1/,则nginx服务器选择服务器块并将请求转发到tomcat1。 在tomcat1部门1上下文中存在根目录,因此它可以响应。 这样,我们可以访问http://blog.ramki.com/department2/http://www.krishnan.com/department3/ ,我们将看到URL正常工作。 但是我们不想使用额外的上下文根来访问该网站。 我想访问http://ramki.com/ ,所以我们需要在Nginx服务器中使用重写指令来动态地查询URL。 为了做到这一点,我们修改服务器块(添加重写行):

server {
                        listen       80;  
                         server_name  blog.ramki.com;  
     

                          rewrite_log  on;

                        error_log    logs/error_ramki.log   notice;
                          rewrite   ^/(.*)$   /department1/$1;   
        
                          location / {
                                    proxy_pass http://127.0.0.1:8282;  
                          }
        }

在这里,我们添加rewrite指令以捕获URL并对其进行修改(将department1添加到URL),并添加2条可选语句用于rewrite log以帮助调试,因此我们在所有服务器块中添加了相同的rewrite行(修改了Department)。

如果客户端发出请求http://ramki.com/,则nginx接受此请求并与rewrite指令匹配。 因此,将其更改为URL http://ramki.com/department1/ 。 然后将其委托给tomcat1。

我希望一切都清楚。 如果有什么遗漏,请告诉我。

萤幕投放:


参考:来自Ramki Java Blog博客的JCG合作伙伴 Rama Krishnan的虚拟主机+ Nginx + Tomcat

翻译自: https://www.javacodegeeks.com/2013/02/virtual-host-nginx-tomcat.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值