This is how we’ve done it.
-
Discourse is running on port 8080 without letsencrypt.
-
letsencrypt scripts have been installed
2.1 letsencrypt updating is handled by a cron job
2.2 We use AWS for DNS. In our setup letsencrypt requires access to AWS to create certificates - currently, we use wildcards. -
Nginx handles port 80 and swaps it to port 443
3.1 Nginx sends request upstream to discouse.
3.2 Here is an example nginx configupstream discourse { server 127.0.0.1:8080; keepalive 32;}
proxy_cache_path /var/cache/nginx-discourse levels=1:2 keys_zone=discourse_cache:10m max_size=3g inactive=120m use_temp_path=off;
server {
listen 80;
server_name discourse.your-domain-name.tld ;add_header Strict-Transport-Security max-age=2592000; rewrite ^/.*$ https://$host$request_uri? permanent;}
server {
listen 443 ;
server_name discourse.your-domain-name.tld;access_log /home/your-domain-name/discourse-access.log; error_log /home/your-domain-name/discourse-error.log; ssl on; ssl_certificate "/etc/letsencrypt/live/your-domain-name/fullchain.pem" ; ssl_certificate_key "/etc/letsencrypt/live/your-domain-name/privkey.pem" ; keepalive_timeout 60; ssl_ciphers HIGH:!ADH:!MD5; ssl_protocols SSLv3 TLSv1; ssl_prefer_server_ciphers on; proxy_buffers 16 64k; proxy_buffer_size 128k; location ~ /api/v[0-9]+/(users/)?websocket$ { proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; client_max_body_size 50M; proxy_set_header Host $http_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 $scheme; proxy_set_header X-Frame-Options SAMEORIGIN; proxy_buffers 256 16k; proxy_buffer_size 16k; client_body_timeout 60; send_timeout 300; lingering_timeout 5; proxy_connect_timeout 90; proxy_send_timeout 300; proxy_read_timeout 90s; proxy_pass http://discourse; } location / { client_max_body_size 50M; proxy_set_header Connection ""; proxy_set_header Host $http_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 $scheme; proxy_set_header X-Frame-Options SAMEORIGIN; proxy_buffers 256 16k; proxy_buffer_size 16k; proxy_read_timeout 600s; proxy_cache discourse_cache; proxy_cache_revalidate on; proxy_cache_min_uses 2; proxy_cache_use_stale timeout; proxy_cache_lock on; proxy_http_version 1.1; proxy_pass http://discourse; } }