如何在一个域名下托管多个应用程序?

时间:2018-10-14 16:23:30

标签: nginx web-applications dns hosting static-site

假设我拥有一个域名:domain,并且在www.domain.com托管了一个静态博客。拥有静态网站的好处是,我可以在netlify之类的网站上免费托管它。

我现在想在同一个域名下拥有多个静态Webapp,因此不必为每个Webapp购买一个域名。我可以通过为我的应用添加子域来实现。添加子域非常容易。 This video举例说明了如何使用GoDaddy做到这一点。我可以为应用创建一个名为apps.domain.com的页面,其中apps是我的子域。

说,我有几个静态Web应用程序:app1app2app3。我不希望为每一个单独的子域,例如app1.domain.com。相反,我想让每个应用程序都是apps子域下的子文件夹。换句话说,我希望具有以下端点:

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

apps.domain.com主页上,我可能会有一个静态页面,列出可以访问的各种应用程序。

我该如何进行设置?我是否需要在apps.domain.com拥有某种服务器(例如nginx)?问题是我希望能够彼此独立且独立于应用子域来开发和部署app1,app2,app3等。这些应用中的每一个都可能由netlify或类似的东西托管。

也许这个问题有明显的答案,但目前我不知道该如何解决。我希望有一个朝着正确方向的指针。

4 个答案:

答案 0 :(得分:2)

如果您决定使用nginx,则以下内容将使您入门。这是一个非常基本的设置。您可能需要对其进行大量调整以适应您的要求。

apps.domain.com将投放/var/www中的index.html

apps.domain.com/app1将服务器/var/www/app1中的index.html

apps.domain.com/app2将服务器/var/www/app2中的index.html

apps.domain.com/app3将服务器/var/www/app3中的index.html

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 {
    }
}

答案 1 :(得分:0)

仅此一项:如果您将应用托管在外部服务器上,则可能需要设置nginx并使用代理插件将来自nginx安装的传入请求转发到外部Web服务器:

Check for working C compiler: C:/Program Files (x86)/Embarcadero/Studio  
/19.0/bin/bcc32x.exe
Check for working C compiler: C:/Program Files (x86)/Embarcadero/Studio    
/19.0/bin/bcc32x.exe -- broken
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.10/Modules
/CMakeTestCCompiler.cmake:52 (message):
The C compiler

"C:/Program Files (x86)/Embarcadero/Studio/19.0/bin/bcc32x.exe"

is not able to compile a simple test program.

It fails with the following output:

Change Dir: C:/Users/cld/Desktop/ArbeitsOrdnerCommit/OrginalDownload 
/CMakeFiles/CMakeTmp

Run Build Command:"C:/ninja/ninja.exe" "cmTC_f5c4c"
[1/2] Building C object CMakeFiles\cmTC_f5c4c.dir\testCCompiler.c.obj

FAILED: CMakeFiles/cmTC_f5c4c.dir/testCCompiler.c.obj 

"C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\bin\bcc32x.exe"    
-I"C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\include\windows\crtl"    
-I"C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\include\windows\sdk" 
-I"C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\include\windows\rtl"
-I"C:\Program Files (x86)\Embarcadero\RAD Studio\9.0\include\dinkumware64" 
-tM  -O0 -v -oCMakeFiles\cmTC_f5c4c.dir\testCCompiler.c.obj -c 
testCCompiler.c

CreateProcess failed: The system cannot find the file specified.
ninja: build stopped: subcommand failed.

对于需要转发的位置:

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

答案 2 :(得分:0)

您似乎是在过早地提出问题-使用天真的方法做尝试要遇到的实际问题是什么?!

通常最好的方法是让每个应用程序都在其自己的域或子域上运行;这样做是为了防止XSS攻击,因为其中一个应用程序中的漏洞可能导致整个域变得脆弱。这是因为安全功能通常是在浏览器中按每个域实现的,假定整个域都受单个方的控制(例如,一天结束时运行单个应用程序)。

否则,对于在单个域上拥有多个应用程序,实际上没有什么特别的事情要做。假设您在每个应用程序中的路径都是正确的(例如,相对于特定应用程序位置的完整路径而言,它们是相对的还是绝对的),坦率地说,实际上没有任何特定的问题需要注意。

答案 3 :(得分:0)

我最初使用 nginx 解决了这个问题。但是,我对此非常不满意,因为我需要为服务器付费,并且需要为其设置架构等。

据我所知,最简单的方法是利用 URL 重写。例如。 Netlify rewritesNext.js rewrites

重写允许您将传入的请求路径映射到不同的目标路径。

Here 是我网站中的一个示例用法。