Skip to content

Commit 21b9c1f

Browse files
committed
Varnish in front of nginx
Changed `nginx -> varnish -> fuseki` to `varnish -> nginx -> fuseki` so that we don't rate limit cached responses
1 parent ee946e5 commit 21b9c1f

3 files changed

Lines changed: 35 additions & 28 deletions

File tree

config/system-varnish.trig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
sd:endpoint <http://fuseki-admin:3030/ds/> ;
3030
a:graphStore <http://fuseki-admin:3030/ds/> ;
3131
a:quadStore <http://fuseki-admin:3030/ds/> ;
32-
lapp:backendProxy <http://nginx-admin:8080/> .
32+
lapp:backendProxy <http://varnish-admin/> .
3333

3434
# root end-user
3535

@@ -48,4 +48,4 @@
4848
sd:endpoint <http://fuseki-end-user:3030/ds/> ;
4949
a:graphStore <http://fuseki-end-user:3030/ds/> ;
5050
a:quadStore <http://fuseki-end-user:3030/ds/> ;
51-
lapp:backendProxy <http://nginx-end-user:8080/> .
51+
lapp:backendProxy <http://varnish-end-user/> .

docker-compose.yml

Lines changed: 28 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -128,37 +128,16 @@ services:
128128
command: [ "-t", "86400" ] # time to live
129129
volumes:
130130
- ./platform/varnish-frontend.vcl.template:/etc/varnish/default.vcl.template:ro
131-
nginx-admin:
132-
image: nginx:1.23.3
133-
depends_on:
134-
- varnish-admin
135-
command: /bin/sh -c "cp /etc/nginx/nginx.conf.template /etc/nginx/nginx.conf && sed -i 's|$${UPSTREAM_SERVER}|'"$$UPSTREAM_SERVER"'|g' /etc/nginx/nginx.conf && sed -i 's|$${UPSTREAM_HTTP_PORT}|'"$$UPSTREAM_HTTP_PORT"'|g' /etc/nginx/nginx.conf && sed -i 's|$${SERVER_HTTP_PORT}|'"$$SERVER_HTTP_PORT"'|g' /etc/nginx/nginx.conf && nginx -g 'daemon off;'"
136-
environment:
137-
- UPSTREAM_SERVER=varnish-admin
138-
- UPSTREAM_HTTP_PORT=80
139-
- SERVER_HTTP_PORT=8080 # because of nginx-unprivileged
140-
volumes:
141-
- ./platform/nginx-backend.conf.template:/etc/nginx/nginx.conf.template:ro
142-
nginx-end-user:
143-
image: nginx:1.23.3
144-
depends_on:
145-
- varnish-end-user
146-
command: /bin/sh -c "cp /etc/nginx/nginx.conf.template /etc/nginx/nginx.conf && sed -i 's|$${UPSTREAM_SERVER}|'"$$UPSTREAM_SERVER"'|g' /etc/nginx/nginx.conf && sed -i 's|$${UPSTREAM_HTTP_PORT}|'"$$UPSTREAM_HTTP_PORT"'|g' /etc/nginx/nginx.conf && sed -i 's|$${SERVER_HTTP_PORT}|'"$$SERVER_HTTP_PORT"'|g' /etc/nginx/nginx.conf && nginx -g 'daemon off;'"
147-
environment:
148-
- UPSTREAM_SERVER=varnish-end-user
149-
- UPSTREAM_HTTP_PORT=80
150-
- SERVER_HTTP_PORT=8080 # because of nginx-unprivileged
151-
volumes:
152-
- ./platform/nginx-backend.conf.template:/etc/nginx/nginx.conf.template:ro
153131
varnish-admin:
154132
image: varnish:7.3.0
155133
user: root # otherwise the varnish user does not have permissions to the mounted folder which is owner by root
156134
depends_on:
157135
- linkeddatahub
136+
- nginx-admin
158137
tmpfs: /var/lib/varnish/varnishd:exec
159138
environment:
160-
- BACKEND_HOST=fuseki-admin
161-
- BACKEND_PORT=3030
139+
- BACKEND_HOST=nginx-admin
140+
- BACKEND_PORT=8080
162141
- CLIENT_HOST=linkeddatahub
163142
- VARNISH_SIZE=1G
164143
entrypoint: /bin/sh -c "cp /etc/varnish/default.vcl.template /etc/varnish/default.vcl && sed -i 's|$${BACKEND_HOST}|'"$$BACKEND_HOST"'|g' /etc/varnish/default.vcl && sed -i 's|$${BACKEND_PORT}|'"$$BACKEND_PORT"'|g' /etc/varnish/default.vcl && sed -i 's|$${CLIENT_HOST}|'"$$CLIENT_HOST"'|g' /etc/varnish/default.vcl && /usr/local/bin/docker-varnish-entrypoint \"$$0\" \"$$@\""
@@ -170,16 +149,39 @@ services:
170149
user: root # otherwise varnish user does not have permissions to the mounted folder which is owner by root
171150
depends_on:
172151
- linkeddatahub
152+
- nginx-end-user
173153
tmpfs: /var/lib/varnish/varnishd:exec
174154
environment:
175-
- BACKEND_HOST=fuseki-end-user
176-
- BACKEND_PORT=3030
155+
- BACKEND_HOST=nginx-end-user
156+
- BACKEND_PORT=8080
177157
- CLIENT_HOST=linkeddatahub
178158
- VARNISH_SIZE=1G
179159
entrypoint: /bin/sh -c "cp /etc/varnish/default.vcl.template /etc/varnish/default.vcl && sed -i 's|$${BACKEND_HOST}|'"$$BACKEND_HOST"'|g' /etc/varnish/default.vcl && sed -i 's|$${BACKEND_PORT}|'"$$BACKEND_PORT"'|g' /etc/varnish/default.vcl && sed -i 's|$${CLIENT_HOST}|'"$$CLIENT_HOST"'|g' /etc/varnish/default.vcl && /usr/local/bin/docker-varnish-entrypoint \"$$0\" \"$$@\""
180160
command: [ "-t", "86400", "-p", "timeout_idle=60s" ] # time to live
181161
volumes:
182162
- ./platform/varnish-backend.vcl.template:/etc/varnish/default.vcl.template:ro
163+
nginx-admin:
164+
image: nginx:1.23.3
165+
depends_on:
166+
- fuseki-admin
167+
command: /bin/sh -c "cp /etc/nginx/nginx.conf.template /etc/nginx/nginx.conf && sed -i 's|$${UPSTREAM_SERVER}|'"$$UPSTREAM_SERVER"'|g' /etc/nginx/nginx.conf && sed -i 's|$${UPSTREAM_HTTP_PORT}|'"$$UPSTREAM_HTTP_PORT"'|g' /etc/nginx/nginx.conf && sed -i 's|$${SERVER_HTTP_PORT}|'"$$SERVER_HTTP_PORT"'|g' /etc/nginx/nginx.conf && nginx -g 'daemon off;'"
168+
environment:
169+
- UPSTREAM_SERVER=fuseki-admin
170+
- UPSTREAM_HTTP_PORT=3030
171+
- SERVER_HTTP_PORT=8080 # because of nginx-unprivileged
172+
volumes:
173+
- ./platform/nginx-backend.conf.template:/etc/nginx/nginx.conf.template:ro
174+
nginx-end-user:
175+
image: nginx:1.23.3
176+
depends_on:
177+
- fuseki-end-user
178+
command: /bin/sh -c "cp /etc/nginx/nginx.conf.template /etc/nginx/nginx.conf && sed -i 's|$${UPSTREAM_SERVER}|'"$$UPSTREAM_SERVER"'|g' /etc/nginx/nginx.conf && sed -i 's|$${UPSTREAM_HTTP_PORT}|'"$$UPSTREAM_HTTP_PORT"'|g' /etc/nginx/nginx.conf && sed -i 's|$${SERVER_HTTP_PORT}|'"$$SERVER_HTTP_PORT"'|g' /etc/nginx/nginx.conf && nginx -g 'daemon off;'"
179+
environment:
180+
- UPSTREAM_SERVER=fuseki-end-user
181+
- UPSTREAM_HTTP_PORT=3030
182+
- SERVER_HTTP_PORT=8080 # because of nginx-unprivileged
183+
volumes:
184+
- ./platform/nginx-backend.conf.template:/etc/nginx/nginx.conf.template:ro
183185
email-server:
184186
image: namshi/smtp
185187
environment:

platform/varnish-backend.vcl.template

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,11 @@ sub vcl_recv {
5454
}
5555

5656
sub vcl_backend_response {
57+
if (beresp.status == 429) {
58+
set beresp.uncacheable = true;
59+
return (deliver);
60+
}
61+
5762
/* purge URLs after updates */
5863
if ((beresp.status == 200 || beresp.status == 201 || beresp.status == 204) && bereq.method ~ "POST|PUT|DELETE|PATCH") {
5964
set beresp.http.X-LinkedDataHub = "Banned";

0 commit comments

Comments
 (0)