原创

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。建站不易,大家可以互踩哦,如果有需要博主互联的可以给博主留言。

正文到此结束
本文目录