nginx use expected dirs and allow websockets in proxy pass

This commit is contained in:
CroneKorkN 2025-06-22 09:49:27 +02:00
parent bdb9fa064d
commit 187b0440c8
Signed by: cronekorkn
SSH key fingerprint: SHA256:v0410ZKfuO1QHdgKBsdQNF64xmTxOF8osF1LIqwTcVw
6 changed files with 36 additions and 10 deletions

View file

@ -69,6 +69,9 @@ defaults = {
},
},
},
'nginx': {
'has_websockets': True,
},
}
@ -144,6 +147,7 @@ def dns(metadata):
def nginx(metadata):
return {
'nginx': {
'has_websockets': True,
'vhosts': {
metadata.get('grafana/hostname'): {
'content': 'grafana/vhost.conf',

View file

@ -31,5 +31,13 @@ http {
}
% endif
include /etc/nginx/sites/*;
% if has_websockets:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
% endif
include /etc/nginx/sites-enabled/*;
}

View file

@ -9,7 +9,7 @@ directories = {
'svc_systemd:nginx:restart',
},
},
'/etc/nginx/sites': {
'/etc/nginx/sites-available': {
'purge': True,
'triggers': {
'svc_systemd:nginx:restart',
@ -25,6 +25,13 @@ directories = {
'purge': True,
'owner': 'www-data',
},
# temp
'/var/www/certbot': {
'owner': 'www-data',
'group': 'www-data',
'mode': '0755',
}
}
files = {
@ -33,6 +40,7 @@ files = {
'context': {
'modules': node.metadata.get('nginx/modules'),
'worker_processes': node.metadata.get('vm/cores'),
'has_websockets': node.metadata.get('nginx/has_websockets'),
},
'triggers': {
'svc_systemd:nginx:restart',
@ -75,6 +83,12 @@ files = {
},
}
symlinks = {
'/etc/nginx/sites-enabled': {
'target': '/etc/nginx/sites-available',
},
}
actions = {
'nginx-generate-dhparam': {
'command': 'openssl dhparam -dsaparam -out /etc/ssl/certs/dhparam.pem 4096',
@ -93,7 +107,7 @@ svc_systemd = {
for name, config in node.metadata.get('nginx/vhosts').items():
files[f'/etc/nginx/sites/{name}'] = {
files[f'/etc/nginx/sites-available/{name}'] = {
'content': Template(filename=join(repo.path, 'data', config['content'])).render(
server_name=name,
**config.get('context', {}),
@ -109,6 +123,6 @@ for name, config in node.metadata.get('nginx/vhosts').items():
}
if name in node.metadata.get('letsencrypt/domains'):
files[f'/etc/nginx/sites/{name}']['needs'].append(
files[f'/etc/nginx/sites-available/{name}']['needs'].append(
f'action:letsencrypt_ensure-some-certificate_{name}',
)

View file

@ -18,6 +18,7 @@ defaults = {
'nginx': {
'vhosts': {},
'modules': set(),
'has_websockets': False,
},
'systemd': {
'units': {

View file

@ -1,8 +1,3 @@
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;

View file

@ -8,6 +8,10 @@ server {
location / {
proxy_set_header X-Real-IP $remote_addr;
% if websockets:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
% endif
proxy_pass ${target};
}
}