Как правильно настроить Nginx под два домена и два сертификата?

Ссылка скопирована
1 ответ

Добрый день. У сайта появился второй домен. Он как и первый идет на первый сервер. Человек, который круто шарил за nginx пока в отъезде, и пытаемся настроить. Вынесли каждую настройку в отдельный блок Server, но в таком кейсе nginx возвращает 404 так как видимо не видит root

Когда делают два блока server дубликата то к обоим хостам применяет один и тот же серт. В гугле более менее только эта статья

https://bobcares.com/blog/multiple-ssl-certificate...

# Force using of HTTPS protocol geo $authentication {     ranges;     default        "Restricted Content";     include        /etc/nginx/whitelist.conf; }  server { 	listen 80 default_server; 	listen [::]:80 default_server; 	server_name %DOMAIN% %BY_DOMAIN%;      set $redirect no;     if ($request_uri !~ "^/zeon(.*)$") {         set $redirect yes;     }       location / {         if ($redirect = yes) {           return 301 https://$host$request_uri;           break;         }     }  }  server {     server_name %BY_DOMAIN%;      listen 443 ssl;     listen [::]:443 ssl;      ssl_certificate     /etc/letsencrypt/live/%BY_DOMAIN%/fullchain.pem;     ssl_certificate_key /etc/letsencrypt/live/%BY_DOMAIN%/privkey.pem; }  server {     server_name %DOMAIN%;      listen 443 ssl;     listen [::]:443 ssl;      ssl_certificate     /etc/letsencrypt/live/app/fullchain.pem;     ssl_certificate_key /etc/letsencrypt/live/app/privkey.pem; }   server {     server_name %DOMAIN% %BY_DOMAIN%;         set $web_root   /var/www/html/app/web;     root $web_root;       location ~ ^/(?!:hr-file)*.(?:jpg|jpeg|png|gif|ico|css|js|map|svg)$ {        expires 10d;        add_header Vary Accept-Encoding;     }      sendfile off;      location / {          if (-f $web_root/maintenance.on) {             return 503;         }          index index.php;          try_files $uri $uri/ /index.php?$query_string;          auth_basic $authentication;         auth_basic_user_file /etc/nginx/.htpasswd;     }      location /status {         access_log off;         include fastcgi_params;         fastcgi_param SCRIPT_NAME       /status;         fastcgi_param SCRIPT_FILENAME   /status;         fastcgi_pass php-fpm:9000;         fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;          auth_basic $authentication;         auth_basic_user_file /etc/nginx/.htpasswd;     }      location ~ [^/].php(/|$) {         include fastcgi_params;         fastcgi_param SCRIPT_FILENAME $web_root/index.php;         fastcgi_pass            php-fpm:9000;         fastcgi_split_path_info ^(.+?.php)(/.*)$;         fastcgi_index           index.php;         fastcgi_read_timeout    300s;          auth_basic $authentication;         auth_basic_user_file /etc/nginx/.htpasswd;     }      error_page 503 @maintenance_page;      location @maintenance_page {         rewrite ^(.*)$ /maintenance.html break;     } }

# Force using of HTTPS protocol geo $authentication { ranges; default "Restricted Content"; include /etc/nginx/whitelist.conf; } server { listen 80 default_server; listen [::]:80 default_server; server_name %DOMAIN% %BY_DOMAIN%; set $redirect no; if ($request_uri !~ "^/zeon(.*)$") { set $redirect yes; } location / { if ($redirect = yes) { return 301 https://$host$request_uri; break; } } } server { server_name %BY_DOMAIN%; listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/letsencrypt/live/%BY_DOMAIN%/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/%BY_DOMAIN%/privkey.pem; } server { server_name %DOMAIN%; listen 443 ssl; listen [::]:443 ssl; ssl_certificate /etc/letsencrypt/live/app/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/app/privkey.pem; } server { server_name %DOMAIN% %BY_DOMAIN%; set $web_root /var/www/html/app/web; root $web_root; location ~ ^/(?!:hr-file)*.(?:jpg|jpeg|png|gif|ico|css|js|map|svg)$ { expires 10d; add_header Vary Accept-Encoding; } sendfile off; location / { if (-f $web_root/maintenance.on) { return 503; } index index.php; try_files $uri $uri/ /index.php?$query_string; auth_basic $authentication; auth_basic_user_file /etc/nginx/.htpasswd; } location /status { access_log off; include fastcgi_params; fastcgi_param SCRIPT_NAME /status; fastcgi_param SCRIPT_FILENAME /status; fastcgi_pass php-fpm:9000; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; auth_basic $authentication; auth_basic_user_file /etc/nginx/.htpasswd; } location ~ [^/].php(/|$) { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $web_root/index.php; fastcgi_pass php-fpm:9000; fastcgi_split_path_info ^(.+?.php)(/.*)$; fastcgi_index index.php; fastcgi_read_timeout 300s; auth_basic $authentication; auth_basic_user_file /etc/nginx/.htpasswd; } error_page 503 @maintenance_page; location @maintenance_page { rewrite ^(.*)$ /maintenance.html break; } }

Дополнительно:

Ответы:

У Nginx свои доки, гугл их в первой ссылке отдает: https://nginx.org/ru/docs/
Хотя написаны не для новичков, очень много айти-самоучителей и в каждом статья как настроить хосты Nginx.

Насчет сертификатов letsencrypt нельзя скопировать с одного домена на другой.
Надо снова запустить certbot -- nginx и указать новый домен и сертификата будет два.
Или отозвать старый и сделать новый сертификат сразу на оба домена.

Уберите оба маленьких server{} с listen 443 ssl;
скопируйте-вставьте большой server{}, оставьте в каждом или %DOMAIN или %BY_DOMAIN%,
и не забудьте в эти оба большие server{} вписать listen 443 ssl;, и соответствующие сертификаты.
Фсё!

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Андрей PHP Ответ

Для настройки Nginx под два домена и два сертификата вам потребуется выполнить следующие шаги:

1. Создайте конфигурационные файлы для каждого домена в директории `/etc/nginx/sites-available/`. Например, создайте файлы `domain1.conf` и `domain2.conf`.

2. В каждом из этих файлов укажите следующую конфигурацию:

server {
    listen 80;
    server_name domain1.com www.domain1.com;
    return 301 https://$host$request_uri;
}
 
server {
    listen 443 ssl;
    server_name domain1.com www.domain1.com;
 
    ssl_certificate /etc/ssl/certs/domain1.crt;
    ssl_certificate_key /etc/ssl/private/domain1.key;
 
    # Дополнительная конфигурация для вашего домена
}

server { listen 80; server_name domain1.com www.domain1.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name domain1.com www.domain1.com; ssl_certificate /etc/ssl/certs/domain1.crt; ssl_certificate_key /etc/ssl/private/domain1.key; # Дополнительная конфигурация для вашего домена }

3. Повторите те же шаги для второго домена, заменив `domain1` на `domain2`.

4. Создайте символические ссылки на эти файлы в директории `/etc/nginx/sites-enabled/`, чтобы активировать их конфигурации:

```
sudo ln -s /etc/nginx/sites-available/domain1.conf /etc/nginx/sites-enabled/domain1.conf
sudo ln -s /etc/nginx/sites-available/domain2.conf /etc/nginx/sites-enabled/domain2.conf
```

5. Перезапустите Nginx, чтобы применить изменения:

```
sudo systemctl restart nginx
```

Теперь у вас должно быть настроено два домена с двумя сертификатами в Nginx. Убедитесь, что у вас есть соответствующие SSL-сертификаты для каждого домена и что они указаны в конфигурационных файлах.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно