code: func (c *Config) ParseProxyHost(proxyHost string) error {
  	host, port, err := net.SplitHostPort(proxyHost)
  	if err != nil {
  		host = proxyHost
  		port = ""
  	}
  
  	// Split on comma.
  	parts := strings.Split(port, ",")
  
  	switch {
  	// Default ports for both the SSH and Web proxy.
  	case len(parts) == 0:
  		c.WebProxyAddr = net.JoinHostPort(host, strconv.Itoa(defaults.HTTPListenPort))
  		c.SSHProxyAddr = net.JoinHostPort(host, strconv.Itoa(defaults.SSHProxyListenPort))
  	// User defined HTTP proxy port, default SSH proxy port.
  	case len(parts) == 1:
  		webPort := parts[0]
  		if webPort == "" {
  			webPort = strconv.Itoa(defaults.HTTPListenPort)
  		}
  		c.WebProxyAddr = net.JoinHostPort(host, webPort)
  		c.SSHProxyAddr = net.JoinHostPort(host, strconv.Itoa(defaults.SSHProxyListenPort))
  	// User defined HTTP and SSH proxy ports.
  	case len(parts) == 2:
  		webPort := parts[0]
  		if webPort == "" {
  			webPort = strconv.Itoa(defaults.HTTPListenPort)
  		}
  		sshPort := parts[1]
  		if sshPort == "" {
  			sshPort = strconv.Itoa(defaults.SSHProxyListenPort)
  		}
  		c.WebProxyAddr = net.JoinHostPort(host, webPort)
  		c.SSHProxyAddr = net.JoinHostPort(host, sshPort)
  	default:
  		return trace.BadParameter("unable to parse port: %v", port)
  	}
  
  	return nil
  }
docs: // ParseProxyHost parses the proxyHost string and updates the config.
  //
  // Format of proxyHost string:
  //   proxy_web_addr:<proxy_web_port>,<proxy_ssh_port>