user {{nginx_user}};
worker_processes {{nginx_worker_processes}};
events {
worker_connections {{nginx_worker_connections}};
}
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
http {
# includes
include /etc/nginx/mime.types;
# defaults
default_type application/octet-stream;
# logging
log_format main $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for";
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
# optimizations
gzip on;
gzip_min_length 1000;
gzip_proxied any;
gzip_types text/plain text/html text/css application/javascript application/xhtml+xml application/xml image/webp image/apng image/svg+xml;
# upstreams
{{#each jinx_services}} upstream {{name}}-jinx-upstream {
server {{name}}-jinx:{{image_port}};
}{{/each}}
{{#each jinx_services}}{{#if https_redirect}} # redirect traffic to https
server {
listen 80;
listen [::]:80;
server_name {{domain}} www.{{domain}};
access_log /var/log/nginx/{{image_name}}.access.log main;
# letsencrypt
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$server_name$request_uri;
}
}
{{else}} # http server
server {
listen 80;
listen [::]:80;
server_name {{domain}} www.{{domain}};
access_log /var/log/nginx/{{image_name}}.access.log main;
location / {
proxy_pass http://{{name}}-jinx-upstream;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
{{/if}}{{#if https}} # https server
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name {{domain}} www.{{domain}};
ssl on;
ssl_certificate /etc/letsencrypt/live/www.{{domain}}/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/www.{{domain}}/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
location / {
proxy_pass http://{{name}}-jinx-upstream;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
# cache web assets
location ~* \.(jpg|jpeg|png|gif|ico|svg|mp4|css|js)$ {
proxy_pass http://{{name}}-jinx-upstream;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
expires 7d;
}
}{{/if}}{{/each}}
}