|
@ -7,30 +7,26 @@ import ( |
|
|
"fmt" |
|
|
"fmt" |
|
|
"io/ioutil" |
|
|
"io/ioutil" |
|
|
"net" |
|
|
"net" |
|
|
"net/http" |
|
|
|
|
|
"os" |
|
|
"os" |
|
|
"runtime" |
|
|
"runtime" |
|
|
"strings" |
|
|
"strings" |
|
|
"time" |
|
|
"time" |
|
|
|
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/util/version" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/s3api/s3err" |
|
|
|
|
|
|
|
|
"github.com/gorilla/mux" |
|
|
"google.golang.org/grpc/credentials/tls/certprovider" |
|
|
"google.golang.org/grpc/credentials/tls/certprovider" |
|
|
"google.golang.org/grpc/credentials/tls/certprovider/pemfile" |
|
|
"google.golang.org/grpc/credentials/tls/certprovider/pemfile" |
|
|
"google.golang.org/grpc/reflection" |
|
|
"google.golang.org/grpc/reflection" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/glog" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/filer_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/s3_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/pb/s3_pb" |
|
|
"github.com/seaweedfs/seaweedfs/weed/security" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/gorilla/mux" |
|
|
|
|
|
|
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/glog" |
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/s3api" |
|
|
"github.com/seaweedfs/seaweedfs/weed/s3api" |
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/s3api/s3err" |
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/security" |
|
|
stats_collect "github.com/seaweedfs/seaweedfs/weed/stats" |
|
|
stats_collect "github.com/seaweedfs/seaweedfs/weed/stats" |
|
|
"github.com/seaweedfs/seaweedfs/weed/util" |
|
|
"github.com/seaweedfs/seaweedfs/weed/util" |
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/util/version" |
|
|
) |
|
|
) |
|
|
|
|
|
|
|
|
var ( |
|
|
var ( |
|
@ -251,8 +247,6 @@ func (s3opt *S3Options) startS3Server() bool { |
|
|
glog.Fatalf("S3 API Server startup error: %v", s3ApiServer_err) |
|
|
glog.Fatalf("S3 API Server startup error: %v", s3ApiServer_err) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
httpS := &http.Server{Handler: router} |
|
|
|
|
|
|
|
|
|
|
|
if *s3opt.portGrpc == 0 { |
|
|
if *s3opt.portGrpc == 0 { |
|
|
*s3opt.portGrpc = 10000 + *s3opt.port |
|
|
*s3opt.portGrpc = 10000 + *s3opt.port |
|
|
} |
|
|
} |
|
@ -274,7 +268,7 @@ func (s3opt *S3Options) startS3Server() bool { |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
glog.Fatalf("Failed to listen on %s: %v", localSocket, err) |
|
|
glog.Fatalf("Failed to listen on %s: %v", localSocket, err) |
|
|
} |
|
|
} |
|
|
httpS.Serve(s3SocketListener) |
|
|
|
|
|
|
|
|
newHttpServer(router, nil).Serve(s3SocketListener) |
|
|
}() |
|
|
}() |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
@ -331,12 +325,12 @@ func (s3opt *S3Options) startS3Server() bool { |
|
|
clientAuth = tls.RequireAndVerifyClientCert |
|
|
clientAuth = tls.RequireAndVerifyClientCert |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
httpS.TLSConfig = &tls.Config{ |
|
|
|
|
|
|
|
|
tlsConfig := &tls.Config{ |
|
|
GetCertificate: s3opt.GetCertificateWithUpdate, |
|
|
GetCertificate: s3opt.GetCertificateWithUpdate, |
|
|
ClientAuth: clientAuth, |
|
|
ClientAuth: clientAuth, |
|
|
ClientCAs: caCertPool, |
|
|
ClientCAs: caCertPool, |
|
|
} |
|
|
} |
|
|
err = security.FixTlsConfig(util.GetViper(), httpS.TLSConfig) |
|
|
|
|
|
|
|
|
err = security.FixTlsConfig(util.GetViper(), tlsConfig) |
|
|
if err != nil { |
|
|
if err != nil { |
|
|
glog.Fatalf("error with tls config: %v", err) |
|
|
glog.Fatalf("error with tls config: %v", err) |
|
|
} |
|
|
} |
|
@ -344,12 +338,12 @@ func (s3opt *S3Options) startS3Server() bool { |
|
|
glog.V(0).Infof("Start Seaweed S3 API Server %s at https port %d", version.Version(), *s3opt.port) |
|
|
glog.V(0).Infof("Start Seaweed S3 API Server %s at https port %d", version.Version(), *s3opt.port) |
|
|
if s3ApiLocalListener != nil { |
|
|
if s3ApiLocalListener != nil { |
|
|
go func() { |
|
|
go func() { |
|
|
if err = httpS.ServeTLS(s3ApiLocalListener, "", ""); err != nil { |
|
|
|
|
|
|
|
|
if err = newHttpServer(router, tlsConfig).ServeTLS(s3ApiLocalListener, "", ""); err != nil { |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
} |
|
|
} |
|
|
}() |
|
|
}() |
|
|
} |
|
|
} |
|
|
if err = httpS.ServeTLS(s3ApiListener, "", ""); err != nil { |
|
|
|
|
|
|
|
|
if err = newHttpServer(router, tlsConfig).ServeTLS(s3ApiListener, "", ""); err != nil { |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
} |
|
|
} |
|
|
} else { |
|
|
} else { |
|
@ -358,13 +352,13 @@ func (s3opt *S3Options) startS3Server() bool { |
|
|
*s3opt.bindIp, *s3opt.portHttps, time.Duration(*s3opt.idleTimeout)*time.Second) |
|
|
*s3opt.bindIp, *s3opt.portHttps, time.Duration(*s3opt.idleTimeout)*time.Second) |
|
|
if s3ApiLocalListenerHttps != nil { |
|
|
if s3ApiLocalListenerHttps != nil { |
|
|
go func() { |
|
|
go func() { |
|
|
if err = httpS.ServeTLS(s3ApiLocalListenerHttps, "", ""); err != nil { |
|
|
|
|
|
|
|
|
if err = newHttpServer(router, tlsConfig).ServeTLS(s3ApiLocalListenerHttps, "", ""); err != nil { |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
} |
|
|
} |
|
|
}() |
|
|
}() |
|
|
} |
|
|
} |
|
|
go func() { |
|
|
go func() { |
|
|
if err = httpS.ServeTLS(s3ApiListenerHttps, "", ""); err != nil { |
|
|
|
|
|
|
|
|
if err = newHttpServer(router, tlsConfig).ServeTLS(s3ApiListenerHttps, "", ""); err != nil { |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
} |
|
|
} |
|
|
}() |
|
|
}() |
|
@ -374,12 +368,12 @@ func (s3opt *S3Options) startS3Server() bool { |
|
|
glog.V(0).Infof("Start Seaweed S3 API Server %s at http port %d", version.Version(), *s3opt.port) |
|
|
glog.V(0).Infof("Start Seaweed S3 API Server %s at http port %d", version.Version(), *s3opt.port) |
|
|
if s3ApiLocalListener != nil { |
|
|
if s3ApiLocalListener != nil { |
|
|
go func() { |
|
|
go func() { |
|
|
if err = httpS.Serve(s3ApiLocalListener); err != nil { |
|
|
|
|
|
|
|
|
if err = newHttpServer(router, nil).Serve(s3ApiLocalListener); err != nil { |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
} |
|
|
} |
|
|
}() |
|
|
}() |
|
|
} |
|
|
} |
|
|
if err = httpS.Serve(s3ApiListener); err != nil { |
|
|
|
|
|
|
|
|
if err = newHttpServer(router, nil).Serve(s3ApiListener); err != nil { |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
glog.Fatalf("S3 API Server Fail to serve: %v", err) |
|
|
} |
|
|
} |
|
|
} |
|
|
} |
|
|