Nginx не будет обслуживать ничего, кроме www.myserver.org

Nginx не будет обслуживать ничего, кроме www.myserver.org

Согласнодокументация nginx, серверный блок ниже должен работать для обоихhttps://joycegroup.orgиhttps://www.joycegroup.org

server {

listen 443 ssl;

ssl_certificate /etc/ssl/certs/joycegroup_org_chain.crt;

ssl_certificate_key /etc/ssl/private/joycegroup_org.key;

root /var/www/joycegroup_org/;

server_name joycegroup.org www.joycegroup.org;

location / {
index index.html index.htm index.html index.php;
}

}

Это работает дляhttps://www.joycegroup.org, нетhttps://joycegroup.org. Что я делаю не так?

В конечном итоге я также захочу перенаправить http на https, но сначала попытаюсь разобраться с этой проблемой.

Извините за такую ​​примитивность вопроса. Я уже несколько часов бьюсь головой о стену.

решение1

www.joycegroup.orgсамо по себе не означает, что joycegroup.org (без www) является допустимой записью DNS.

Обратите внимание, что вы не можете настроить запись CNAME для корня домена (Почему запись CNAME нельзя использовать в вершине (корне) домена?), поэтому вам нужна запись категории А.

Вы можете показать, что это проблема разрешения DNS, разными способами, например curl https://joycegroup.org. Если отображается curl: (6) Could not resolve host: joycegroup.com; Name or service not known, то это проблема DNS.

Вы можете дополнительно подтвердить, что проблема связана с DNS, связанным с разницей между двумя записями, запустив nslookup, host или dig в обоих случаях и сравнив вывод.

Некоторые примеры:

  • host(Линукс):
$ host <record with www>

<record with www> has address 192.168.1.10

$ host <record without www>

<no output is shown>

  • nslookup(Линукс):
$ nslookup <record without www>
Server:         <dns server ip>
Address:        <dns server ip>#53

*** Can't find <record without www>: No answer

$ nslookup <record with www>

Server:         <dns server ip>
Address:        <dns server ip>#53

Name:   <record with www>
Address: 192.168.1.10
  • nslookup(Окна):
C:\Users\myuser> nslookup <record without www>

Server:  <dns server>
Address:  <dns server ip>

Name:    <record without www>

Обратите внимание, что IP-адрес не отображается. Он возвращает что-то, поскольку каждая зона имеет свою собственную запись, хотя это не запись A (связанная с IP-адресом), а запись SOA.

С другой стороны, если вы запросите запись A, которая действительно существует, вы получите классический ответ:

C:\Users\myuser>nslookup <record with www>

Server:  <dns server>
Address:  <dns server ip>

Name:    <record with www>
Address:  192.168.1.10

решение2

Как ответил A. Darwin, у вас не установлена ​​запись DNS для joycegroup.org:

c-nan@mba-c-nan ~ % dig www.joycegroup.org A +short  
50.116.60.151
c-nan@mba-c-nan ~ % dig joycegroup.org A +short    
c-nan@mba-c-nan ~ % 

Вам следует добавить следующую DNS A-запись

joycegroup.org  IN  A   50.116.60.151

у вашего DNS-провайдера:

c-nan@mba-c-nan ~ % dig joycegroup.org NS +short
dns1.registrar-servers.com.
dns2.registrar-servers.com.
c-nan@mba-c-nan ~ % 

Если вы хотите перенаправить ВЕСЬ http-трафик на https, вы можете настроить следующее:

server {
    listen 80 default_server;
    server_name _;
    return 301 https://$host$request_uri;
}

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

server {
    listen 80;
    server_name www.joycegroup.com joycegroup.com;
    return 301 https://joycegroup.com$request_uri;
}

Связанный контент