fix: proxy url query unescape issue #377

This commit is contained in:
Jacky 2024-05-08 19:00:32 +08:00
parent d6d7cdbb1f
commit 931f7a8737
No known key found for this signature in database
GPG key ID: 215C21B10DF38B4D
6 changed files with 18 additions and 13 deletions

View file

@ -132,7 +132,7 @@ Para más información: [debian/conf/nginx.conf](https://salsa.debian.org/nginx-
La UI de Nginx está disponible en las siguientes plataformas: La UI de Nginx está disponible en las siguientes plataformas:
- Mac OS X 10.10 Yosemite y posterior (amd64 / arm64) - macOS 11 Big Sur y posterior (amd64 / arm64)
- Linux 2.6.23 and later (x86 / amd64 / arm64 / armv5 / armv6 / armv7) - Linux 2.6.23 and later (x86 / amd64 / arm64 / armv5 / armv6 / armv7)
- Incluyendo pero no limitado a Debian 7 / 8, Ubuntu 12.04 / 14.04 and later, CentOS 6 / 7, Arch Linux - Incluyendo pero no limitado a Debian 7 / 8, Ubuntu 12.04 / 14.04 and later, CentOS 6 / 7, Arch Linux
- FreeBSD - FreeBSD

View file

@ -146,7 +146,7 @@ http {
Giao diện người dùng Nginx có sẵn trên các nền tảng sau: Giao diện người dùng Nginx có sẵn trên các nền tảng sau:
- Mac OS X 10.10 Yosemite and later (amd64 / arm64) - macOS 11 Big Sur and later (amd64 / arm64)
- Linux 2.6.23 and later (x86 / amd64 / arm64 / armv5 / armv6 / armv7) - Linux 2.6.23 and later (x86 / amd64 / arm64 / armv5 / armv6 / armv7)
- Bao gồm nhưng không giới hạn Debian 7/8, Ubuntu 12.04/14.04 trở lên, CentOS 6/7, Arch Linux - Bao gồm nhưng không giới hạn Debian 7/8, Ubuntu 12.04/14.04 trở lên, CentOS 6/7, Arch Linux
- FreeBSD - FreeBSD

View file

@ -125,7 +125,7 @@ http {
Nginx UI 可在以下平台中使用: Nginx UI 可在以下平台中使用:
- Mac OS X 10.10 Yosemite 及之后版本amd64 / arm64 - macOS 11 Big Sur 及之后版本amd64 / arm64
- Linux 2.6.23 及之后版本x86 / amd64 / arm64 / armv5 / armv6 / armv7 - Linux 2.6.23 及之后版本x86 / amd64 / arm64 / armv5 / armv6 / armv7
- 包括但不限于 Debian 7 / 8、Ubuntu 12.04 / 14.04 及后续版本、CentOS 6 / 7、Arch Linux - 包括但不限于 Debian 7 / 8、Ubuntu 12.04 / 14.04 及后续版本、CentOS 6 / 7、Arch Linux
- FreeBSD - FreeBSD

View file

@ -128,7 +128,7 @@ http {
Nginx UI 可在以下作業系統中使用: Nginx UI 可在以下作業系統中使用:
- Mac OS X 10.10 Yosemite 及之後版本amd64 / arm64 - macOS 11 Big Sur 及之後版本amd64 / arm64
- Linux 2.6.23 及之後版本x86 / amd64 / arm64 / armv5 / armv6 / armv7 - Linux 2.6.23 及之後版本x86 / amd64 / arm64 / armv5 / armv6 / armv7
- 包括但不限於 Debian 7 / 8、Ubuntu 12.04 / 14.04 及後續版本、CentOS 6 / 7、Arch Linux - 包括但不限於 Debian 7 / 8、Ubuntu 12.04 / 14.04 及後續版本、CentOS 6 / 7、Arch Linux
- FreeBSD - FreeBSD

View file

@ -140,7 +140,7 @@ For more information: [debian/conf/nginx.conf](https://salsa.debian.org/nginx-te
Nginx UI is available on the following platforms: Nginx UI is available on the following platforms:
- Mac OS X 10.10 Yosemite and later (amd64 / arm64) - macOS 11 Big Sur and later (amd64 / arm64)
- Linux 2.6.23 and later (x86 / amd64 / arm64 / armv5 / armv6 / armv7) - Linux 2.6.23 and later (x86 / amd64 / arm64 / armv5 / armv6 / armv7)
- Including but not limited to Debian 7 / 8, Ubuntu 12.04 / 14.04 and later, CentOS 6 / 7, Arch Linux - Including but not limited to Debian 7 / 8, Ubuntu 12.04 / 14.04 and later, CentOS 6 / 7, Arch Linux
- FreeBSD - FreeBSD

View file

@ -27,8 +27,8 @@ func proxy() gin.HandlerFunc {
defer c.Abort() defer c.Abort()
env := query.Environment env := query.Environment
environment, err := env.Where(env.ID.Eq(id)).First()
environment, err := env.Where(env.ID.Eq(id)).First()
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
c.AbortWithStatusJSON(http.StatusServiceUnavailable, gin.H{ c.AbortWithStatusJSON(http.StatusServiceUnavailable, gin.H{
@ -37,8 +37,7 @@ func proxy() gin.HandlerFunc {
return return
} }
u, err := url.JoinPath(environment.URL, c.Request.RequestURI) baseUrl, err := url.Parse(environment.URL)
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{ c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{
@ -47,8 +46,7 @@ func proxy() gin.HandlerFunc {
return return
} }
decodedUri, err := url.QueryUnescape(u) proxyUrl, err := baseUrl.Parse(c.Request.RequestURI)
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{ c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{
@ -57,18 +55,25 @@ func proxy() gin.HandlerFunc {
return return
} }
logger.Debug("Proxy request", decodedUri) logger.Debug("Proxy request", proxyUrl.String())
client := http.Client{ client := http.Client{
Transport: &http.Transport{ Transport: &http.Transport{
TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
}, },
} }
req, err := http.NewRequest(c.Request.Method, decodedUri, c.Request.Body) req, err := http.NewRequest(c.Request.Method, proxyUrl.String(), c.Request.Body)
if err != nil {
logger.Error(err)
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{
"message": err.Error(),
})
return
}
req.Header.Set("X-Node-Secret", environment.Token) req.Header.Set("X-Node-Secret", environment.Token)
resp, err := client.Do(req) resp, err := client.Do(req)
if err != nil { if err != nil {
logger.Error(err) logger.Error(err)
c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{ c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{