Как разместить несколько приложений под одним доменным именем?

Скажем, у меня есть доменное имя: domain, и я веду статический блог по адресу www.domain.com. Преимущество статического сайта в том, что я могу бесплатно разместить его на таких сайтах, как netlify.

Теперь я хотел бы иметь несколько статических веб-приложений под одним и тем же доменным именем, поэтому мне не нужно покупать домен для каждого веб-приложения. Я могу сделать это, добавив поддомен для своих приложений. Добавить поддомен достаточно просто. В этом видео показано, как это сделать, например, с GoDaddy. Я могу создать страницу для своих приложений под названием apps.domain.com, где apps — мой субдомен.

Скажем, у меня есть несколько статических веб-приложений: app1, app2, app3. Мне не нужен отдельный поддомен для каждого из них, например, app1.domain.com. Вместо этого я хотел бы, чтобы каждое приложение было вложенной папкой в ​​поддомене apps. Другими словами, я хотел бы иметь следующие конечные точки:

  • apps.domain.com/app1
  • apps.domain.com/app2
  • apps.domain.com/app3

На главной странице apps.domain.com у меня, вероятно, будет статическая страница со списком различных приложений, к которым можно получить доступ.

Как мне настроить это? Нужен ли мне какой-либо сервер (например, nginx) по адресу apps.domain.com? Дело в том, что я хотел бы иметь возможность разрабатывать и развертывать app1, app2, app3 и т. д. независимо друг от друга и независимо от поддомена приложений. Каждое из этих приложений, вероятно, будет размещаться на netlify или чем-то подобном.

Может быть, есть очевидный ответ на этот вопрос, но я понятия не имею, как это сделать в данный момент. Буду признателен за указатель в правильном направлении.


person bluprince13    schedule 14.10.2018    source источник
comment
Вместо этого рассмотрите возможность задать вопрос на webmasters.stackexchange.com, но учтите, что это вопросы о том, как лучше сделать X основаны на мнении и, следовательно, не по теме в сети.   -  person TylerH    schedule 14.10.2018


Ответы (4)


Что-то вроде строк ниже должно помочь вам начать, если вы решите использовать nginx. Это очень простая установка. Возможно, вам придется немного изменить его в соответствии с вашими требованиями.

apps.domain.com будет показывать index.html из /var/www

apps.domain.com/app1 будет сервером index.html из /var/www/app1

apps.domain.com/app2 будет сервер index.html из /var/www/app2

apps.domain.com/app3 будет сервер index.html из /var/www/app3

http {
  log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

  access_log  /var/log/nginx/access.log  main;

  sendfile            on;
  tcp_nopush          on;
  tcp_nodelay         on;
  keepalive_timeout   65;
  types_hash_max_size 2048;
  include             /etc/nginx/mime.types;
  default_type        application/octet-stream;
  index               index.html;

  include /etc/nginx/conf.d/*.conf;

  server {
    listen       80 default_server;
    listen       [::]:80 default_server;
    server_name  apps.domain.com;
    root         /var/www;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    location / {

    }

    location /app1 {

    }

    location /app2 {

    }

    location /app3 {

    }    

    error_page 404 /404.html;
        location = /40x.html {
    }

    error_page 500 502 503 504 /50x.html;
        location = /50x.html {
    }
}
person ben5556    schedule 15.10.2018

Только одно дополнение: если вы размещаете приложения на внешнем сервере, вы можете настроить nginx и использовать плагин прокси для пересылки входящих запросов от вашей установки nginx на внешний веб-сервер:

web-browser -> nginx -> external-web-server

И для местоположения, которое необходимо переадресовать:

location /app1 {
   proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
   proxy_set_header Host $http_host;
   proxy_redirect off;
   proxy_pass https://url-of-external-webserver;
}
person Andreas Happe    schedule 22.10.2018

Казалось бы, вы задаете вопрос преждевременно — какие реальные проблемы у вас возникают, когда вы делаете то, что пытаетесь сделать, используя наивный подход?!

Как правило, лучше всего запускать каждое приложение в своем собственном домене или поддомене; это делается для предотвращения XSS-атак, когда уязвимость в одном из ваших приложений может привести к тому, что весь ваш домен станет уязвимым. Это связано с тем, что функции безопасности обычно реализуются в браузере для каждого домена, где предполагается, что весь домен находится под контролем одной стороны (например, запуск одного приложения в конце дня).

В противном случае нет ничего особенного, что нужно было бы сделать, чтобы иметь несколько приложений в одном домене. При условии, что ваши пути в каждом приложении правильные (например, они либо относительные, либо абсолютные с полным путем к местоположению конкретного приложения), откровенно говоря, на самом деле нет никаких конкретных проблем, о которых нужно знать.

person cnst    schedule 23.10.2018

Сначала я решил эту проблему с помощью nginx. Но я был очень недоволен этим, потому что мне нужно было заплатить за сервер, настроить для него архитектуру и т. д.

Самый простой способ сделать это, который я знаю на сегодняшний день, — использовать перезапись URL. Например. Netlify переписывает, Next.js перезаписывает.

Перезаписи позволяют сопоставить путь входящего запроса с другим путем назначения.

здесь приведен пример использования в мой веб-сайт.

person bluprince13    schedule 25.01.2021