Как проверить субдомены nginx на localhost

Я хочу протестировать субдомены nginx перед загрузкой конфигурации на сервер. Могу ли я проверить его на localhost? Я пытаюсь

server {
    listen       80;
    server_name  localhost;

    location / {
        proxy_pass http://localhost:8080;
    }
}

server {
    listen       80;
    server_name  sub.localhost;

    location / {
        proxy_pass http://localhost:8080/sub;
    }
}

И это не работает. Shoulld я меняю файл моих хостов, чтобы заставить его работать? Кроме того, после загрузки сайта на сервер я должен изменить записи DNS и добавить sub.mydomain.com?

Ответы

Ответ 1

Да, добавьте "127.0.0.1 sub.localhost" в ваш файл hosts. Этот саб должен быть решен как-то. Это должно работать.

Затем, когда вы будете готовы перейти в сеть, добавьте запись a или cname для субдомена sub.

Когда я использую proxy_pass, я также включаю proxy.conf из nginx. http://wiki.nginx.org/HttpProxyModule

Ответ 2

Для вашего общедоступного веб-сервера со своим собственным доменным именем вам просто нужно добавить каноническое имя, используя запись CNAME в вашей конфигурации DNS:

CNAME    *    example.com.

Как только это будет сделано, установите настройку nginx

server_name  *.example.com example.com;

В вашей локальной настройке вы можете сохранить ту же конфигурацию для nginx, но если у вас нет локальной настройки DNS, вам придется отредактировать файл /etc/hosts и добавить каждый поддомен вручную. подстановочные знаки не работают в файле /etc/hosts.

127.0.0.1  abc.example.com def.example.com ghi.example.com

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

Ответ 3

В ОС на базе Linux просто отредактируйте файл sudo /etc/hosts и измените 127.0.0.1 localhost на 127.0.0.1 *.localhost.

Таким образом, в /etc/nginx/sites-enabled/<environment>/<your_project_name> и server_name <subdomain>.localhost /etc/nginx/sites-enabled/<environment>/<your_project_name> с /etc/nginx/sites-enabled/<environment>/<your_project_name> редактировать server_name ключ в качестве <subdomain>.localhost.

Перезагрузите nginx и сетевой сервис.

$ sudo service nginx reload
$ sudo service networking reload

А затем попробуйте http://<subdomain>.localhost в строке URL.

Меня устраивает.

ОБНОВИТЬ

На мой взгляд, лучшим решением является создание виртуального сервера, который отвечает, только если субдомен не существует, в /etc/nginx/sites-enabled/development/default как сервер по умолчанию (помните, что по умолчанию вы можете определить только один сервер).

server {
  listen 80 default_server;
  root /var/www/html/errors/404;
  server_name *.localhost *.<host-name>;

  location / {
    index subdomain.html;
  }

}

Убедитесь, что в nginx.conf (обычно в /etc/nginx/nginx.conf) есть include/etc/nginx/sites-enabled/**/*; на этом виртуальном сервере работают. Если нет, поставьте его и запустите $ sudo service nginx reload.

В этом случае нет необходимости помещать *.localhost в /etc/hosts, а только в localhost.