需要帮助用nginx回答POST

时间:2017-04-22 08:32:58

标签: python nginx slack

我正在编写一个需要响应HTTP POST挑战的松散机器人,我想我会用nginx进行此操作。它应该用HTTP 200响应,但我不知道如何实现它。以下是文档:https://api.slack.com/events-api#url_verification

我不确定我是应该在脚本中还是像nginx这样的网络服务器上这样做?

但是,如果我使用nginx,基本配置如何能够响应上述挑战?

我对此很新,所以如果这没有意义,我很抱歉。

1 个答案:

答案 0 :(得分:1)

我在我的服务器上使用nginx和nodejs运行了一个hipchat bot。 这是我在nginx.conf中的内容:

upstream my_bot {
    server 127.0.0.1:3300;
    keepalive 8;
}

server {
    listen 80;
    server_name your.address.com;
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-NginX-Proxy true;

        proxy_pass http://my_bot;
        proxy_redirect off;
    }
}

javascript只是在内部侦听端口3300:

const Http = require('http')

var server = Http.createServer(function(req, res) {
    if (req.method != 'POST') {
        res.writeHead(400, {'Content-Type': 'text/plain'})
        res.end('Error')
        return
    }
    var body = ''
    req.on('data', function (data) {
        body += data
    })
    req.on('end', function () {
        try{
            message = JSON.parse(body)
        }
        catch(e) {
            /* Not a JSON. Write error */
            res.writeHead(400, {'Content-Type': 'text/plain'})
            res.end('Format Error')
            return
        }
        if (message.token != '<your token here>') {
            /* Not valid token. Write error */
            res.writeHead(400, {'Content-Type': 'text/plain'})
            res.end('Token Error')
            return
        }
        /* Do your stuff with request and respond with a propper challenge field */
        res.writeHead(200, {'Content-Type': 'application/json'})
        res.end(JSON.stringify({challenge: message.challenge}))
    })
})
server.listen(3300)

要让我的服务器上运行此脚本作为守护程序,我正在使用pm2

您可以运行任何其他后端。