To enable SSL for a web site hosted on nginx web server, you need to change port on which nginx listens.
Lets say we have following nginx virtual host
server { listen IP-ADDR-HERE:80; server_name blog.hostonnet.com; access_log /var/log/nginx/blog.hostonnet.com.log; root /home/blog.hostonnet.com/public_html; index index.html index.php; client_max_body_size 5m; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { try_files $uri =404; access_log off; expires max; } location = /robots.txt { access_log off; log_not_found off; } location = /favicon.ico { access_log off; log_not_found off; } location ~ \.php$ { fastcgi_keep_conn on; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } }
Find
listen IP-ADDR-HERE:80;
Replace with
listen IP-ADDR-HERE:443;
Now you need to add following 2 lines to virtual host entry, this can be anywhere
ssl on; ssl_certificate /etc/letsencrypt/live/blog.hostonnet.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/blog.hostonnet.com/privkey.pem;
Here is the modified virtual host entry for SSL.
server { listen IP-ADDR-HERE:443; server_name blog.hostonnet.com; access_log /var/log/nginx/blog.hostonnet.com.log; root /home/blog.hostonnet.com/public_html; index index.html index.php; client_max_body_size 5m; location / { try_files $uri $uri/ /index.php$is_args$args; } location ~ \.(js|css|png|jpg|gif|swf|ico|pdf|mov|fla|zip|rar)$ { try_files $uri =404; access_log off; expires max; } location = /robots.txt { access_log off; log_not_found off; } location = /favicon.ico { access_log off; log_not_found off; } location ~ \.php$ { fastcgi_keep_conn on; fastcgi_pass unix:/var/run/php/php7.0-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /etc/nginx/fastcgi_params; } ssl on; ssl_certificate /etc/letsencrypt/live/blog.hostonnet.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/blog.hostonnet.com/privkey.pem; }
Save it as
vi /etc/nginx/sites-available/blog.hostonnet.com-ssl.conf
Now activate the site with
ln -s /etc/nginx/sites-available/blog.hostonnet.com-ssl.conf /etc/nginx/sites-enabled/blog.hostonnet.com-ssl.conf
Restart nginx web server
nginx -s reload
See also