0

Using Lua 5.2 with wsapi 1.6-1 and wsapi-fcgi 1.6-1 installed via luarocks, I have the following nginx configuration:

server {
  listen       127.0.0.1:8080;
  server_name  localhost;

  location / {
    root   /home/petsagouris/code/wsapitest/;
    index  index.html index.htm run.lua;
  }
  error_page   500 502 503 504  /50x.html;
  location = /50x.html {
    root   /usr/share/nginx/html;
  }
  # Lua WSAPI
  # taken from http://mascarenhas.github.io/2009/10/24/wsapi-nginx-fcgi.html
  location ~ ^(.+\.lua)(.*)$ {
    root html;
    fastcgi_pass 127.0.0.1:9100;
    fastcgi_index run.lua;
    fastcgi_split_path_info ^(.+\.lua)(.*)$;
    fastcgi_param PATH_INFO $fastcgi_path_info;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
  }
}

The launcher script is this:

#!/usr/bin/env lua
# filename: run.lua

local fastcgi = require"wsapi.fastcgi"
local app = require"app"
fastcgi.run(app.run)

and the actual app is this one:

#!/usr/bin/env wsapi.cgi
# filename: app.lua
local coroutine = require "coroutine"

local M= {}
_ENV = M

function run(wsapi_env)
  local headers = { ["Content-type"] = "text/html" }

  local function hello_text()
    coroutine.yield("<html><body>")
    coroutine.yield("<p>Hello Wsapi!</p>")
    coroutine.yield("<p>PATH_INFO: " .. wsapi_env.PATH_INFO .. "</p>")
    coroutine.yield("<p>SCRIPT_NAME: " .. wsapi_env.SCRIPT_NAME .. "</p>")
    coroutine.yield("</body></html>")
  end

  return 200, headers, coroutine.wrap(hello_text)
end

return M

Both of them are executable at the moment (do I just need the run.lua to be executable or I have to keep both like that?) and I can get the correct responses from the command line when I go for $ ./run.lua or $ ./app.lua

When I visit localhost:8080 I get a "502 Bad Gateway" response and the following log line:

2013/11/19 09:02:51 [error] 31359#0: *26 connect() failed (111: Connection refused) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "fastcgi://127.0.0.1:9100", host: "localhost:8080"

I find it really weird that I can get the scripts to work properly via the command line but they don't work when hit from the server. Anyone that can help me out with this?

petsagouris
  • 103
  • 4

1 Answers1

1

I'm not familiar with WSAPI but have you tried running run.lua with spawn-fcgi (run.lua have to be executable):

/usr/bin/spawn-fcgi -f run.lua -a 127.0.0.1 -p 9100 -P /var/run/fcgi.pid
bgentil
  • 311
  • 1
  • 4
  • Is it necessary to run the spawn-fcgi? The wsapi-fcgi already has the lfcgi.c in it and I am assuming it actually uses it. – petsagouris Nov 19 '13 at 16:41
  • do you see the process running and listening to the port 9100? – bgentil Nov 19 '13 at 17:54
  • there is no socket listening in lfcgi.c https://github.com/keplerproject/wsapi/blob/master/src/fastcgi/lfcgi.c I think WSAPI implements only a FastCGI Backend so you need a server to make it work with nginx – bgentil Nov 19 '13 at 18:07