【问题标题】:Nginx location block not working for linksNginx 位置块不适用于链接
【发布时间】:2018-08-13 11:53:20
【问题描述】:

我有以下:

location /ron-swanson-quotes/ {
  return 301 /ron-swanson/;
}      

还有一个 SSR React next.js 应用。

此处的重写适用于从外部访问该站点的人,但如果我单击内部链接则无效。 nginx 是否能够监听节点中发生的事情或者 nginx 永远不知道它们?

编辑:当它与外部链接时,它会很好地重定向。当从应用程序 Nginx 日志中单击它时:

[2018-03-05T19:06:13+00:00] #######.xyz 71.211.##.## "GET /communicator/paulo-coelho/ HTTP/1.1" 304 "http://####.xyz/x-paulo-coelho-quotes-that-will-soothe-your-aching-heart/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36" 1.180

谢谢!

【问题讨论】:

  • 取决于,你是什么内部链接?它们与这条路径完全匹配,还是略有不同?
  • 它们完全匹配路径。我的直觉是 nginx 甚至不知道我编写它的方式,因为 server.js 负责应用程序的路由。内部链接基本上是 React Router / Next Router This 命中 server.js req.path('/next')
  • 您的index.html 服务怎么样?从 Nginx 还是从快速路线?
  • 快递。 Nginx 接收请求但发送 304,所以我认为这就是 express 发挥作用并像往常一样路由它的地方,(正常不是我想要的。Nginx 需要处理它。)

标签: javascript node.js express nginx next.js


【解决方案1】:

你前端的开发版也是SSR吗?您可能只需要将链接从相对路径更新为绝对路径,并确保不使用 React-Router Link 组件。 React 路由器可能正在处理相对路径,因为它将其视为前端路由,因此请使用绝对路径而不是链接组件来通过 Nginx 发送请求。

例子

而不是这个:

<Link to='/ron-swanson-quotes'>Ron Swanson</Link>

这样做:

<a href='https://yourronswansonwebsite.com/ron-swanson-quotes'>Ron Swanson</a>

干杯

【讨论】:

  • 感谢您的回答,但经过进一步调查,似乎是 nginx 问题。
【解决方案2】:

所以,

我们使用的包是custom-express-server。我意识到,与其使用 nginx,更好的选择是拥有一个重定向数组,并在自定义快速设置中进行重定向,并在 getInitialProps 中设置前端重定向。

当我们在 getInitialProps 中进行重定向时,页面转换中断了,因此我们不得不在其中进行硬编码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-01
    • 2016-05-18
    • 2019-07-21
    相关资源
    最近更新 更多