2017-04-22 28 views
0

我正在寫一個需要響應HTTP POST挑戰的鬆散機器人,我想我會用nginx來解決這個問題。它應該用HTTP 200響應,但我不知道如何實現這一點。這裏是文檔:https://api.slack.com/events-api#url_verification需要用nginx幫忙回覆POST

我不知道我是否應該這樣做在腳本中或像nginx一樣的Web服務器?

但是,如果我要使用nginx,基本配置看起來會如何響應上面的挑戰?

我很新,所以我很抱歉,如果這是沒有意義的。

回答

1

我有一個hipchat bot在我的服務器上運行nginx和nodejs。 下面是我在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守護

您可以運行任何其他後端。