Nginx代理 资源加载404,并且主页面hash值传递丢失。
背景
一个是内网系统A,经过里约网管映射出外网地址
另外一个是部署到互联网的系统B Nginx代理了A系统,和B系统同域
引用gpt回答 有帮助 采纳一下
根据描述的场景,内网系统A通过NAT网关映射到外网,外部系统B通过Nginx反向代理来访问内网系统A。要使得这种跨网络的反向代理配置成功,可以考虑以下几点:
在介绍一致性哈希的概念时,我们理想化的将3台服务器均匀的映射到了hash环上,如下图所示:
在实际的映射中,服务器可能会被映射成如下模样:
聪明如你一定想到了,如果服务器被映射成上图中的模样,那么被缓存的对象很有可能大部分集中缓存在某一台服务器上,如下图所示:
上图中,1号、2号、3号、4号、6号图片均被缓存在了服务器A上,只有5号图片被缓存在了服务器B上,服务器C上甚至没有缓存任何图片,如果出现上图中的情况,A、B、C三台服务器并没有被合理的平均的充分利用,缓存分布的极度不均匀,而且,如果此时服务器A出现故障,那么失效缓存的数量也将达到最大值,在极端情况下,仍然有可能引起系统的崩溃,上图中的情况则被称之为hash环的偏斜,那么,我们应该怎样防止hash环的偏斜呢?一致性hash算法中使用”虚拟节点”解决了这个问题。
针对你提到的问题,需要通过Nginx的配置来解决。下面是具体的解决方案:
location /
部分。/path/to/resource
,同时Nginx的root
路径配置为/path/to
,则代理的路径应该配置为/resource
。sudo nginx -s reload
。这样就可以重新访问系统A并加载资源,应该不再出现404错误了。
主页面的hash值丢失问题解决: 当从系统A的主页面跳转到其他页面时,主页面的hash值丢失可能是因为Nginx没有正确地传递URL参数导致的。要解决这个问题,可以按照以下步骤进行修复:
location /
部分。proxy_set_header
指令来传递URL参数。例如,如果hash值是通过URL参数hash
传递的,则可以添加以下指令: c location / { ... proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header hash $arg_hash; // 传递hash值的参数名 }
sudo nginx -s reload
。以上是针对你提到的问题的解决方案,通过检查和修复Nginx的配置来解决404错误和传递主页面的hash值丢失问题。希望可以对你有所帮助,如果有其他问题,请随时提问。