Проблемы с настройкой Nginx с помощью модуля puppet/nginx с помощью Hiera

Я пытаюсь настроить Nginx с модулем puppet/nginx из forge.puppet.com (автор Vox Pupuli), используя этот файл Hiera yaml:

nginx::nginx_servers:
    'devops-alldomains':
        server_name:
            - '~^(?<fqdn>.+?)$'
        www_root: '/var/www/$fqdn'
        index_files:
            - 'index.php'
        try_files:
            - '$uri'
            - '$uri/'
            - '/index.php?$args'
        access_log: '/var/log/nginx/devops-alldomains-access.log'
        error_log: '/var/log/nginx/devops-alldomains-error.log'
    'devops-alldomains-ssl':
        server_name:
            - '~^(?<fqdn>.+?)$'
        listen_port: '443'
        www_root: '/var/www/$fqdn'
        ssl: true
        ssl_key: '/etc/ssl/www/$fqdn.key'
        ssl_cert: '/etc/ssl/www/$fqdn.crt'
        index_files:
            - 'index.php'
        try_files:
            - '$uri'
            - '$uri/'
            - '/index.php?$args'
        access_log: '/var/log/nginx/devops-alldomains-access-ssl.log'
        error_log: '/var/log/nginx/devops-alldomains-error-ssl.log'
nginx::nginx_locations:
    'devops-alldomains':
        location: '~ \.php$'
        www_root: '/var/www/$fqdn'
        server: 'devops-alldomains'
        fastcgi: 'unix:/var/run/php7-fpm.sock'
        fastcgi_split_path: '^(.+\.php)(/.*)$'
        fastcgi_index: 'index.php'
        fastcgi_param:
            'SCRIPT_FILENAME': '$document_root$fastcgi_script_name'
    'devops-alldomains-ssl':
        location: '~ \.php$'
        www_root: '/var/www/$fqdn'
        server: 'devops-alldomains-ssl'
        fastcgi: 'unix:/var/run/php7-fpm.sock'
        fastcgi_split_path: '^(.+\.php)(/.*)$'
        fastcgi_index: 'index.php'
        fastcgi_param:
            'SCRIPT_FILENAME': '$document_root$fastcgi_script_name'

НО, когда он генерирует два конфига Nginx (devops-alldomains.conf и devops-alldomains-ssl.conf), SSL не совпадает с ожидаемым:

   location / {
     root      /var/www/$fqdn;
     index     index.php;
     try_files $uri $uri/ /index.php?$args;
   }

   location ~ \.php$ {
     root          /var/www/$fqdn;
     include       /etc/nginx/fastcgi_params;

     fastcgi_pass  unix:/var/run/php7-fpm.sock;
     fastcgi_index index.php;
     fastcgi_split_path_info ^(.+\.php)(/.*)$;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   }
 # MANAGED BY PUPPET
 server {
   listen       *:443 ssl;
   server_name  ~^(?<fqdn>.+?)$;

   ssl on;

   ssl_certificate           /etc/ssl/www/$fqdn.crt;
   ssl_certificate_key       /etc/ssl/www/$fqdn.key;
   ssl_session_cache         shared:SSL:10m;
   ssl_session_timeout       5m;
   ssl_protocols             TLSv1 TLSv1.1 TLSv1.2;
   ssl_ciphers               ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE- RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-       AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-   GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS;
   ssl_prefer_server_ciphers on;

   index  index.php;

   access_log            /var/log/nginx/devops-alldomains-access-ssl.log combined;
   error_log             /var/log/nginx/devops-alldomains-error-ssl.log;

   location / {
     root      /var/www/$fqdn;
     index     index.php;
     try_files $uri $uri/ /index.php?$args;
   }
 }

Итак, как вы можете видеть, директивы location находятся вне серверной директивы, поэтому Nginx никогда не запустится. Кто-нибудь знает, что может быть не так? Я даже пытался упростить эту конфигурацию, чтобы использовать только базовые директивы (даже без ssl и php), но результат был почти таким же. Большое спасибо за вашу помощь.

ОБНОВИТЬ:

Похоже, мне удалось решить проблему с вашей помощью, ребята;) Это текущий конфиг:

 nginx::nginx_servers:
     'devops-alldomains':
         server_name:
             - '~^(?<fqdn>.+?)$'
         www_root: '/var/www/$fqdn'
         index_files:
             - 'index.php'
         try_files:
             - '$uri'
             - '$uri/'
             - '/index.php?$args'
         access_log: '/var/log/nginx/devops-alldomains-access.log'
         error_log: '/var/log/nginx/devops-alldomains-error.log'
     'devops-alldomains-ssl':
         server_name:
             - '~^(?<fqdn>.+?)$'
         listen_port: '443'
         ssl_port: '443'
         www_root: '/var/www/$fqdn'
         ssl: true
         ssl_key: '/etc/ssl/www/$fqdn.key'
         ssl_cert: '/etc/ssl/www/$fqdn.crt'
         index_files:
             - 'index.php'
         try_files:
             - '$uri'
             - '$uri/'
             - '/index.php?$args'
         access_log: '/var/log/nginx/devops-alldomains-access-ssl.log'
         error_log: '/var/log/nginx/devops-alldomains-error-ssl.log'
 nginx::nginx_locations:
     'devops-alldomains-loc':
         location: '~ \.php$'
         www_root: '/var/www/$fqdn'
         server: 'devops-alldomains'
         fastcgi: 'unix:/var/run/php7-fpm.sock'
         fastcgi_split_path: '^(.+\.php)(/.*)$'
         fastcgi_index: 'index.php'
         fastcgi_param:
             'SCRIPT_FILENAME': '$document_root$fastcgi_script_name'
     'devops-alldomains-ssl-loc':
         location: '~ \.php$'
         www_root: '/var/www/$fqdn'
         server: 'devops-alldomains-ssl'
         ssl: true
         ssl_only: true
         fastcgi: 'unix:/var/run/php7-fpm.sock'
         fastcgi_split_path: '^(.+\.php)(/.*)$'
         fastcgi_index: 'index.php'
         fastcgi_param:
             'SCRIPT_FILENAME': '$document_root$fastcgi_script_name'

Теперь у меня есть два отдельных файла конфигурации Nginx - один для не-SSL, второй для SSL. Первая проблема заключалась в том, что мне не хватало ssl: true и ssl_only: true в соответствующем местоположении (devops-alldomains-ssl-loc), во-вторых, мне нужно было установить оба listen_port: '443' и ssl_port: '443' под сервером директивы. Я также изменил названия локаций, но это, похоже, не вызывало проблем (или что-то решало).

Чтобы сделать это, вот версии используемых инструментов:

Кукольный: 4.10.9
Иера: 3.3.2
Nginx: 1.12.2-1 ~ xenial
puppet/nginx (модуль кузницы): 0.9.0

Спасибо за помощь. Я очень ценю это!

0 ответов

Другие вопросы по тегам