gpt4 book ai didi

nginx - 相对链接不适用于 nginx 反向代理

转载 作者:行者123 更新时间:2023-12-03 16:59:00 24 4
gpt4 key购买 nike

我正在将 NextJs 应用程序的基本路径反向代理到每个国家/地区的不同域上:

events {}
http {
upstream nextjs_upstream {
server localhost:3000;
}

server {
listen 8080 default_server;

server_name _;

server_tokens off;

location / {
proxy_pass http://nextjs_upstream/us/;
}
location /_next/static {
proxy_pass http://nextjs_upstream/_next/static;
}
}
}
这工作正常,我可以转到 http://localhost:8080并查看我希望看到的内容 - 来自 http://localhost:3000/us/ 的页面.
此外,如果我添加这样的东西:
<Link href='/about-us'>
<a>NextJs Link</a>
</Link>
然后点击它,我正确地被发送到 http://localhost:8080/about-us ,显示来自 http://localhost:3000/us/about-us 的内容.
这一切都按预期工作,而且非常完美。
但是,我也有一些硬编码 <a>页面上的标签:
<a href="/about-us">
Normal link
</a>
您可以看到这是一个典型的相对 URL 链接。但是,当我点击它时,浏览器会将我导​​航到 http://localhost:8080/us/about-us/ ,当然是 404s,因为它被代理到 http://localhost:3000/us/us/about-us/ ,它不存在。
如果我这样做 window.location = '/about-us' 也会发生此行为然而,在浏览器控制台中, window.location.href 的输出是 "http://localhost:8080/" .
看起来像是对 http://localhost:8080/about-us 的请求最终得到 308 到 http://localhost:8080/about-us ,但我不确定为什么。更令人困惑的是,行为似乎因我使用的浏览器而异。
我在这里做错了什么?我需要重写 req 路径吗?

最佳答案

像这样的成像:
1/如果我的链接是:http://localhost:8080/us/about-us2/它将转到您的代理并满足第一个条件:

location / {
proxy_pass http://nextjs_upstream/us/;
}
3/之后,您的服务器将添加 us链接的路径及其导致的原因: http://localhost:3000/us/us/about-us/我的建议是添加 if clause用于移除 /us在您的反向代理配置文件中:
if ($request_uri ~ ^(.*)/us/) {
rewrite (.*)/us/(.*)$ $1/$2;
}
您的配置文件如下所示:
events {}
http {
upstream nextjs_upstream {
server localhost:3000;
}

server {
listen 8080 default_server;

server_name _;

server_tokens off;

if ($request_uri ~ ^(.*)/us/){
rewrite (.*)/us/(.*)$ $1/$2;
}
location / {
proxy_pass http://nextjs_upstream/us/;
}
location /_next/static {
proxy_pass http://nextjs_upstream/_next/static;
}
}
}

关于nginx - 相对链接不适用于 nginx 反向代理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63883308/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com