diff --git a/d1/nginx_config.py b/d1/nginx_config.py index 9eb3c7f..b306188 100644 --- a/d1/nginx_config.py +++ b/d1/nginx_config.py @@ -27,7 +27,8 @@ def forward( ) ) - sections = [] + sections = dict() + for entry in forward_nginx: location = None @@ -36,6 +37,14 @@ def forward( else: location = '/' + if 'server_name' in entry: + server_name = entry['server_name'] + else: + server_name = 'default_server' + + if not server_name in sections: + sections[server_name] = [] + if 'target_endpoint' in entry: section_body = r''' proxy_set_header Host $http_host; @@ -58,7 +67,7 @@ def forward( else: raise NotImplementedError - sections.append(r''' + sections[server_name].append(r''' location ^~ {location} { {section_body} } @@ -67,6 +76,44 @@ def forward( ).replace( '{location}', location, )) + + servers = [] + + for server_name, current_sections in sections.items(): + servers.append( + r''' +server { + set $t1 $remote_addr; + if ($http_x_forwarded_for) + { + set $t1 $http_x_forwarded_for; + } + + server_name {server_name}; + listen 80 {default_server}; + client_max_body_size 50M; + + {sections_config} +} + '''.replace( + '{sections_config}', '\n'.join(current_sections) + ).replace( + '{server_name}', + ( + '_' + if server_name == 'default_server' + else server_name + ), + ).replace( + '{default_server}', + ( + '' + if not server_name == 'default_server' + else server_name + ) + ) + ) + f.write(r''' events { multi_accept on; @@ -83,19 +130,7 @@ def forward( access_log /dev/null combined; access_log /dev/stderr main; - server { - set $t1 $remote_addr; - if ($http_x_forwarded_for) - { - set $t1 $http_x_forwarded_for; - } - - - listen 80; - client_max_body_size 50M; - - {sections_config} - } + {servers_config} map $http_upgrade $connection_upgrade { default upgrade; @@ -103,7 +138,7 @@ def forward( } } '''.replace( - '{sections_config}', '\n'.join(sections) + '{servers_config}', '\n'.join(servers) )) def ssl(input_json, output_conf): @@ -149,6 +184,29 @@ server { for server in ssl_nginx['servers']: servers.append( r''' + + +server { + set $t1 $remote_addr; + if ($http_x_forwarded_for) + { + set $t1 $http_x_forwarded_for; + } + + listen 80; + server_name {server_names}; + client_max_body_size {client_max_body_size}; + + location ~ ^/.well-known/acme-challenge/ { + alias /var/www/; + try_files $uri =404; + } + + location ~ { + return 444; + } +} + server { set $t1 $remote_addr; if ($http_x_forwarded_for) diff --git a/docker-compose.yml b/docker-compose.yml index 3d1bd19..3c4f9e0 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -5,8 +5,8 @@ services: context: . dockerfile: ./docker/app/Dockerfile volumes: - - ./d1/nginx_config.py:/app/d1/nginx_config.py:ro - - ./tmp/cache/forward.nginx.json:/app/tmp/cache/forward.nginx.json:ro + - ./d1/:/app/d1/:ro + - ./tmp/cache/:/app/tmp/cache/:ro restart: always ssl-app: build: