如何在我的网站子域上运行我的flask-app?

时间:2017-07-23 23:09:47

标签: python flask namecheap

例如,我想在http://api.domain.com上运行flask-app。但是,我不知道如何做到这一点,烧瓶文档没有任何帮助。我通过SSH使用共享的namecheap Web服务器来运行python。我打开了8080,8181和8282端口。

服务器端代码:

from flask import Flask
from flask import Blueprint

app = Flask(__name__)
app.config['SERVER_NAME'] = 'domain.com'

@app.route('/status')
def status():
   return 'Status : Online'

bp = Blueprint('subdomain', __name__, subdomain="api")

app.register_blueprint(bp)

if __name__ == '__main__':
   app.run(host=app.config["SERVER_NAME"],port=8181,debug=True)

当我访问http://www.api.domain.com/status时,它会返回404错误。 SSH控制台上没有显示任何内容。

任何帮助,如果非常感谢。

3 个答案:

答案 0 :(得分:4)

首先要做的事情:

http(即没有SSL证书的Web服务器)是不安全的。您应该设置证书并始终将端口443用于外部。

然后,在namecheap上,您需要定义一个CNAME条目以指向子域。

在Namecheap中,点击域名 - >管理,然后是高级DNS

创建一个新记录,选择CNAME作为Type,然后输入子域名(只是顶层)作为HOST,然后输入服务器所在的IP作为值(TTL(生存时间)就是它的时间)当你想要在下次更改它时需要更改,1,10分钟对调试内容很有用,但是DNS可能无论如何都不会尊重...)

等待几分钟,您应该能够以子域名访问您的服务器。

现在,如果你使用相同的IP作为网络服务器,但是使用不同的端口,基本上不会做你想要的。 DNS会将子域流量转发到您的(相同)服务器IP,因此,如果您的网络服务器位于端口443上,您也可以使用https://api.domain.com访问它。如果您的API使用端口8080或8081,则需要始终指定实际到达子域的API服务器的端口(即api.domain.com:8080)。

DNS只是将子域名转发给您告诉它的IP。

答案 1 :(得分:0)

我使用Python中的龙卷风解决了这个问题。我已经回答了这个问题并且工作正常

from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'
http_server = HTTPServer(WSGIContainer(app))
http_server.listen(int(5000),address="ip_address_of_your_server_machine")
IOLoop.instance().start()

现在您可以像www.example.com:5000

一样访问此页面

答案 2 :(得分:0)

实际上Flask并不是要单独运行服务器,它仅用于调试,如果要运行Web应用程序,则应在带有wsgi的Apache或Nginx后面运行,这是Ubuntu 18.04 LTS上的一个简单示例: https://www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04