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?

1 Answer 1

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
3
  • 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. Nov 19, 2013 at 16:41
  • do you see the process running and listening to the port 9100?
    – bgentil
    Nov 19, 2013 at 17:54
  • there is no socket listening in lfcgi.c 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, 2013 at 18:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.