1
0
Fork 0
mirror of https://github.com/retspen/webvirtcloud synced 2026-11-08 11:16:47 +00:00
webvirtcloud/conf/nginx/webvirtcloud.conf
catborise bb490101fd fix(nginx): a request body is at most 64 MiB
Every route accepted a 1 GiB body, and nginx buffers a body to disk
before the panel can refuse it: anyone, without an account, could fill
that disk with large requests sent slowly and never finished. The one
large body is an ISO upload's chunk, 32 MiB (storage_page.js); the limit
is now 64 MiB.

Checked with nginx and this config: 33 and 64 MiB pass to the panel,
65 MiB is answered 413.
2026-11-06 19:50:20 +03:00

64 lines
2.2 KiB
Text

# "https" from a TLS-terminating proxy in front of this nginx is kept; otherwise
# the scheme of this server is used. A client claiming https over plain HTTP
# only changes how its own request is handled (no redirect, secure cookies).
map $http_x_forwarded_proto $wvc_forwarded_proto {
default $scheme;
https https;
}
server {
listen 80;
#server_name webvirtcloud.example.com;
#access_log /var/log/nginx/webvirtcloud-access_log;
location /static/ {
alias /srv/webvirtcloud/staticfiles/;
# URLs carry no version: browsers revalidate (304 if unchanged), so an
# update or a theme change shows on the next load
expires -1;
}
location / {
proxy_pass http://127.0.0.1:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $wvc_forwarded_proto;
proxy_set_header X-Request-ID $request_id;
proxy_connect_timeout 1800;
proxy_read_timeout 1800;
proxy_send_timeout 1800;
# an ISO upload sends 32 MiB chunks; nothing else is large. nginx
# buffers a body to disk before the panel sees it: a bigger limit
# lets anyone fill that disk with unfinished requests
client_max_body_size 64M;
}
location /novncd/ {
proxy_pass http://wsnovncd;
proxy_http_version 1.1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# Serial console (socketiod); it refuses connections while
# SERIAL_CONSOLE_ENABLED is off. Host and the scheme go on for its
# same-origin check.
location /socket.io/ {
proxy_pass http://wssocketiod;
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-Proto $wvc_forwarded_proto;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 1h;
}
}
upstream wsnovncd {
server 127.0.0.1:6080;
}
upstream wssocketiod {
server 127.0.0.1:6081;
}