Как я могу разместить несколько приложений под одним доменным именем? - PullRequest
0 голосов
/ 14 октября 2018

Скажем, у меня есть доменное имя: 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 или чем-то подобном.

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

Ответы [ 3 ]

0 голосов
/ 22 октября 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;
}
0 голосов
/ 23 октября 2018

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

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

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

0 голосов
/ 15 октября 2018

Если вы решите использовать 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 {
    }
}
...