20251209
This commit is contained in:
62
archive/file-server/main.go
Normal file
62
archive/file-server/main.go
Normal file
@@ -0,0 +1,62 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func main() {
|
||||
// 硬编码目录配置
|
||||
dirs := map[string]string{
|
||||
"/bbs": "/files/bbs/www/bbs", // 修改右侧路径
|
||||
"/active": "/files/active/www/active", // 添加新条目
|
||||
}
|
||||
|
||||
port := 8080 // 固定端口
|
||||
mux := http.NewServeMux()
|
||||
|
||||
// 注册所有目录路由
|
||||
for prefix, path := range dirs {
|
||||
absPath, err := filepath.Abs(path)
|
||||
if err != nil {
|
||||
log.Fatalf("目录[%s]解析失败: %v", path, err)
|
||||
}
|
||||
|
||||
if err := os.MkdirAll(absPath, 0755); err != nil {
|
||||
log.Fatalf("创建目录[%s]失败: %v", absPath, err)
|
||||
}
|
||||
|
||||
fileServer := secureFileServer(http.Dir(absPath))
|
||||
mux.Handle(prefix+"/", http.StripPrefix(prefix, fileServer))
|
||||
log.Printf("已挂载目录: %s => %s", prefix, absPath)
|
||||
}
|
||||
|
||||
// 启动服务器
|
||||
serverAddr := fmt.Sprintf(":%d", port)
|
||||
log.Printf("文件服务器启动在 http://localhost%s", serverAddr)
|
||||
|
||||
if err := http.ListenAndServe(serverAddr, mux); err != nil {
|
||||
log.Fatalf("服务器启动失败: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// 安全检查中间件
|
||||
func secureFileServer(root http.FileSystem) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if strings.Contains(r.URL.Path, "..") {
|
||||
http.Error(w, "无效的路径", http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
w.Header().Set("X-Content-Type-Options", "nosniff")
|
||||
w.Header().Set("X-Frame-Options", "DENY")
|
||||
w.Header().Set("X-XSS-Protection", "1; mode=block")
|
||||
|
||||
http.FileServer(root).ServeHTTP(w, r)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user