作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在将 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
,但我不确定为什么。更令人困惑的是,行为似乎因我使用的浏览器而异。
最佳答案
像这样的成像:
1/如果我的链接是:http://localhost:8080/us/about-us
2/它将转到您的代理并满足第一个条件:
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/
我是一名优秀的程序员,十分优秀!