Просмотр исходного кода

feat: support redirecting frontend url now (close #89)

JustSong 2 лет назад
Родитель
Сommit
3c6834a79c
3 измененных файлов с 16 добавлено и 2 удалено
  1. 2 0
      README.md
  2. 13 1
      router/main.go
  3. 1 1
      router/web-router.go

+ 2 - 0
README.md

@@ -157,6 +157,8 @@ sudo service nginx restart
    + 例子:`SESSION_SECRET=random_string`
 3. `SQL_DSN`:设置之后将使用指定数据库而非 SQLite。
    + 例子:`SQL_DSN=root:123456@tcp(localhost:3306)/one-api`
+4. `FRONTEND_BASE_URL`:设置之后将使用指定的前端地址,而非后端地址。
+   + 例子:`FRONTEND_BASE_URL=https://openai.justsong.cn`
 
 ### 命令行参数
 1. `--port <port_number>`: 指定服务器监听的端口号,默认为 `3000`。

+ 13 - 1
router/main.go

@@ -2,12 +2,24 @@ package router
 
 import (
 	"embed"
+	"fmt"
 	"github.com/gin-gonic/gin"
+	"net/http"
+	"os"
+	"strings"
 )
 
 func SetRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) {
 	SetApiRouter(router)
 	SetDashboardRouter(router)
 	SetRelayRouter(router)
-	setWebRouter(router, buildFS, indexPage)
+	frontendBaseUrl := os.Getenv("FRONTEND_BASE_URL")
+	if frontendBaseUrl == "" {
+		SetWebRouter(router, buildFS, indexPage)
+	} else {
+		frontendBaseUrl = strings.TrimSuffix(frontendBaseUrl, "/")
+		router.NoRoute(func(c *gin.Context) {
+			c.Redirect(http.StatusMovedPermanently, fmt.Sprintf("%s%s", frontendBaseUrl, c.Request.RequestURI))
+		})
+	}
 }

+ 1 - 1
router/web-router.go

@@ -10,7 +10,7 @@ import (
 	"one-api/middleware"
 )
 
-func setWebRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) {
+func SetWebRouter(router *gin.Engine, buildFS embed.FS, indexPage []byte) {
 	router.Use(gzip.Gzip(gzip.DefaultCompression))
 	router.Use(middleware.GlobalWebRateLimit())
 	router.Use(middleware.Cache())