turtle-wow-source-kinda/Dumps/Source Code/20 - Development_turtle-logs/main/Environment/nginx/nginx.conf
Brian Oost a1d5bb70b2 Init
2024-08-06 18:06:40 +02:00

193 lines
5.4 KiB
Nginx Configuration File

worker_processes 16;
#load_module /usr/lib/nginx/modules/ngx_http_brotli_filter_module.so;
#load_module /usr/lib/nginx/modules/ngx_http_brotli_static_module.so;
events {
worker_connections 8096;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
tcp_nodelay on;
tcp_nopush on;
server_tokens off;
types_hash_max_size 4096;
client_body_buffer_size 30K;
client_header_buffer_size 10k;
client_max_body_size 100m;
large_client_header_buffers 2 10k;
client_body_timeout 2400;
client_header_timeout 2400;
keepalive_timeout 500;
send_timeout 2000;
open_file_cache max=2000 inactive=20s;
open_file_cache_valid 60s;
open_file_cache_min_uses 2;
open_file_cache_errors off;
map $http_accept $webp_suffix {
default “”;
“~*webp” “.webp”;
}
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}
geo $limit {
default 1;
#10.0.0.0/8 0;
#192.168.0.0/24 0;
}
map $limit $limit_key {
0 "";
1 $binary_remote_addr;
}
limit_req_zone $limit_key zone=req_zone:30m rate=500r/s;
server {
listen 8080;
server_name nginx;
location = /stub_status {
stub_status;
}
}
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name jaylapp;
root /var/www/html;
charset UTF-8;
# add_header Content-Security-Policy "default-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval' storage.googleapis.com www.googletagmanager.com www.google-analytics.com; img-src 'self' www.googletagmanager.com www.google-analytics.com data:; object-src 'none'";
location /API/ {
limit_req zone=req_zone burst=500 nodelay;
limit_req_status 429;
proxy_pass http://localhost:8000;
}
location /model_viewer/ {
location ~/(meta|mo3|textures|viewer)/ {
add_header Access-Control-Allow-Origin "*";
try_files $uri $uri/;
}
location ~/bg.png {
add_header Access-Control-Allow-Origin "*";
try_files $uri $uri/;
}
proxy_pass http://127.0.0.1:5555;
}
location / {
limit_req zone=req_zone burst=500 nodelay;
limit_req_status 429;
proxy_pass http://127.0.0.1:4200;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
}
#return https://$host$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name jaylapp;
ssl_certificate /etc/nginx/cert/jaylapp.crt;
ssl_certificate_key /etc/nginx/cert/jaylapp.key.pem;
ssl_session_cache shared:SSL:20m;
ssl_session_timeout 60m;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDH+AESGCM:ECDH+AES256:ECDH+AES128:DHE+AES128:!ADH:!AECDH:!MD5;
ssl_dhparam /etc/nginx/cert/dhparam.pem;
ssl_protocols TLSv1.3;
# Live server Only // TODO!
#ssl_stapling on;
#ssl_stapling_verify on;
#ssl_trusted_certificate /etc/nginx/cert/trustchain.crt;
#resolver 8.8.8.8 8.8.4.4;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Content-Type-Options nosniff;
add_header Strict-Transport-Security "max-age=31536000" always;
add_header Content-Security-Policy "default-src 'self' 'unsafe-inline'; style-src: 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' www.googletagmanager.com www.google-analytics.com; img-src 'self' www.googletagmanager.com www.google-analytics.com data:; object-src 'none'";
# Hardening
if ($request_method !~ ^(GET|HEAD|POST)$ )
{
return 405;
}
# Regular configuration
root /var/www/html/;
charset UTF-8;
# Brotli
brotli on;
brotli_static on;
brotli_types text/plain text/css application/javascript application/json image/svg+xml application/xml+rss;
brotli_comp_level 6;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~* .(jpg|jpeg|png|gif|ico|webp|css|js)$ {
access_log off;
log_not_found off;
expires 30d;
}
location /API/ {
limit_req zone=req_zone burst=500 nodelay;
limit_req_status 429;
proxy_pass http://127.0.0.1:8000;
}
location /model_viewer/ {
location ~(meta|mo3|textures|viewer)/ {
add_header Access-Control-Allow-Origin "*";
try_files $uri $uri/ /index.html;
}
proxy_pass http://127.0.0.1:5555;
}
location / {
limit_req zone=req_zone burst=500 nodelay;
limit_req_status 429;
proxy_pass http://127.0.0.1:4200;
}
}
}
#daemon off;