Как правильно настроить Nginx под два домена и два сертификата?
Добрый день. У сайта появился второй домен. Он как и первый идет на первый сервер. Человек, который круто шарил за 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;, и соответствующие сертификаты.
Фсё!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для настройки 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; # Дополнительная конфигурация для вашего домена }
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-сертификаты для каждого домена и что они указаны в конфигурационных файлах.