例如,我想在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控制台上没有显示任何内容。
任何帮助,如果非常感谢。
答案 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