diff --git a/src/main/java/com/ctrip/zeus/service/build/conf/LocationConf.java b/src/main/java/com/ctrip/zeus/service/build/conf/LocationConf.java index 94227466..c6c21dab 100644 --- a/src/main/java/com/ctrip/zeus/service/build/conf/LocationConf.java +++ b/src/main/java/com/ctrip/zeus/service/build/conf/LocationConf.java @@ -334,4 +334,11 @@ public class LocationConf { confWriter.writeLine("return 404 \"Not Found!\";"); confWriter.writeLocationEnd(); } + + public void writeDefaultRootLocation(ConfWriter confWriter) { + confWriter.writeLocationStart("/"); + confWriter.writeCommand("error_page", "404 /404page"); + confWriter.writeCommand("return", "404"); + confWriter.writeLocationEnd(); + } } diff --git a/src/main/java/com/ctrip/zeus/service/build/conf/ServerConf.java b/src/main/java/com/ctrip/zeus/service/build/conf/ServerConf.java index 1e94a316..bd39dfa5 100644 --- a/src/main/java/com/ctrip/zeus/service/build/conf/ServerConf.java +++ b/src/main/java/com/ctrip/zeus/service/build/conf/ServerConf.java @@ -1,10 +1,7 @@ package com.ctrip.zeus.service.build.conf; import com.ctrip.zeus.exceptions.ValidationException; -import com.ctrip.zeus.model.entity.Domain; -import com.ctrip.zeus.model.entity.Group; -import com.ctrip.zeus.model.entity.Slb; -import com.ctrip.zeus.model.entity.VirtualServer; +import com.ctrip.zeus.model.entity.*; import com.ctrip.zeus.service.build.ConfigHandler; import com.ctrip.zeus.util.AssertUtils; import org.springframework.stereotype.Component; @@ -91,6 +88,8 @@ public class ServerConf { } } + addDefaultRootLoaction(slbId, vsId, groups, confWriter); + confWriter.writeServerEnd(); return confWriter.getValue(); } @@ -205,4 +204,23 @@ public class ServerConf { } return result; } + + private void addDefaultRootLoaction(Long slbId, Long vsId, List groups, ConfWriter confWriter) throws Exception { + // 0. enable flag + if (!configHandler.getEnable("default.root.location", slbId, vsId, null, false)) { + return; + } + // 1. return while already have root location . + for (Group group : groups) { + for (GroupVirtualServer gvs : group.getGroupVirtualServers()) { + if (gvs.getVirtualServer().getId().equals(vsId)) { + if (gvs.getPath().trim().equals("/") || gvs.getPath().trim().equals("~* ^/")) { + return; + } + } + } + } + // 2. add default location instead while not found root location. + locationConf.writeDefaultRootLocation(confWriter); + } }