-
Notifications
You must be signed in to change notification settings - Fork 76
Drupal BOA NGINX setup for multiple, secure HTTPS domains
It is important to keep in-mind several rules when creating or modifying custom HTTPS domains.
-
Nginx loads configuration files in alphabetical order, so the filename matters when using multiple files.
-
BOA is configured by default to use a self-signed certificate. The default file used is /var/aegir/config/server_master/nginx/pre.d/nginx_wild_ssl.conf. This file is not overwritten on upgrade, and you can modify it to suit your requirements.
You can add more server {} sections to setup additional, unique HTTPS domains in pre.d/nginx_wild_ssl.conf - but make certain they are added below the wildcard domain {}.
You can also create separate config files in pre.d/, but you must use safe filenames, like pre.d/z_foo.com_ssl.conf to make sure they will be loaded after pre.d/nginx_wild_ssl.conf
Restart NGINX to see your changes take effect. As root: "service nginx reload"
-
Only one wildcard HTTPS domain is possible on the server. This is denoted as: server_name _;
The wildcard server {} with server_name _; must be listed first (not last).
If you have purchased a wildcard subdomain certificate such as *.foo.com, your certificate will replace BOA's default, self-signed certificate mechanism.
Place the .key and .crt files of your purchased wildcard certificate in /etc/ssl/private/
-
Extra server {} instances such as "server_name foo.com www.foo.com;" should be written explicitly. (Replace _; with these domain names in the template below)
You can then use "listen *:443" in every extra server {} configuration, with its own SSL cert/key defined, and each will use the single IP address of the BOA server in TLS/SNI mode.
Place the .key and .crt files for each purchased HTTPS domain certificate in /etc/ssl/private/
Copy the following to use as a template for each HTTPS domain on the server. Search and replace *.example.com with each HTTPS domain you have purchased a certificate for:
######################################################### ### BEGIN *.example.com ### ### /var/aegir/config/server_master/nginx/pre.d/custom_single_ip_ssl.conf upstream nginx_http { server localhost:80; } server { # The 'spdy' at the end of the listen command below turns on SPDY support. listen *:443 ssl spdy; server_name _; ssl on; ssl_certificate /etc/ssl/private/*.example.com.crt; ssl_certificate_key /etc/ssl/private/*.example.com.key; # Tell browsers to require SSL (warning: difficult to change your mind) add_header Strict-Transport-Security max-age=31536000; # Turn on session resumption, using a 10 min cache shared across nginx processes, # as recommended by http://nginx.org/en/docs/http/configuring_https_servers.html ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; # Cut out (the old, broken) SSLv3 entirely. # This **excludes IE6 users** and (apparently) Yandexbot. ssl_protocols TLSv1.2 TLSv1.1 TLSv1; ssl_ciphers 'kEECDH+ECDSA+AES128 kEECDH+ECDSA+AES256 kEECDH+AES128 kEECDH+AES256 kEDH+AES128 kEDH+AES256 DES-CBC3-SHA +SHA !aNULL !eNULL !LOW !MD5 !EXP !DSS !PSK !SRP !kECDH !CAMELLIA !RC4 !SEED'; ssl_prefer_server_ciphers on; keepalive_timeout 70; # Buffer size of 1400 bytes fits in one MTU. # nginx 1.5.9+ ONLY ssl_buffer_size 1400; # SPDY header compression (0 for none, 9 for slow/heavy compression). Preferred is 6. # # BUT: header compression is flawed and vulnerable in SPDY versions 1 - 3. # Disable with 0, until using a version of nginx with SPDY 4. spdy_headers_comp 6; # Now let's really get fancy, and pre-generate a 2048 bit random parameter # for DH elliptic curves. If not created and specified, default is only 1024 bits. # # Generated by OpenSSL with the following command: # openssl dhparam -outform pem -out dhparam2048.pem 2048 # # Note: raising the bits to 2048 excludes Java 6 clients. Comment out if a problem. ssl_dhparam /etc/ssl/private/dhparam2048.pem; ### ### Deny known crawlers. ### if ($is_crawler) { return 403; } location / { proxy_pass http://nginx_http; proxy_redirect off; gzip_vary off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-By $server_addr:$server_port; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Local-Proxy $scheme; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass_header Set-Cookie; proxy_pass_header Cookie; proxy_pass_header X-Accel-Expires; proxy_pass_header X-Accel-Redirect; proxy_pass_header X-This-Proto; proxy_connect_timeout 180; proxy_send_timeout 180; proxy_read_timeout 180; access_log on; log_not_found on; } } ### ### END *.example.com ###