在我的虚拟主机+ 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个步骤
- 安装Apache httpd Web服务器
- 安装mod_jk连接器
- 配置JK连接器
- 配置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