`
darkbaby123
  • 浏览: 104245 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

一个愚蠢的原因导致的lighttpd的404错误

阅读更多
这几天学习Rails的部署,被Robbin大大的在 Linux 平台上安装和配置 Ruby on Rails 详解 说的热血沸腾,摩拳擦掌准备用lighttpd + FastCGI试试部署。不得不说走前辈的路就是比较平坦。全部配置完后,启动lighttpd服务器,问题来了,访问静态页面都没问题,但动态页面都是显示404页面。

然后查找原因:
dispatch.fcgi确实有执行权限,用控制台手动调用也可以正确返回结果;
errorlog没问题,accesslog记录一堆404,也算正常;
Rails的log就根本什么都没记,说明根本Rails分发器没被触发;
查看进程,确实启动了一个lighttpd服务器进程,和几个dispatch.fcgi进程。
最后发现是lighttpd.conf中把$HTTP["host"]写错了。

因为只是试试部署,Rails设定的是development环境,项目也在本机,
所以lighttpd.conf配置文件如下:
$HTTP["host"] == "127.0.0.1" {
  server.document-root = "/yourrails/public"
  server.error-handler-404 = "/dispatch.fcgi"
  fastcgi.server = (".fcgi" =>
    ("localhost" => 
      ("minprocs" => 10,
       "maxprocs" => 10,
       "socket" => "/tmp/rails.socket",
       "bin-path" => "/yourrails/public/dispatch.fcgi",
       "bin-environment" => ("RAILS_ENV" => "development")
      )
    )
  )
}

我在浏览器中敲的动态页面网址是:http://localhost/test

问题就在这句上
$HTTP["host"] == "127.0.0.1"

lighttpd认为"127.0.0.1"和"localhost"是不同的地址……所以,url里只有用"127.0.0.1",lighttpd才能正确识别这是该调用Rails分发器,而不是直接抛404错误的。
解决方法很简单,改成以下两种形式的任一种就行了:
# 第一种,完全匹配
$HTTP["host"] == "localhost"
# 第二种,正则匹配
$HTTP["host"] =~ "^localhost"


顺便说说这两种方式的区别:
$HTTP["host"] == "localhost" 这种方式可以匹配localhost加任意端口,如果Rails项目没有使用子域名的话,这种写法是最简单也最不容易出错的。
$HTTP["host"] =~ "^localhost" 这种方式是把域名+端口号和正则表达式做匹配的,所以这种正则"^localhost$"是不匹配"http://localhost:3000"的,想完全匹配只能用"^localhost\:3000$"。当然实际情况中没人会把正则写的这么死,这只是举例。
0
0
分享到:
评论

相关推荐

    最新lighttpd源码 lighttpd-1.4.22

    Lighttpd是一个德国人领导的开源软件,其根本的目的是提供一个专门针对高性能网站,安全、快速、兼容性好并且灵活的web server环境。具有非常低的内存开销,cpu占用率低,效能好,以及丰富的模块等特点。lighttpd是...

    lighttpd配置和启动脚本

    1. **启动脚本**:通常是一个名为`start-lighttpd.sh`的bash脚本,内容可能包含检查lighttpd是否已运行、设置工作环境变量、执行`lighttpd -f /path/to/lighttpd.conf`启动命令等步骤。 2. **停止脚本**:类似地,`...

    lighttpd-1.4.45_lighttpd服务器_

    lighttpd-1.4.45是lighttpd服务器的一个重要版本,它以其小巧、安全的特性,为开发者和嵌入式平台提供了一种高效的服务选择。 lighttpd,顾名思义,强调的是“轻”——轻量级、低资源消耗。它的设计目标是提供一个...

    搭建lighttpd+cgi的代码包

    本教程将详细介绍如何使用lighttpd和CGI来搭建一个动态网页服务器。 1. **理解lighttpd** lighttpd是一个快速、安全且配置简单的HTTP服务器,特别适合于资源有限的环境。它的特性包括模块化设计、高性能的事件模型...

    ubuntu lighttpd实现websocket

    如何在ubuntu上实现lighttpd 1、下载mongoose使用mongoose中的example中的websocket_chat,实现websocket 2、websocket_chat源码下载路径 官网:https://cesanta.com 论坛:...

    varnish+lighttpd配置

    Varnish和Lighttpd是两个非常重要...通过Varnish和Lighttpd的组合,你可以构建一个高效、灵活的Web服务器环境,有效提升网站的性能和用户体验。记住,配置过程中需要根据实际情况调整参数和策略,确保最佳的运行效果。

    lighttpd代码阅读资料

    总之,lighttpd的代码阅读是一个既挑战又富有成就感的过程。通过对源码的深入探索,开发者不仅能掌握lighttpd的工作机制,还能提升自己的编程技能和解决问题的能力。在实践中不断学习和积累,是成为一名优秀的...

    Lighttpd源码分析

    Lighttpd是一个轻量级的Web服务器,它在性能和资源使用上表现出色,被广泛应用于需要高性能、低资源占用的场景中。对于从事网络编程和服务器开发的专业人士来说,源码分析是一个深入了解和优化服务器行为、提升性能...

    ARM平台lighttpd服务器

    ARM平台的lighttpd服务器就是这样一个解决方案,尤其适用于嵌入式设备和资源有限的环境。本文将深入探讨lighttpd服务器在ARM架构上的应用及其特点。 首先,我们要了解什么是lighttpd。Lighttpd是一款开源的、高...

    lighttpd+php in android

    在Android平台上运行Web服务是一个独特的挑战,因为它是一个主要用于移动设备的操作系统。然而,通过将轻量级HTTP服务器lighttpd与PHP集成,我们能够在Android设备上构建一个小型但功能强大的Web环境。以下是对...

    lighttpd restfulapi cgi

    它的设计目标是提供一个安全、快速且配置简单的服务器环境,尤其适合动态内容的处理。 **二、RESTful API概念** REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于HTTP协议,...

    lighttpd-1.4.20-cmake

    2. **解压源代码**:使用`tar -zxvf lighttpd-1.4.20.tar.gz`命令进行解压,这将创建一个名为`lighttpd-1.4.20`的目录,里面包含了所有的源代码和相关文档。 3. **初始化CMake**:进入解压后的目录,运行`cmake .`...

    lighttpd-1.4.20源代码

    每个模块都是一个单独的`.c`文件,如`mod_access.c`、`mod_rewrite.c`等,它们通过lighttpd的模块接口注册和执行各自的功能。 6. **内存管理** lighttpd在内存管理上注重效率和安全性,`lighttpd-1.4.20/src/...

    lighttpd分析

    lighttpd是一个轻量级的Web服务器,以其高效、低资源消耗和模块化的设计而广受赞誉。在处理网络请求时,lighttpd采用了一种混合的网络模型——多进程加上多路复用技术,如select或epoll。这种模型旨在提供高效的并发...

    修复CGI无法通过html传递参数表问题的lighttpd

    在lighttpd-1.4.26版本中,存在一个已知的缺陷,即当用户尝试通过HTML表单提交数据到CGI脚本时,路径、文件名等关键参数未能正确地以形参表的形式传递给CGI。这可能导致上传文件功能失效,或者在需要获取用户输入的...

    lighttpd with H264 support

    2. **解压并定位到lighttpd源代码**:确保你已经下载了lighttpd的源代码,并将其解压到一个工作目录。然后将补丁文件应用到源代码上,通常使用`patch`命令。 3. **编译和安装**:应用补丁后,需要重新编译lighttpd...

    lighttpd基础入门——状态机与插件

    每个连接(事件)都是一个`connection`实例(`con`)。状态的切换完全取决于`con->state`的变化。插件通过处理这些`con`实例来进行业务逻辑的实现。 #### 三、插件系统 插件是Lighttpd功能扩展的主要手段,它们可以...

Global site tag (gtag.js) - Google Analytics