【问题标题】:nginx Sinatra head meta refresh 404nginx Sinatra 头部元刷新 404
【发布时间】:2018-08-30 01:32:16
【问题描述】:

由于某种原因,页面正在转发到 nginx-served 404 页面。除了这一页之外,该站点正在运行。在我的登陆页面上,我在标题中有以下内容:

<meta http-equiv="refresh" content="5;URL=/second">

即使是硬编码http://mydomain.local/second 也提供相同的 404。

这是一个Sinatra 部署。

get "/second" do
  @title = "my Title"
  erb :index
end

我在想我在nginx.conf 中的locations 指令可能有点古怪:

location / {
    autoindex                       off;
    try_files                       $uri $uri/ $uri/$request =404;
    index                           /;
    }

任何人都知道为什么Sinatra 不会捕获路线而只是提供文件?干杯。

【问题讨论】:

    标签: nginx sinatra refresh nginx-location


    【解决方案1】:

    让我们分解一下:

    autoindex off;
    

    你不需要指定这个,默认是关闭的。

    try_files $uri $uri/ $uri/$request =404;
    

    尝试按此顺序匹配对文件的请求,提供第一个匹配的文件。如果没有匹配,返回 404。你的请求是http://mydomain.local/second,所以你告诉 Nginx 去寻找:

    1. webroot/秒
    2. webroot/秒/
    3. webroot/second/GET /second HTTP/1.1
    4. 返回 404

    index 指令告诉 Nginx 如何处理以斜杠结尾的请求,您通常会指定可能是项目中的索引文件的文件,例如 index.php、index.html 等。您并没有真正使用它和 @ 987654324@ 在一起,因为它们的用途相似。

    另外值得注意的是,Nginx 会在任何没有斜杠且不以文件扩展名结尾的请求中添加斜杠,因此get "/second" do 也可能需要更改为get "/second/" do,因为我怀疑 Sinatra 是否会看到没有附加斜杠的请求

    【讨论】:

    • 1.啊很高兴知道。 2. Sinatra 使用/ 命名法,所以$uri 应该可以工作。本质上,我要的是GET /second,但要的是404。无论如何,即使该页面上的刷新和链接设置为/second/,我仍然收到404
    • 它不作为单独的服务器运行吗?
    • 是否作为单独的服务器运行? SinatraRackPassenger 之后工作,但它是堆栈的一部分。我有一些站点的路由请求为/alpha。所以发生了一些可疑的事情。
    • 我对 Sinatra 没有经验,但我假设它会创建自己的 http 服务器,在自己的 ip:port 上运行,对吧?
    • 不。这一切都由nginx 处理。 Sinatra 只是一个框架。您也可以使用webrick,或Apache。这是一个基于Rack 的快速小框架。最近它被测量为比 Rails 快 7 倍。
    猜你喜欢
    • 1970-01-01
    • 2021-03-08
    • 2021-05-20
    • 2018-09-20
    • 2021-06-05
    • 2019-10-12
    • 2019-06-28
    • 2021-12-11
    • 2020-07-21
    相关资源
    最近更新 更多