I'm attempting to use lighttpd and fastcgi to run a small flask application. When I try to start lighttpd, it starts the server just fine, but when I try to connect in the browser, it hangs without giving any meaningful error messages.
I'm running this on a Raspberry Pi 3. The OS is Raspbian Stretch Lite.
Here is is the lighttpd log output.
2018-01-04 19:56:16: (log.c.217) server started
2018-01-04 19:56:19: (response.c.350) -- splitting Request-URI
2018-01-04 19:56:19: (response.c.351) Request-URI : /
2018-01-04 19:56:19: (response.c.352) URI-scheme : http
2018-01-04 19:56:19: (response.c.353) URI-authority : 172.30.26.14
2018-01-04 19:56:19: (response.c.354) URI-path (raw) : /
2018-01-04 19:56:19: (response.c.355) URI-path (clean): /
2018-01-04 19:56:19: (response.c.356) URI-query :
2018-01-04 19:56:19: (response.c.350) -- splitting Request-URI
2018-01-04 19:56:19: (response.c.351) Request-URI : /application.fcgi/
2018-01-04 19:56:19: (response.c.352) URI-scheme : http
2018-01-04 19:56:19: (response.c.353) URI-authority : 172.30.26.14
2018-01-04 19:56:19: (response.c.354) URI-path (raw) : /application.fcgi/
2018-01-04 19:56:19: (response.c.355) URI-path (clean): /application.fcgi/
2018-01-04 19:56:19: (response.c.356) URI-query :
2018-01-04 19:56:19: (response.c.490) -- before doc_root
2018-01-04 19:56:19: (response.c.491) Doc-Root : /var/www/
2018-01-04 19:56:19: (response.c.492) Rel-Path : /application.fcgi/
2018-01-04 19:56:19: (response.c.493) Path :
2018-01-04 19:56:19: (response.c.542) -- after doc_root
2018-01-04 19:56:19: (response.c.543) Doc-Root : /var/www/
2018-01-04 19:56:19: (response.c.544) Rel-Path : /application.fcgi/
2018-01-04 19:56:19: (response.c.545) Path : /var/www/application.fcgi/
2018-01-04 19:56:19: (response.c.562) -- logical -> physical
2018-01-04 19:56:19: (response.c.563) Doc-Root : /var/www/
2018-01-04 19:56:19: (response.c.564) Basedir : /var/www/
2018-01-04 19:56:19: (response.c.565) Rel-Path : /application.fcgi/
2018-01-04 19:56:19: (response.c.566) Path : /var/www/application.fcgi/
2018-01-04 19:56:19: (response.c.583) -- handling physical path
2018-01-04 19:56:19: (response.c.584) Path : /var/www/application.fcgi/
2018-01-04 19:56:19: (response.c.745) -- after pathinfo check
2018-01-04 19:56:19: (response.c.746) Path : /var/www/application.fcgi
2018-01-04 19:56:19: (response.c.747) URI : /application.fcgi
2018-01-04 19:56:19: (response.c.748) Pathinfo : /
2018-01-04 19:56:19: (response.c.753) -- handling subrequest
2018-01-04 19:56:19: (response.c.754) Path : /var/www/application.fcgi
2018-01-04 19:56:19: (mod_fastcgi.c.3500) handling it in mod_fastcgi
2018-01-04 19:56:19: (mod_fastcgi.c.2875) got proc: pid: 8703 socket: unix:/tmp/fastcgi.socket-0 load: 1
It hangs on this line, and nothing happens in the browser. After hitting CTRL C, here is the rest of the output.
^C2018-01-04 19:59:54: (server.c.1751) [note] graceful shutdown started
2018-01-04 19:59:55: (mod_fastcgi.c.2424) unexpected end-of-file (perhaps the fastcgi process died): pid: 8703 socket: unix:/tmp/fastcgi.socket-0
2018-01-04 19:59:55: (mod_fastcgi.c.3129) child exited, pid: 8703 status: 0
2018-01-04 19:59:55: (mod_fastcgi.c.3143) --- fastcgi spawning \n\tsocket unix:/tmp/fastcgi.socket-0 \n\tcurrent: 1 / 1
2018-01-04 19:59:55: (mod_fastcgi.c.900) new proc, socket: 0 /tmp/fastcgi.socket-0
2018-01-04 19:59:55: (mod_fastcgi.c.3175) response not received, request sent: 908 on socket: unix:/tmp/fastcgi.socket-0 for /application.fcgi?, closing connection
2018-01-04 19:59:55: (mod_fastcgi.c.1642) released proc: pid: 8710 socket: unix:/tmp/fastcgi.socket-0 load: 0
2018-01-04 20:00:01: (server.c.1626) connection closed - keep-alive timeout: 5
^C2018-01-04 20:00:01: (server.c.1828) server stopped by UID = 0 PID = 0
Traceback (most recent call last):
File "/var/www/TimeClock/application.fcgi", line 3, in <module>
from modules import app
File "/var/www/TimeClock/modules/__init__.py", line 1, in <module>
from flask import Flask
File "/usr/local/lib/python3.5/dist-packages/flask/__init__.py", line 19, in <module>
It looks as if lighttpd is trying to display an error or exception of some sort raised in the fastcgi file, but the process is terminated before lighttpd finishes outputting. Also, after the process is terminated, that is when I receive the 500 internal server error in the browser. I believe the problem is either somewhere in my flask application, or with the lighttpd configurations. I'm hoping the lighttpd error log will help me find this error, but I don't know how to get lighttpd to finish printing the error that was caught.
Here is my fastcgi script.
#!/usr/bin/python3
from flup.server.fcgi import WSGIServer
from modules import app
if __name__ == '__main__':
WSGIServer(app).run()
And here is my lighttpd.conf file.
server.modules += ( "mod_fastcgi" )
server.modules += ( "mod_rewrite" )
fastcgi.debug = 1
debug.log-request-handling = "enable"
debug.log-file-not-found = "enable"
server.username = "lighttpd"
server.groupname = "lighttpd"
server.document-root = "/var/www/"
server.port = 80
$SERVER["socket"] == ":80" {
mimetype.assign = (
".html" => "text/html"
)
url.rewrite-once = (
"^(/modules/static($|/.*))$" => "$1",
"^(/.*)$" => "/application.fcgi$1"
)
$HTTP["host"] =~ "$" {
server.document-root = "/var/www/"
fastcgi.server = ( "application.fcgi" =>
(( "socket" => "/tmp/fastcgi.socket",
"bin-path" => "/home/pi/timeclock_venv/bin/python3 /var/www/TimeClock/application.fcgi",
"max-procs" => 1,
"bin-environment" => (
"REAL_SCRIPT_NAME" => ""
),
"check-local" => "disable"
))
)
}
}
In my lighttpd script I'm using the python3 interpreter inside of my virtualenv directory, which has all the dependencies required for my flask app.
Please give me any help or advice you think is necessary in trying to get this to work, thank you.