nginx+tomcat单个域名及多个域名配置

项目开发接近尾声,开始着手在生产环境部署项目,开发阶段部署项目都没用nginx。项目是采用SOA架构,多系统开发,主要包括服务系统、中台系统、后台系统、金融系统、接口系统、调度系统、报表系统等。这类分布式的系统,一般也都会用到nginx来做负载均衡。

从公司刚成立就进来,赶鸭子上架来做架构师,负责公司的所有研发事情,搭建公司的整个技术架构,起初的所有核心业务代码基本都由自己亲自把关来进行编码。系统也从最初的只有一个pc端,发展到如今pc中台、后台、android端3个app、iOS端3个app,产品越做越多,亲自负责招聘面试、培训。之前很多时候都有过无助和苦恼,因为负责公司整个架构,又要负责核心业务的编码,技术难点的攻克,新员工的招聘及培训,现在团队已经都发展到16个人,而且这全是研发人员。

回想这一路,觉得之前看似爬不过去的山也不过如此,也许这就是成长吧,成长总是会伴随些许汗水与泪水吧。由于是负责团队的所有事情,所以数据库的维护、迁移数据、建索引等性能优化,项目部署等所有事情必须得一肩挑,不要问我为什么公司没有DBA?为什么没有运维?我真的只能给你一个眼神,让你慢慢去体会。

话不多说,直接开始技术干货分享。

nginx做负载均衡的优势网上有很多介绍资料,这里我不再多做介绍。因为有很多系统要部署,涉及到域名、二级域名、多个域名等的部署。在实际的部署由于对nginx的不够熟悉,遇到过很多坑,其中这种多域名的配置,xxxx.com转发到www.xxxx.com、访问域名转发到tomcat里的项目等,现在先总结一部坑的解决办法。

如将xxxx.com这个域名指向8082端口里的tomcat项目,在做这个介绍前先讲个插曲,如访问xxxx.com需转向到www.xxxx.com,这一点很多人都会忽略。

现在如果要部署中台、后台、金融系统,找到nginx/conf/nginx.conf,修改配置:

    upstream web{
        server localhost:8082;
    }
	
	upstream admin{
        server localhost:8083;
    }
	
	upstream finance{
        server localhost:8084;
    }


	server {
        listen       80;
        server_name  finance.xxxx.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
			proxy_pass http://finance;
			proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
	
	
    server {
        listen       80;
        server_name  www.xxx.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
			proxy_pass http://web;
			proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;			
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
	             
    server {
        server_name xxxx.com;
        rewrite ^(.*) http://www.xxxx.com$1 permanent;
    }
	
	
    server {
        listen       80;
        server_name  admin.xxxx.com;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
			proxy_pass  http://admin;
			proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;			
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }

        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}

        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}

        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }

上面的配置还包括了访问xxxx.com转向www.xxxx.com的配置,如下:

   server {
        server_name xxxx.com;
        rewrite ^(.*) http://www.xxxx.com$1 permanent;
    }

nginx的基本配置大致就是这样,如果绑定多个域名(不管是一级域名还是二级域名),需配置多个server,你会发现这几个server配置都差不多,主要是更改server_name及proxy_pass指向即可。upstream节点其实就是代理服务的访问路径。

如果此时访问域名,你会发现nginx的配置生效了,只是目前显示的是tomcat的默认界面。nginx的配置基本就这样了,接下来对tomcat做些配置的修改。找到tomcat里的conf/server.xml,注释掉默认的Host配置,添加如下Host配置:

    <Host name="localhost" appBase="E:\tomcat\apache-tomcat-8.0.35-8082\webapps\web" deployOnStartup ="false" autoDeploy="false" unpackWARs="true">
                 <Context path="/"  docBase="E:\tomcat\apache-tomcat-8.0.35-8082\webapps\web" />
                 <Valve   className="org.apache.catalina.valves.AccessLogValve"   
                 directory="logs"     prefix="localhost_access_log"   suffix=".txt"   
                 pattern="%h %l %u %t "%r" %s %b"   />
    </Host> 

以上是windows服务器下的配置,如为linux,只需更改appBase和docBase,指向项目的路径。tomcat的配置也已经完成,重启tomcat,访问域名就指向了tomcat里的项目。

希望能对大家有帮助,如果在使用的过程中遇到什么问题,可以在底下留言。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

漏洞预警 | FFmpeg曝任意文件读取漏洞

最近有白帽在HackerOne平台上报了ffmpeg漏洞,该漏洞利用ffmpeg的HLS播放列表处理方式,可导致本地文件曝光。 漏洞描述 6月24日,Hacke...

38950
来自专栏开源项目

码云推荐 | Symphony 社区平台的微信小程序

2017年1月9日小程序如约而至,Symphony 社区平台的微信小程序,提供一些实用工具服务,比如『书单』。 登录 ? 对 md5.js 进行封装,使其可以在...

529130
来自专栏FreeBuf

追踪那些隐藏在暗网深处的匿名者

Tor用户是如何被确定身份的? 纵观暗网的发展史,总有人尝试各种方法挖出匿名用户的真实身份。姑且可以把攻击手段分为两类:对客户端的攻击(浏览器),和对网络流量的...

58690
来自专栏区块链

黑客是怎么入侵并且攻破你的防火墙

大银猿软件科技 现在互联网时代越来越普及了,手机电脑也对人们来说越来越重要了,但是随之而来的是黑客技术,很多人对黑客特别感兴趣,觉得他们是神一样的人物,可以保护...

54790
来自专栏Java后端技术

解决Redisson出现Failed to instantiate [org.redisson.api.RedissonClient]: Factory method 'create' threw e

  最近项目中使用了redisson的哨兵模式来作为redis操作的客户端,然后一个意外出现了,启动报:Failed to instantiate [org.r...

14710
来自专栏木子昭的博客

"杀手级"抓包软件wireshark入门wireshark是什么最基本的过滤规则

wireshark是什么 ? wireshark_logo wireshark是一款抓取数据包的软件,通过它可以看到局域网内的通讯信息 在使用交换机组建局域网的...

43070
来自专栏开源优测

adb devices命令 unauthorized解决方案

If the device is shown as unauthorized, go to the developer options on the phone...

15920
来自专栏FreeBuf

PcapXray:一款功能强大的带有GUI的网络取证工具

网络取证工具通常是安全研究专家用来测试目标网络系统安全性的特殊工具,今天我们给大家介绍的正是这样的一种工具。该工具名叫PcapXray,它带有非常强大的GUI界...

16140
来自专栏Bug生活2048

免费的对象存储——七牛云还是腾讯云

在小程序生成海报时,需要将文章的头图下载到本地,开发过小程序的都知道小程序在进行网络通信时候只支持HTTPS请求。

5.5K50
来自专栏FreeBuf

一种极为高效的钓鱼技术,骗取Gmail用户账户

经常关注我们 Wordfence 的用户会发现,我们网站会不定时的,发布一些关于 WordPress 之外的安全问题警报。 这些警报大多都是,我们认为非常紧迫,...

248100

扫码关注云+社区

领取腾讯云代金券