Размещать их в разных папках ( X.Y.Z.W/foo, X.Y.Z.W/bar)? Почему вы не можете получить домены для них? (Вы можете назначить один и тот же IP нескольким доменам)?
Муру
Для этого вам понадобится несколько доменов. Существует бесплатная служба доменов: freenom.com предоставляет вам бесплатные домены .tk, .ml, .ga, .cf и .gq.
TheWanderer
@muru Я думаю, они не хотят тратить деньги на несколько доменов. Они хотят, чтобы несколько сайтов имели один URL.
Странник
@ Zacharee1 им нужен только один домен, и они могут делать субдомены. Если они откажутся сделать это, им придется использовать злой IP-метод, который в зависимости от типа приложения / проекта, который они используют, может не поддерживать методы определения местоположения «подпапки».
Томас Уорд
@ThomasW. Я думал, что поддоменов не будет вариант
TheWanderer
Ответы:
17
Есть два способа добиться этого. Либо вы делаете все по 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
}
}
Теперь мы заменим конфигурацию по умолчанию (удалите ее) и добавим нашу:
# If on 14.04, use this:
sudo service nginx restart
# If on 15.10 or newer, use this:
sudo systemctl restart nginx
Подход с одним доменом и несколькими поддоменами.
В этом разделе ответов предполагается, что у вас есть один домен и несколько поддоменов в нем. Если у вас нет этого, уточните это в своем вопросе
Для каждого nginxserver {}блока в конфигурации вам нужно будет определить имя сервера и, вероятно, установить четвертый блок сервера как «перехватить все» для других запросов.
Пример: У меня есть три проекта, proj1, proj2, proj3. У меня есть домен под названием evil-projects.net(ПРИМЕЧАНИЕ: на самом деле не существует). Я хочу три разных поддоменов, по одному для каждой nginxконфигурации, которая будет указывать на один проект каждый. Мой сервер находится на 1.2.3.4, и он будет обслуживать все сайты.
В приведенном выше сценарии у нас есть две части: домены и субдомены и конфигурация сервера.
(1): настройка DNS
Настройте 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
(2): конфигурация NGINX на сервере (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;
}
Далее мы настраиваем конфигурацию для ваших сайтов / проектов. Я собираюсь предположить, что они все статические файлы, хотя. Каждый из них подразумевает, что у вас есть разные веб-каталоги для каждого проекта на сервере (разные «корни документов»).
в этой конфигурации, где бы вы разместили блоки для proxy_cache? Предположим, что proj1, proj2, proj3 имеют все одинаковые конечные точки с разными корнями и хотят кэшировать ответ на разных папках.
X.Y.Z.W/foo
,X.Y.Z.W/bar
)? Почему вы не можете получить домены для них? (Вы можете назначить один и тот же IP нескольким доменам)?Ответы:
Есть два способа добиться этого. Либо вы делаете все по IP-адресу, с указанием местоположения подпапок, либо вам нужно будет купить один домен, а затем иметь несколько поддоменов в этом домене (поддоменам ничего не стоит, если вы покупаете домен, но уточните это у своего регистратора).
Я не советую использовать метод IP-адреса хотя бы потому, что очень важно запоминать IP-адреса, и если вы пытаетесь делиться информацией с другими, у вас также возникает проблема с запоминанием IP-адреса.
Подход с одним IP, многими подпапками, без имени домена
С
nginx
другой стороны, мы должны использовать «злой» подход к этому - один IP-адрес, множество документированных корней и подпапок. Это очень злой подход и может вызвать много проблем с некоторыми веб-фреймворками.Предполагая
nginx
установку по умолчанию в качестве базы из репозиториев, мы должны создать конфигурацию сайта для обработки каждого запроса подкаталога проекта. Тогда мы должны символически связать его в нужном месте.Создайте
/etc/nginx/sites-available/my-projects
со следующим (используйте это как шаблон / руководство - предполагается три проекта со статическим HTML и без динамических веб-приложений на PHP или Python или аналогичных, и вы можете копировать отдельные блоки местоположений и создавать новые местоположения соответственно; это также предполагает ваше IP сервера есть1.2.3.4
).Теперь мы заменим конфигурацию по умолчанию (удалите ее) и добавим нашу:
А затем перезапустите
nginx
сервис:Подход с одним доменом и несколькими поддоменами.
Для каждого
nginx
server {}
блока в конфигурации вам нужно будет определить имя сервера и, вероятно, установить четвертый блок сервера как «перехватить все» для других запросов.В приведенном выше сценарии у нас есть две части: домены и субдомены и конфигурация сервера.
(1): настройка DNS
Настройте DNS на своем хосте так, чтобы с записями DNS выполнялось следующее:
(2): конфигурация NGINX на сервере (1.2.3.4)
Теперь для ваших
nginx
конфигураций. Я предполагаю, что у вас будут стандартные настройки nginx и пакеты из репозиториев (я буду использовать 14.04 в качестве базового примера)./etc/nginx/sites-available
Сначала у нас будет четыре файла конфигурации . Возможно, вам придется использоватьsudo
при создании этих файлов, так как рассматриваемая папка принадлежитroot
./etc/nginx/sites-available/catch-all
- это будет «ловить все» для любых недействительных доменов. Мне нравится возвращать http код ошибки 410 (GONE).Далее мы настраиваем конфигурацию для ваших сайтов / проектов. Я собираюсь предположить, что они все статические файлы, хотя. Каждый из них подразумевает, что у вас есть разные веб-каталоги для каждого проекта на сервере (разные «корни документов»).
/etc/nginx/sites-available/proj1.evil-projects.net
:/etc/nginx/sites-available/proj2.evil-projects.net
:/etc/nginx/sites-available/proj3.evil-projects.net
:Затем мы должны удалить конфигурацию «по умолчанию»
/etc/nginx/sites-enabled
и добавить нашу собственную. Опять же,sudo
здесь необходимо.И тогда мы перезапускаем
nginx
процесс:Как только DNS распространяется, сайты будут работать как надо.
источник