浏览器网址和HTTP请求

浏览器网址和HTTP请求

问题描述:

我目前正在构建一个网络组合,结合了我过去制作的许多较小的网络应用程序。在路线(/)中,您可以找到一个链接到这些其他小型网络应用程序的页面。例如,有一个路线链接(/ board-game),可以将您带到我过去制作的小型棋盘游戏网络应用程序。浏览器网址和HTTP请求

我正在努力的是这个。较小的网络应用程序棋盘游戏将html,css和javascript用于不包含前缀路线(/ board-game)的路线。因此,当一个棋盘游戏页面(/css/style.css)发出请求时,没有任何内容被加载,因为内容实际上在(/board-game/css/style.css)处。

我的问题是这样的。有没有办法将这些请求重新路由到适当的路线?我想避免重写这些小型项目的任何部分。有什么建议么?谢谢。

另外,这是我当前的nginx.conf文件。

worker_processes 1; 

events { 
    worker_connections 1024; 
} 

http { 
    upstream portfolio { 
    server portfolio-svc:8080; 
    } 

    upstream board-game { 
    server board-game-svc:8080; 
    } 

    server { 
    listen 80; 

    location/{ 
     proxy_pass http://portfolio/; 
    } 

    location /board-game { 
     proxy_pass http://board-game/; 
    } 
    } 
} 
+0

你可以显示你当前的nginx配置吗? – Paul

+0

@Paul签出问题修订版 –

+0

@Paul我开始认为我可以解决这个问题的唯一方法是动态设置给定“document.location.pathname”的请求路由。因为一旦内容被提供,它就在浏览器中,除非你告诉他们,代码/请求不知道它们在哪里。因此,而不是向/css/style.css发出请求,我需要向(document.location.pathname + /css/style.css)发出请求。你怎么看? –

你需要重写路径作为位置的部分,例如:

worker_processes 1; 

events { 
    worker_connections 1024; 
} 

http { 
    upstream portfolio { 
    server portfolio-svc:8080; 
    } 

    upstream board-game { 
    server board-game-svc:8080; 
    } 

    server { 
    listen 80; 

    location =/{ 
     proxy_pass http://portfolio/; 
    } 

    location = /board-game { 
     proxy_pass http://board-game/; 
     rewrite ^(.*)board-game(.*)$ http://board-game/$2 permanent; 
     sub_filter /css/ /board-game/css/ 
    } 
    } 
} 

你可能有一点匹配的发挥,但这是一般的想法。

+0

我不认为这是我正在寻找的。发生什么事情是,当棋盘游戏迷你应用程序向(/css/style.css)发出请求时,它在请求中根本不包含(/ board-game)。我想要发生的是,当板游戏迷你应用程序向(/css/style.css)发出请求时,请求实际上是(/board-game/css/style.css)。但我不能假定(/css/style.css)的请求被重写为(/board-game/css/style.css),因为其他迷你应用可能会向(/css/style.css)发出类似的请求);他们是自己的期望(/css/style.css) –

+0

啊,的确如此。通过更新我添加了sub_filter指令的地方查看。您必须将模块添加到您的nginx实例中。 http://nginx.org/en/docs/http/ngx_http_sub_module.html – Paul

+0

非常感谢!我有一本刚刚读过的nginx书,它根本没有提到sub_filter指令。虽然非常有帮助的指示 –