1

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

如果非常感谢任何帮助。

4

3 回答 3

5

第一件事:

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

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

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

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

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

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

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

于 2017-07-23T23:21:26.983 回答
1

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

于 2018-04-07T10:04:21.407 回答
0

实际上 Flask 并不是要自己运行服务器,它只是为了调试,如果你想运行一个 web 应用程序,你应该在 Apache 或 Nginx 后面运行一些 wsgi,这里是 Ubuntu 18.04 LTS 上的一个简单示例: https:/ /www.digitalocean.com/community/tutorials/how-to-serve-flask-applications-with-uswgi-and-nginx-on-ubuntu-18-04

于 2019-05-17T22:17:30.490 回答