# Odoo Nginx SSL Configuration Template # A+ SSL Labs Rating # # Usage: # 1. Copy to /etc/nginx/sites-available/odoo # 2. Update: server_name, ssl_certificate paths, upstream odoo port # 3. sudo ln -s /etc/nginx/sites-available/odoo /etc/nginx/sites-enabled/ # 4. sudo nginx -t && sudo systemctl reload nginx upstream odoo { server 127.0.0.1:8069; } upstream odoochat { server 127.0.0.1:8072; } # Redirect HTTP to HTTPS server { listen 80; server_name yourdomain.com www.yourdomain.com; return 301 https://$server_name$request_uri; } # HTTPS Server server { listen 443 ssl http2; server_name yourdomain.com www.yourdomain.com; # SSL Certificate (Let's Encrypt) ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem; # SSL Protocol and Ciphers (A+ Rating) ssl_protocols TLSv1.3 TLSv1.2; ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384'; ssl_prefer_server_ciphers off; # SSL Session Cache ssl_session_timeout 1d; ssl_session_cache shared:SSL:50m; ssl_session_tickets off; # OCSP Stapling ssl_stapling on; ssl_stapling_verify on; resolver 8.8.8.8 8.8.4.4 valid=300s; resolver_timeout 5s; # Security Headers add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; # Logging access_log /var/log/nginx/odoo-access.log; error_log /var/log/nginx/odoo-error.log; # File Upload Size client_max_body_size 200M; # Proxy Settings proxy_read_timeout 720s; proxy_connect_timeout 720s; proxy_send_timeout 720s; proxy_set_header X-Forwarded-Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Real-IP $remote_addr; # Odoo Web Interface location / { proxy_pass http://odoo; proxy_redirect off; } # Odoo Longpolling location /longpolling { proxy_pass http://odoochat; } # Gzip Compression gzip on; gzip_types text/css text/javascript application/x-javascript application/json application/xml; gzip_min_length 1000; # Cache Static Assets location ~* /web/static/ { proxy_cache_valid 200 90m; proxy_buffering on; expires 864000; proxy_pass http://odoo; } }