Nginx配置多个域名指向不同的端口


一、前言

很多时候我们都会在同一个服务器上部署多个项目,我们有多个域名的情况下,怎么样使不同的域名都通过80端口来访问呢?打个比方说,现在有2个域名,分别是:tessai.cn 和 admin.tessai.cntessai.cn 访问可以访问到一个web地址,admin.tessai.cn 可以访问到后台管理的项目。这个如果监听不同的端口来实现,肯定是很方便的,比如说一个使用 8080 端口,一个使用 80 端口,然后再使用 nginx 监听不同的端口就行了。但是这样不是我们想要的效果呀。谁访问网站喜欢使用域名加端口来访问呢。这篇博客主要是记录一下怎么使用 nginx 监听同一个端口,访问不同的服务,顺便记录一下 Java 后台怎么获取到访问的 IP。

二、正文

1、nginx 中配置如下

http {    

    ...

    server {
        listen       80;
	    proxy_set_header  X-Real-IP  $remote_addr; #记录远程访问ip,方便应用中获取 server_name tessai.cn; location / { proxy_pass http://127.0.0.1:8080; #将域名为tessai.cn的请求分发到本地8080端口的服务 } } server { listen 80; proxy_set_header X-Real-IP $remote_addr; #记录远程访问ip,方便应用中获取 server_name admin.tessai.cn; location / { proxy_pass http://127.0.0.1:8081; #将域名为admin.tessai.cn的请求分发到本地8081端口的服务 } } } 

2、由于使用了nginx作为代理,在后台应用服务中直接采用request.getRemoteAddr(),无法获取到请求所处的真实ip,需要通过下面的代码获取:

private String getIpAddr(HttpServletRequest request) { String ip = request.getHeader("X-Real-IP"); if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("x-forwarded-for"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getHeader("WL-Proxy-Client-IP"); } if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; } 

三、结尾

本文到此结束,如果想看更多精彩好文,福利图片,可移步:http://wjhsmart.vip。建站不易,大家可以互踩哦,如果有需要博主互联的可以给博主留言。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM