在ngninx上通过FastCGI运行WSAPI

使用Lua 5.2与wsapi 1.6-1和通过luarocks安装的wsapi-fcgi 1.6-1,我有以下的nginxconfiguration:

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; } } 

启动脚本是这样的:

 #!/usr/bin/env lua # filename: run.lua local fastcgi = require"wsapi.fastcgi" local app = require"app" fastcgi.run(app.run) 

而实际的应用程序是这样的:

 #!/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 

他们两个都是可执行的(我是否只需要run.lua是可执行的,或者我必须保持这种状态?),并且当我使用$ ./run.lua时,我可以从命令行得到正确的响应$ ./run.lua$ ./app.lua

当我访问localhost:8080我得到一个“502坏网关”响应和下面的日志行:

 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" 

我发现真的很奇怪,我可以让脚本通过命令行正常工作,但是当从服务器点击时它们不起作用。 任何人都可以帮助我呢?

我不熟悉WSAPI,但是您是否尝试使用spawn-fcgi运行run.lua(run.lua必须是可执行的):

 /usr/bin/spawn-fcgi -f run.lua -a 127.0.0.1 -p 9100 -P /var/run/fcgi.pid