Multiple domains can be hosted with nginx server blocks. Below I give an example of how to generate a shared SSL certificate from Let’s Encrypt, and how to setup two server blocks to use a shared SSL certificate.
Assuming you use Let’s Encrypt as your CA authority, generate a SSL certificate for the domains:
sudo letsencrypt certonly -a webroot --webroot-path=/var/www/default/html/ -d example.org -d example.com
Alternatively, if your not using Let’s Encrypt as your CA, read up the docs http://nginx.org/en/docs/http/configuring_https_servers.html take a pause to note:
The SSL certificate needs to contain several names, in the
SubjectAltNamecertificate field, for example, you might want to haveexample.comandexample.orgdomains. Note theSubjectAltNamefield length is limited, to about 1000 characters IIRC.
Now I assume you have the SSL certificate generated.
Update the two server blocks /etc/nginx/sites-available/example.com and /etc/nginx/sites-available/example.org accordingly. A /etc/nginx/sites-available/default is not need. See the diff:
server { server {
listen 80; listen 80;
listen [::]:80; listen [::]:80;
server_name example.com; | server_name example.org;
return 301 https://$server_name$request_uri; return 301 https://$server_name$request_uri;
} }
server { server {
server_name example.com; | server_name example.org;
listen 443 ssl http2; listen 443 ssl http2;
listen [::]:443 ssl http2; listen [::]:443 ssl http2;
ssl_certificate /etc/letsencrypt/live/default/fullchain.pem ssl_certificate /etc/letsencrypt/live/default/fullchain.pem
ssl_certificate_key /etc/letsencrypt/live/default/privkey.p ssl_certificate_key /etc/letsencrypt/live/default/privkey.p
include snippets/ssl-params.conf; include snippets/ssl-params.conf;
root /var/www/example.com/html; | root /var/www/example.org/html;
index index.php index index.php
location / { location / {
try_files $uri $uri/ /index.html =404; try_files $uri $uri/ /index.html =404;
autoindex on; autoindex on;
} }
location ~ /.well-known { location ~ /.well-known {
allow all; allow all;
} }
location ~ \.php$ { location ~ \.php$ {
include snippets/fastcgi-php.conf; include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_pass unix:/var/run/php5-fpm.sock;
} }
} }
Note the folder that contains the SSL certificates /etc/letsencrypt/live/default/. You may need rename the folders that letsencrypt generated.
Additional references:
https://www.digitalocean.com/community/questions/letsencrypt-for-multiple-domains-on-nginx