使用nginx反向代理,加载不到静态文件

10.240.218.91上部署了一个工具(类似jupyter一样),可以通过https://10.240.218.91/直接访问,并使用。

现在想通过https://10.240.218.90/vtune-o...这个地址,打开这个工具,也就是能获取https://10.240.218.91/上的内容,nginx配置如下:


location = /vtune-open {
    proxy_pass https://10.240.218.91/;
    proxy_set_header Host $host;
    client_max_body_size 5000m;
    error_page 502 =203 /50x.html;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
}

问题是https://10.240.218.91/的静态资源,比如https://10.240.218.91/socket.js现在变成了访问https://10.240.218.90/socket.js,结果就是not found。

我搜索了一圈,有人建议是只要包含js,css之类后缀的,都再次反向代理,全部指向10.240.218.91。

但是,因为本身https://10.240.218.90/下面,本身是一个完整的项目,有很多自己的静态资源,这样就使得https://10.240.218.90/无法正常访问了.

这种问题,能通过修改nginx配置做到吗?还是需要通过前端来弄呢?

nginx第一次配置,实在没办法了,救救孩子吧。。。

补:最后总结,就是想要实现,rewrite到https://10.240.218.91/,但使得浏览器地址保持https://10.240.218.90/vtune-o...不变。。。我搜了一圈,好像实现不了。。。唉

阅读 19.1k
4 个回答

如果你访问的工具是个网页的话建议你不要用二级路径。因为网页中会再次请求js和css以及其他静态资源,而这些静态资源是不会带上二级路径/vtune-open/ 的

可以用端口的方式,比如你在90机器上开启8090端口,然后反向代理到91的机器

sever {
  listen 8090;
  location / {
    proxy_pass https://10.240.218.91;
    proxy_set_header Host $host;
    client_max_body_size 5000m;
    error_page 502 =203 /50x.html;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
}

rewrite 只能解决你的一部分问题

静态资源不要杂糅在一起,按文件夹、或者归并在 对象存储 上,比较推荐

location = /aaa/ccc/ {
  rewrite ^/aaa/ccc/(.*) https://bbb/$1 permanent;
  break;
}
server {                                                                                                                                                                                                           2     server_name   localhost;
    listen        80;
    error_page    500 502 503 504  /50x.html;
    location      / {
        root      html;
    }

    location /aaa/ {
        root /var/www/;
    }

    location /bbb/ccc/ {
        proxy_pass http://127.0.0.1:80/aaa/;
    }
}

要点在于 location /aaa/ { ... } 下的 root /var/www 是会拼接 location 里的路径的。比如说访问 http://your.domain.com/aaa/test1.txt,实际访问的文件就是 /var/www/aaa/test1.txt,而不是 /var/www/test1.txt

建议自己起一个 nginx 服务器多试试。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题