在主机上,我在端口4012上有docker容器,在docker容器中,webapp在端口3000上运行(0.0.0.0:4012->3000/tcp) 所以要访问webapp我只需转到http://hostname:4012,网页显示正常。 我希望能够转到http://hostname/metrics从我的浏览器运行相同的网页。
当我通过简单地在主机上的nginx.conf中添加一个位置来实现这个目的时:
location / metrics {
proxy_pass http://localhost:4012;
}
所有加载的都是index.html(我在http://localhost:4012和http://hostname/metrics看到相同的html源代码) 但是http://hostname/metrics没有加载运行webapp所需的javascript资产。 从开发人员工具我看到非代理网站加载资产,如下所示: http://hostname:4012/assets/styles.css 进入/ metrics的代理版本尝试加载如下: http://hostname/assets/styles.css
它没有将/ metrics附加到资产,就像它获取index.html一样... 我在这里错过了什么? 如果它意味着什么,则webapp正在nodejs express服务器上运行,该服务器正在侦听docker容器上的端口3000。
答案 0 :(得分:0)
您需要让应用程序以这种方式工作
location /metrics/ {
proxy_pass http://localhost:4012/;
sub_filter_once off;
sub_filter 'http://localhost:4012/' '$scheme://$host/metrics/';
sub_filter '<head>' '<head>\n<base href="hostname:4012">';
}
因此,向html添加<base>
标记有助于将/css
更改为/metrics/css
。然后使用sub_filter
更改绝对网址。