Назад | Перейти на главную страницу

Укажите ssl_certificate nginx в блоке location {}

Для веб-службы у нас есть два сертификата: myservice.com и api.myservice.com. Оба имеют одно и то же приложение (корень документа), но обслуживаются через HTTPS с разными сертификатами. К сожалению, на данный момент у нас нет двухдоменного сертификата.

В настоящее время мне нужно определить два серверных блока, по одному для каждого, указывающего на один и тот же корень. В только разница в ssl_certificate директива, но ее можно объявить только на http или уровень сервера.

Тем не менее, есть ли способ избежать копирования / вставки в серверных блоках? Это пример кода:

server {
    listen      443;
    server_name .myservice.com;
    root        /var/www/myservice.com/public;

    include conf.d/common.conf.inc;

    ssl                 on;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
    ssl_session_cache   shared:SSL:5m;
    ssl_session_timeout 10m;
    ssl_certificate     /path/to/myservice.com.bundle.crt;
    ssl_certificate_key /path/to//myservice.com.key;

    ssl_prefer_server_ciphers on;
}

server {
    listen      443;
    server_name api.myservice.com;
    root        /var/www/myservice.com/public;

    include conf.d/common.conf.inc;

    ssl                 on;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
    ssl_session_cache   shared:SSL:5m;
    ssl_session_timeout 10m;
    ssl_certificate     /path/to/api.myservice.com.bundle.crt;
    ssl_certificate_key /path/to//myservice.com.key;

    ssl_prefer_server_ciphers on;
}

/ edit: По запросу, здесь вывод nginx -V:

версия nginx: nginx / 1.2.7

Поддержка TLS SNI включена настроить

аргументы: --prefix = / usr / share / nginx --conf-path = / etc / nginx / nginx.conf --error-log-path = / var / log / nginx / error.log --http-client- body-temp-path = / var / lib / nginx / body --http-fastcgi-temp-path = / var / lib / nginx / fastcgi --http-log-path = / var / log / nginx / access.log --http-proxy-temp-path = / var / lib / nginx / proxy --http-scgi-temp-path = / var / lib / nginx / scgi --http-uwsgi-temp-path = / var / lib / nginx / uwsgi --lock-path = / var / lock / nginx.lock --pid-path = / run / nginx.pid --with-pcre-jit --with-debug --with-http_addition_module --with -http_dav_module --with-http_flv_module --with-http_geoip_module --with-http_gzip_static_module --with-http_image_filter_module --with-http_mp4_module --with-http_perl_module --with-http_module_random_index -http_stub_status_module --with-http_ssl_module --with-http_sub_module --with-http_xslt_module --with-ipv6 --with-sha1 = / usr / include / openssl --with-md5 = / usr / include / openssl --with- mail --with-mail_ssl_module --add-module = / build /buildd/nginx-1.2.7/debian/modules/nginx-auth-pam --add-module = / build / buildd / nginx-1.2.7 / debian / modules / chunkin-nginx-module --add-module = /build/buildd/nginx-1.2.7/debian/modules/headers-more-nginx-module --add-module = / build / buildd / nginx-1.2.7 / debian / modules / nginx-development-kit - add-module = / build / buildd / nginx-1.2.7 / debian / modules / nginx-echo --add-module = / build / buildd / nginx-1.2.7 / debian / modules / nginx-http-push - add-module = / build / buildd / nginx-1.2.7 / debian / modules / nginx-lua --add-module = / build / buildd / nginx-1.2.7 / debian / modules / nginx-upload-module - add-module = / build / buildd / nginx-1.2.7 / debian / modules / nginx-upload-progress --add-module = / build / buildd / nginx-1.2.7 / debian / modules / nginx-upstream-fair --add-module = / build / buildd / nginx-1.2.7 / debian / modules / nginx-dav-ext-модуль

Вы уже знаете (и используете) ответ! Просто include общие части из отдельного файла.

Вы можете избежать дублирования виртуального хоста, сделав что-то вроде этого с «if» и определив один виртуальный хост:

server {
    listen      443;
    server_name .myservice.com api.myservice.com;
    root        /var/www/myservice.com/public;

    include conf.d/common.conf.inc;

    ssl                 on;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!AESGCM;
    ssl_session_cache   shared:SSL:5m;
    ssl_session_timeout 10m;
    ssl_prefer_server_ciphers on;

  if ($server_name = .myservice.com) {
    ssl_certificate /path/to/myservice.com.bundle.crt;
    ssl_certificate_key /path/to//myservice.com.key;
  }
  if ($server_name = api.myservice.com) {
    ssl_certificate /path/to/api.myservice.com.bundle.crt;
    ssl_certificate_key /path/to//myservice.com.key;;
  }
  ...
}