繁体   English   中英

我如何在我的站点子域中运行flask-app?

[英]How can I have my flask-app run on my sites subdomain?

例如,我想在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控制台上没有任何显示。

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

第一件事:

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

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

在Namecheap中,单击域->管理,然后单击高级DNS。

创建一个新记录,选择CNAME作为Type,然后输入子域名(仅顶层)作为HOST,然后将服务器所在的IP作为值(TTL(生存时间)是更改时间)当您下次要更改它时,1,10分钟对于调试内容很有用,但是无论如何DNS可能都不愿意这样做。)

等待几分钟,您应该可以通过子域名访问服务器。

现在,例如,如果您使用与Web服务器相同的IP,但使用不同的端口,则基本上将无法完成您想要的操作。 DNS会将子域流量转发到您的(相同)服务器IP,因此,如果您的网络服务器位于端口443上,您还将通过https://api.domain.com到达它。 如果您的API使用端口8080或8081,则需要始终指定实际到达子域中API服务器的端口(即api.domain.com:8080)。

DNS仅将子域名转发到您告诉它的IP。

我使用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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM