假设我拥有一个域名:domain
,并且在www.domain.com
托管了一个静态博客。拥有静态网站的好处是,我可以在netlify之类的网站上免费托管它。
我现在想在同一个域名下拥有多个静态Webapp,因此不必为每个Webapp购买一个域名。我可以通过为我的应用添加子域来实现。添加子域非常容易。 This video举例说明了如何使用GoDaddy做到这一点。我可以为应用创建一个名为apps.domain.com
的页面,其中apps
是我的子域。
说,我有几个静态Web应用程序:app1
,app2
,app3
。我不希望为每一个单独的子域,例如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或类似的东西托管。
也许这个问题有明显的答案,但目前我不知道该如何解决。我希望有一个朝着正确方向的指针。
答案 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 rewrites、Next.js rewrites。
重写允许您将传入的请求路径映射到不同的目标路径。
Here 是我网站中的一个示例用法。