vhost: check host and location for url router

This commit is contained in:
fatedier 2016-12-27 01:01:39 +08:00
parent 8bf61d5e39
commit 04a4591caa
3 changed files with 27 additions and 3 deletions

View File

@ -271,6 +271,8 @@ func (p *ProxyServer) Start(c *conn.Conn) (err error) {
func (p *ProxyServer) Close() { func (p *ProxyServer) Close() {
p.Lock() p.Lock()
defer p.Unlock()
if p.Status != consts.Closed { if p.Status != consts.Closed {
p.Status = consts.Closed p.Status = consts.Closed
for _, l := range p.listeners { for _, l := range p.listeners {
@ -298,7 +300,6 @@ func (p *ProxyServer) Close() {
if p.PrivilegeMode { if p.PrivilegeMode {
DeleteProxy(p.Name) DeleteProxy(p.Name)
} }
p.Unlock()
} }
func (p *ProxyServer) WaitUserConn() (closeFlag bool) { func (p *ProxyServer) WaitUserConn() (closeFlag bool) {

View File

@ -82,6 +82,24 @@ func (r *VhostRouters) Get(host, path string) (vr *VhostRouter, exist bool) {
return return
} }
func (r *VhostRouters) Exist(host, path string) (vr *VhostRouter, exist bool) {
r.mutex.RLock()
defer r.mutex.RUnlock()
vrs, found := r.RouterByDomain[host]
if !found {
return
}
for _, vr = range vrs {
if path == vr.location {
return vr, true
}
}
return
}
// sort by location // sort by location
type ByLocation []*VhostRouter type ByLocation []*VhostRouter

View File

@ -56,6 +56,11 @@ func (v *VhostMuxer) Listen(name, location, rewriteHost, userName, passWord stri
v.mutex.Lock() v.mutex.Lock()
defer v.mutex.Unlock() defer v.mutex.Unlock()
_, ok := v.registryRouter.Exist(name, location)
if ok {
return nil, fmt.Errorf("hostname [%s] location [%s] is already registered", name, location)
}
l = &Listener{ l = &Listener{
name: name, name: name,
rewriteHost: rewriteHost, rewriteHost: rewriteHost,