Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
caddy
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
caddy
Commits
4790dacb
Commit
4790dacb
authored
9 years ago
by
Viacheslav Biriukov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
add without to proxy middleware
parent
4852f058
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
16 additions
and
4 deletions
+16
-4
middleware/proxy/proxy.go
middleware/proxy/proxy.go
+2
-1
middleware/proxy/reverseproxy.go
middleware/proxy/reverseproxy.go
+6
-1
middleware/proxy/upstream.go
middleware/proxy/upstream.go
+8
-2
No files found.
middleware/proxy/proxy.go
View file @
4790dacb
...
...
@@ -42,6 +42,7 @@ type UpstreamHost struct {
Unhealthy
bool
ExtraHeaders
http
.
Header
CheckDown
UpstreamHostDownFunc
Without
string
}
// Down checks whether the upstream host is down or not.
...
...
@@ -77,7 +78,7 @@ func (p Proxy) ServeHTTP(w http.ResponseWriter, r *http.Request) (int, error) {
if
baseURL
,
err
:=
url
.
Parse
(
host
.
Name
);
err
==
nil
{
r
.
Host
=
baseURL
.
Host
if
proxy
==
nil
{
proxy
=
NewSingleHostReverseProxy
(
baseURL
)
proxy
=
NewSingleHostReverseProxy
(
baseURL
,
host
.
Without
)
}
}
else
if
proxy
==
nil
{
return
http
.
StatusInternalServerError
,
err
...
...
This diff is collapsed.
Click to expand it.
middleware/proxy/reverseproxy.go
View file @
4790dacb
...
...
@@ -62,7 +62,9 @@ func singleJoiningSlash(a, b string) string {
// URLs to the scheme, host, and base path provided in target. If the
// target's path is "/base" and the incoming request was for "/dir",
// the target request will be for /base/dir.
func
NewSingleHostReverseProxy
(
target
*
url
.
URL
)
*
ReverseProxy
{
// Without logic: target's path is "/", incoming is "/api/messages",
// without is "/api", then the target request will be for /messages.
func
NewSingleHostReverseProxy
(
target
*
url
.
URL
,
without
string
)
*
ReverseProxy
{
targetQuery
:=
target
.
RawQuery
director
:=
func
(
req
*
http
.
Request
)
{
req
.
URL
.
Scheme
=
target
.
Scheme
...
...
@@ -73,6 +75,9 @@ func NewSingleHostReverseProxy(target *url.URL) *ReverseProxy {
}
else
{
req
.
URL
.
RawQuery
=
targetQuery
+
"&"
+
req
.
URL
.
RawQuery
}
if
without
!=
""
{
req
.
URL
.
Path
=
strings
.
Replace
(
req
.
URL
.
Path
,
without
,
""
,
1
)
}
}
return
&
ReverseProxy
{
Director
:
director
}
}
...
...
This diff is collapsed.
Click to expand it.
middleware/proxy/upstream.go
View file @
4790dacb
...
...
@@ -28,13 +28,13 @@ type staticUpstream struct {
Path
string
Interval
time
.
Duration
}
Without
string
}
// NewStaticUpstreams parses the configuration input and sets up
// static upstreams for the proxy middleware.
func
NewStaticUpstreams
(
c
parse
.
Dispenser
)
([]
Upstream
,
error
)
{
var
upstreams
[]
Upstream
for
c
.
Next
()
{
upstream
:=
&
staticUpstream
{
from
:
""
,
...
...
@@ -104,6 +104,11 @@ func NewStaticUpstreams(c parse.Dispenser) ([]Upstream, error) {
case
"websocket"
:
proxyHeaders
.
Add
(
"Connection"
,
"{>Connection}"
)
proxyHeaders
.
Add
(
"Upgrade"
,
"{>Upgrade}"
)
case
"without"
:
if
!
c
.
NextArg
()
{
return
upstreams
,
c
.
ArgErr
()
}
upstream
.
Without
=
c
.
Val
()
}
}
...
...
@@ -131,9 +136,10 @@ func NewStaticUpstreams(c parse.Dispenser) ([]Upstream, error) {
return
false
}
}(
upstream
),
Without
:
upstream
.
Without
,
}
if
baseURL
,
err
:=
url
.
Parse
(
uh
.
Name
);
err
==
nil
{
uh
.
ReverseProxy
=
NewSingleHostReverseProxy
(
baseURL
)
uh
.
ReverseProxy
=
NewSingleHostReverseProxy
(
baseURL
,
uh
.
Without
)
}
else
{
return
upstreams
,
err
}
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment