summaryrefslogtreecommitdiff
path: root/kvmd/configs/nginx/nginx.conf
diff options
context:
space:
mode:
Diffstat (limited to 'kvmd/configs/nginx/nginx.conf')
-rw-r--r--kvmd/configs/nginx/nginx.conf123
1 files changed, 123 insertions, 0 deletions
diff --git a/kvmd/configs/nginx/nginx.conf b/kvmd/configs/nginx/nginx.conf
new file mode 100644
index 00000000..05a11bcc
--- /dev/null
+++ b/kvmd/configs/nginx/nginx.conf
@@ -0,0 +1,123 @@
+load_module /usr/lib/nginx/modules/ngx_http_lua_module.so;
+
+user http;
+worker_processes 4;
+
+# error_log /tmp/nginx.error.log;
+error_log /dev/null crit;
+
+events {
+ worker_connections 1024;
+ use epoll;
+}
+
+http {
+ access_log off;
+
+ include /etc/nginx/mime-types.conf;
+ default_type application/octet-stream;
+ charset utf-8;
+
+ sendfile on;
+ keepalive_timeout 10;
+
+ client_body_temp_path /tmp/nginx.client_body_temp;
+ fastcgi_temp_path /tmp/nginx.fastcgi_temp;
+ proxy_temp_path /tmp/nginx.proxy_temp;
+ scgi_temp_path /tmp/nginx.scgi_temp;
+ uwsgi_temp_path /tmp/nginx.uwsgi_temp;
+
+ upstream kvmd {
+ server localhost:8081 fail_timeout=0s max_fails=0;
+ }
+
+ upstream mjpg_streamer {
+ server localhost:8082 fail_timeout=0s max_fails=0;
+ }
+
+#PROD server {
+#PROD listen 80;
+#PROD server_name localhost;
+#PROD return 301 https://$host$request_uri;
+#PROD }
+
+#PROD lua_shared_dict WS_TOKENS 10m;
+#PROD init_by_lua_block {
+#PROD WS_TOKEN_EXPIRES = 10;
+#PROD }
+
+ server {
+#PROD listen 443 ssl http2;
+ server_name localhost;
+
+#PROD ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
+#PROD ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
+#PROD ssl_certificate /etc/nginx/ssl/server.crt;
+#PROD ssl_certificate_key /etc/nginx/ssl/server.key;
+
+#PROD add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
+
+#PROD auth_basic "Restricted Area";
+#PROD auth_basic_user_file /etc/nginx/htpasswd;
+
+ location / {
+ root /usr/share/kvmd/web;
+ index index.html;
+ }
+
+ location /wsauth {
+ # Workaround for Safari: https://bugs.webkit.org/show_bug.cgi?id=80362
+#PROD access_by_lua_block {
+#PROD local token = ngx.encode_base64(ngx.sha1_bin(ngx.var.http_Authorization));
+#PROD ngx.shared.WS_TOKENS:set(token, token, WS_TOKEN_EXPIRES);
+#PROD ngx.header["Set-Cookie"] = "WS_ACCESS_TOKEN=" .. token .. "; Path=/; Expires=" .. ngx.cookie_time(ngx.time() + WS_TOKEN_EXPIRES);
+#PROD }
+ content_by_lua_block {
+ ngx.say("ok");
+ }
+ }
+
+ location /kvmd/ws {
+#PROD auth_basic off;
+#PROD access_by_lua_block {
+#PROD local token = ngx.var.cookie_WS_ACCESS_TOKEN;
+#PROD local value, _ = ngx.shared.WS_TOKENS:get(token);
+#PROD if value == nil then
+#PROD ngx.exec("/wsauth");
+#PROD end
+#PROD }
+ rewrite /kvmd/ws /ws break;
+ proxy_pass http://kvmd;
+ include /etc/nginx/proxy-params.conf;
+ proxy_set_header Upgrade $http_upgrade;
+ proxy_set_header Connection "upgrade";
+ proxy_connect_timeout 7d;
+ proxy_send_timeout 7d;
+ proxy_read_timeout 7d;
+ }
+
+ location /kvmd/msd/write {
+ rewrite /kvmd/msd/write /msd/write break;
+ proxy_pass http://kvmd;
+ include /etc/nginx/proxy-params.conf;
+ limit_rate 6250k;
+ limit_rate_after 50k;
+ client_max_body_size 0;
+ proxy_request_buffering off;
+ }
+
+ location /kvmd {
+ rewrite /kvmd/?(.*) /$1 break;
+ proxy_pass http://kvmd;
+ include /etc/nginx/proxy-params.conf;
+ }
+
+ location /streamer {
+ rewrite /streamer/?(.*) /$1 break;
+ proxy_pass http://mjpg_streamer;
+ include /etc/nginx/proxy-params.conf;
+ proxy_buffering off;
+ proxy_ignore_headers X-Accel-Buffering;
+ }
+ }
+}