您的位置:首页 > 运维架构 > 反向代理

nginx反向代理配置多域名多端口ssl

2020-02-16 06:03 330 查看

nginx反向代理配置多域名多端口ssl

如题,我使用的环境是centos7.5,nginx/1.16.1,tomcat9。目前我搭配的是一个给tomcat使用的域名配ssl,一个是给node使用的域名配ssl,使用的是两个不同的端口。
至于安装nginx和tomcat、node的安装还有申请证书之类的我这里就不说了。

1.修改tomcat配置


如图,修改端口号,我这里是改为3003,注意,必须加上打红框的参数 proxyPort=“443”,当然也要加上redirectPort=“443”。

在Host的Valve里面加上红框里的内容
remoteIpHeader=“x-forwarded-for”
remoteIpProxiesHeader=“x-forwarded-by”
protocolHeader="x-forwarded-proto"

好了,tomcat就该这些就可以了,简单吧。其他就不用动了。

配置nginx.conf

配置80端口监听并转换成https
为了可以使所以的域名都能直接访问,而不需要加端口,所以使用nginx监听80端口,如图

以此类推,有多少个域名可以配多少个server来监听80端口,然后把域名转成https就行了。

接下来就是配置反向代理

首先配node程序的ssl,我的node此次使用的是3000端口

注意,域名要上下保持一致,一定要确保域名配置了80端口监听

其他的以此类推了,比如我的tomcat,使用的是3003端口,如下配置

总结一下

tomcat要先如第一步修改server.xml文件,然后直接配置ndinx.conf就行。首先配置80端口监听,你有多少域名要配ssl就配多少个80端口监听serve,当然你也可以直接合并成一个,我这里方便演示拆开了。
有人要问了,为什么不合并写在一个server呢?首先,这当然可以写在一起,但是会有问题的,问题就是:合并写了,会导致http自动转换成https失效,就我目前的测试来看,会有好几种问题表现,比如是两个域名写在一起的,就会出现形如:https://www.xxxxxx.com&www.xxxxxx.com这种形式的url,然后报错找不到服务器地址;还有如果是域名带项目名如http://www.xxxxx.com/xxx的形式访问,就会转换成https:// _/xxx的样子。所以,还是直接分开写server,有几个域名配几个,当然最上面要单独写一个不写监听域名的如下图

如图,域名用逗号分开就行。
然后按需配置反向代理,这个就只能一个一个server写了。有几个写几个。有一点需要注意

如上图,443端口,必须写上对应的域名,不然请求会找不到对应的server。
前面已经给域名配置好了80端口,会自动转成https模式,这样就自动转到了默认的443端口,于是我们配的443端口监听就能捕捉到请求,然后根据监听域名匹配,执行相应的server,进而转到实际的端口地址,这就是此次配置多端口多域名的ssl的基本思路。而关于为什么使用127.0.0.1,是因为我在安全组关闭了3000和3003端口,这样做是为了防止会有人绕过nginx,直接以域名加端口或者ip加端口的方式访问服务。与此配合,在第一个server重要如下写,加上rewrite ^ /error.html;,至于这个页面,大家可以自己定义。而80端口后面的default_server,其他的server不要写。
关于规范使用域名访问,还有一些小技巧,比如不带www的域名访问,当然得保证两个域名指向ip是一致的例如www.xxxx.com和xxxx.com是指向同一地址的就可以,具体方法就是在域名解析里加上@,如下图

然后如下图配置

在return里补全www就行了,以此类推。另外,建议使用return 301的写法,这种方法是性能上最优的,因为rewrite指令有很多写法和规则,执行完所有正则匹配后,Nginx 才会知道这是一个301永久重定向。

关于关闭端口只开放80和443的具体详细说明,请各位移步:
[参考文档-防止绕过nginx直接访问tomcat]
https://www.geek-share.com/detail/2726121562.html

  • 点赞
  • 收藏
  • 分享
  • 文章举报
sad分别 发布了1 篇原创文章 · 获赞 0 · 访问量 27 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: