File: //etc/nginx/sites-available/cargochains.conf
server {
listen 80;
listen [::]:80;
server_name cargochains.dakarash.co.id;
return 301 https://$host$request_uri;
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name cargochains.dakarash.co.id;
# --- Sesuaikan path sertifikat sesuai 'sudo certbot certificates' ---
ssl_certificate /etc/letsencrypt/live/cargochains.dakarash.co.id-0001/fullchain.pem
ssl_certificate_key /etc/letsencrypt/live/cargochains.dakarash.co.id-001/privkey.pem;
# Header keamanan (opsional tapi direkomendasikan)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header Content-Security-Policy "upgrade-insecure-requests" always;
# Static & media (pastikan collectstatic sudah)
location /static/ { alias /home/django/apps/cargochains/staticfiles/; }
location /media/ { alias /home/django/apps/cargochains/media/; }
# Healthcheck sederhana
location = /healthz { return 200 "ok"; add_header Content-Type text/plain; }
# Proxy ke Gunicorn
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https; # penting agar Django tahu HTTPS
proxy_read_timeout 60s;
proxy_connect_timeout 10s;
proxy_send_timeout 60s;
}
# optional: langsung serve static/media kalau sudah collectstatic
location /static/ { alias /home/django/apps/cargochains/staticfiles/; }
location /media/ { alias /home/django/apps/cargochains/media/; }
location = /healthz { return 200 "ok"; add_header Content-Type text/plain; }
}