Как проверить субдомены 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
.