一、前言
很多时候我们都会在同一个服务器上部署多个项目,我们有多个域名的情况下,怎么样使不同的域名都通过80端口来访问呢?打个比方说,现在有2个域名,分别是:tessai.cn 和 admin.tessai.cn 。tessai.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。建站不易,大家可以互踩哦,如果有需要博主互联的可以给博主留言。