浏览器网址和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/;
}
}
}
你需要重写路径作为位置的部分,例如:
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/
}
}
}
你可能有一点匹配的发挥,但这是一般的想法。
我不认为这是我正在寻找的。发生什么事情是,当棋盘游戏迷你应用程序向(/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) –
啊,的确如此。通过更新我添加了sub_filter指令的地方查看。您必须将模块添加到您的nginx实例中。 http://nginx.org/en/docs/http/ngx_http_sub_module.html – Paul
非常感谢!我有一本刚刚读过的nginx书,它根本没有提到sub_filter指令。虽然非常有帮助的指示 –
你可以显示你当前的nginx配置吗? – Paul
@Paul签出问题修订版 –
@Paul我开始认为我可以解决这个问题的唯一方法是动态设置给定“document.location.pathname”的请求路由。因为一旦内容被提供,它就在浏览器中,除非你告诉他们,代码/请求不知道它们在哪里。因此,而不是向/css/style.css发出请求,我需要向(document.location.pathname + /css/style.css)发出请求。你怎么看? –