2013-06-03 74 views
1

是否可以在瓶子请求中获取服务器程序的IP地址?从瓶子获取服务器地址

我需要在服务器上返回的请求里面一个链接到一个文件,并需要知道IP。瓶子将在具有不同IP的服务器上启动,并且所有这些IP都将成为服务请求。

目前我是这样的:

from bottle import * 
import json 
@get('/file') 
def getAFileLink(): 
    # some logic here for the right filename to return 
    # server runs now on e.g. 10.0.0.1 and 10.10.0.1 
    # every client should see the IP from the server in the right subnet 
    return json.dumps({'url': 'http://127.0.0.1:1337/some/file.abc'}) 

@route('/some/<filename>') 
def getStaticFile(filename): 
    return static_file(filename, root="/srv/static/files") 

if __name__ == "__main__": 
    run(host='0.0.0.0', port=1337) 
+0

谁做请求路由?您是否在负载平衡器后面?或者您的客户是否期望了解节点(服务器)? (根据答案,我建议的方式会有所不同。) –

+0

路由来自瓶子手册:当您想要提供静态文件时使用它。 – reox

回答

2

如果你的服务器是不是背后负载平衡器,只需使用Host HTTP标头。

@route('/file') 
def getAFileLink(): 
    host = bottle.request.get_header('host') 
    return {'url': 'http://{}/some/file.abc'.format(host)} 
1

你为什么在相同的IP,你返回链路上运行您的服务器?

import socket 
socket.gethostbyname(socket.gethostname()) 
0

给一个尝试bottle.request.urldocs)。

如果您只需要scheme和hostname,请使用urlparse来获取它。

0

你可以使用:

from bottle import request 
urlparts = request.urlparts 
print urlparts.scheme 
print urlparts.netloc 

docs

相关问题