Поэтому я использую цифровой океан и nginx. Я хочу разместить несколько сайтов (мои проекты), но не хочу покупать домен для каждого.
Есть ли способ разместить несколько сайтов на nginx и digital ocean при доступе к ним через этот ip?
Поэтому я использую цифровой океан и nginx. Я хочу разместить несколько сайтов (мои проекты), но не хочу покупать домен для каждого.
Есть ли способ разместить несколько сайтов на nginx и digital ocean при доступе к ним через этот ip?
Ответы:
Есть два способа добиться этого. Либо вы делаете все по IP-адресу, с указанием местоположения подпапок, либо вам нужно будет купить один домен, а затем иметь несколько поддоменов в этом домене (поддоменам ничего не стоит, если вы покупаете домен, но уточните это у своего регистратора).
Я не советую использовать метод IP-адреса хотя бы потому, что очень важно запоминать IP-адреса, и если вы пытаетесь делиться информацией с другими, у вас также возникает проблема с запоминанием IP-адреса.
ВНИМАНИЕ! У нас нет никакой информации о ваших проектах, над которыми вы работаете. Нам нужно знать больше, чтобы определить, можете ли вы использовать этот подход, так как многие веб-фреймворки не будут работать без привязки к настоящему доменному имени.
ПРЕДУПРЕЖДЕНИЕ . В ходе продолжающегося тестирования этих примеров было обнаружено, что подход «Один домен, много подкаталогов» не требует любезного обратного проксирования данных к серверной части, поскольку запрошенный URI будет включать подкаталоги в URI; это может привести к тому, что на внутренних серверах возникнут проблемы с правильным поведением
С nginx
другой стороны, мы должны использовать «злой» подход к этому - один IP-адрес, множество документированных корней и подпапок. Это очень злой подход и может вызвать много проблем с некоторыми веб-фреймворками.
Предполагая nginx
установку по умолчанию в качестве базы из репозиториев, мы должны создать конфигурацию сайта для обработки каждого запроса подкаталога проекта. Тогда мы должны символически связать его в нужном месте.
Создайте /etc/nginx/sites-available/my-projects
со следующим (используйте это как шаблон / руководство - предполагается три проекта со статическим HTML и без динамических веб-приложений на PHP или Python или аналогичных, и вы можете копировать отдельные блоки местоположений и создавать новые местоположения соответственно; это также предполагает ваше IP сервера есть 1.2.3.4
).
server {
listen 80 default_server;
server_name 1.2.3.4;
location / {
return 410; # Default root of site won't exist.
}
location /proj1/ {
alias /var/www/proj1;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj2/ {
alias /var/www/proj2;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
location /proj3/ {
alias /var/www/proj3;
try_files $uri $uri/ =404;
# any additional configuration for non-static content
}
}
Теперь мы заменим конфигурацию по умолчанию (удалите ее) и добавим нашу:
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/my-projects /etc/nginx/sites-enabled
А затем перезапустите nginx
сервис:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
В этом разделе ответов предполагается, что у вас есть один домен и несколько поддоменов в нем. Если у вас нет этого, уточните это в своем вопросе
Для каждого nginx
server {}
блока в конфигурации вам нужно будет определить имя сервера и, вероятно, установить четвертый блок сервера как «перехватить все» для других запросов.
Пример: У меня есть три проекта,
proj1
,proj2
,proj3
. У меня есть домен под названиемevil-projects.net
(ПРИМЕЧАНИЕ: на самом деле не существует). Я хочу три разных поддоменов, по одному для каждойnginx
конфигурации, которая будет указывать на один проект каждый. Мой сервер находится на 1.2.3.4, и он будет обслуживать все сайты.
В приведенном выше сценарии у нас есть две части: домены и субдомены и конфигурация сервера.
Настройте DNS на своем хосте так, чтобы с записями DNS выполнялось следующее:
evil-projects.net IN A 1.2.3.4
proj1.evil-projects.net IN A 1.2.3.4
proj2.evil-projects.net IN A 1.2.3.4
proj3.evil-projects.net IN A 1.2.3.4
Теперь для ваших nginx
конфигураций. Я предполагаю, что у вас будут стандартные настройки nginx и пакеты из репозиториев (я буду использовать 14.04 в качестве базового примера). /etc/nginx/sites-available
Сначала у нас будет четыре файла конфигурации . Возможно, вам придется использовать sudo
при создании этих файлов, так как рассматриваемая папка принадлежит root
.
/etc/nginx/sites-available/catch-all
- это будет «ловить все» для любых недействительных доменов. Мне нравится возвращать http код ошибки 410 (GONE).
server {
listen 80 default_server;
server_name _;
return 410;
}
Далее мы настраиваем конфигурацию для ваших сайтов / проектов. Я собираюсь предположить, что они все статические файлы, хотя. Каждый из них подразумевает, что у вас есть разные веб-каталоги для каждого проекта на сервере (разные «корни документов»).
/etc/nginx/sites-available/proj1.evil-projects.net
:
server {
listen 80;
server_name proj1.evil-projects.net;
root /var/www/proj1;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj2.evil-projects.net
:
server {
listen 80;
server_name proj2.evil-projects.net;
root /var/www/proj2;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
/etc/nginx/sites-available/proj3.evil-projects.net
:
server {
listen 80;
server_name proj3.evil-projects.net;
root /var/www/proj3;
index index.htm index.html;
location / {
try_files $uri $uri/ =404;
}
}
Затем мы должны удалить конфигурацию «по умолчанию» /etc/nginx/sites-enabled
и добавить нашу собственную. Опять же, sudo
здесь необходимо.
sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/proj1.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj2.evil-projects.net /etc/nginx/sites-enabled/
sudo ln -s /etc/nginx/sites-available/proj3.evil-projects.net /etc/nginx/sites-enabled/
И тогда мы перезапускаем nginx
процесс:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.04 or newer, use this:
sudo systemctl restart nginx
Как только DNS распространяется, сайты будут работать как надо.
X.Y.Z.W/foo
,X.Y.Z.W/bar
)? Почему вы не можете получить домены для них? (Вы можете назначить один и тот же IP нескольким доменам)?