qua*_*mor 176 python port networking flask
我有一个通过端口5000运行的Flask服务器,它很好.我可以访问http://example.com:5000
但是可以在http://example.com上简单地访问它吗?我假设这意味着我必须将端口从5000更改为80.但是当我在Flask上尝试时,我在运行它时收到此错误消息.
Traceback (most recent call last):
File "xxxxxx.py", line 31, in <module>
app.run(host="0.0.0.0", port=int("80"), debug=True)
File "/usr/local/lib/python2.6/dist-packages/flask/app.py", line 772, in run
run_simple(host, port, self, **options)
File "/usr/local/lib/python2.6/dist-packages/werkzeug/serving.py", line 706, in run_simple
test_socket.bind((hostname, port))
File "<string>", line 1, in bind
socket.error: [Errno 98] Address already in use
Run Code Online (Sandbox Code Playgroud)
运行lsof -i :80回报
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
apache2 467 root 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 4413 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14346 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14570 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14571 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
apache2 14573 www-data 3u IPv4 92108840 0t0 TCP *:www (LISTEN)
Run Code Online (Sandbox Code Playgroud)
我是否需要先杀死这些进程?这样安全吗?或者是否有另一种方法可以让Flask在端口5000上运行但主网站域重定向?
谢谢.
Ami*_*har 375
1-停止使用端口80的其他应用程序.2.使用端口80运行应用程序:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
Run Code Online (Sandbox Code Playgroud)
Har*_*hid 120
对于外部可见的服务器,您不使用apache或其他Web服务器,只需键入即可
flask run --host=0.0.0.0 --port=80
Run Code Online (Sandbox Code Playgroud)
Ewa*_*wan 61
因此,它会抛出该错误消息,因为您已apache2在端口80上运行.
如果这是用于开发,我会将其保留在端口5000上.
如果它是用于生产:
不建议
apache2先停下来;不推荐,因为它在文档中声明:
您可以在开发期间使用内置服务器,但应该为生产应用程序使用完整部署选项.(不要在生产中使用内置开发服务器.)
推荐的
HTTP流量通过apache2Flask.这样,apache2可以处理所有静态文件(它非常擅长 - 比Flask内置的调试服务器好得多)并充当动态内容的反向代理,将这些请求传递给Flask.
这里是关于使用Apache + mod_wsgi设置Flask的官方文档的链接.
编辑1 - @Djack的澄清
通过apache2代理到Flask的HTTP流量
当请求通过端口80(HTTP)或端口443(HTTPS)到达服务器时,像Apache或Nginx这样的Web服务器会处理请求的连接并找出如何处理它.在我们的例子中,收到的请求应该配置为在WSGI协议上传递给Flask并由Python代码处理.这是"动态"部分.
动态内容的反向代理
如上所述,配置Web服务器有一些优点;
Ibr*_*him 27
这是在 Ubuntu-18 上对我有用的唯一解决方案。
在文件中app.py,使用:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
Run Code Online (Sandbox Code Playgroud)
除非sudo用于运行它,否则上面的代码将给出相同的权限错误:
sudo python3 app.py
Run Code Online (Sandbox Code Playgroud)
小智 24
一种方便的方法是使用包python-dotenv:它读出一个.flaskenv文件,您可以在其中存储烧瓶的环境变量。
pip install python-dotenv.flaskenv在您的应用程序的根目录中创建一个文件在您指定的文件中:
FLASK_APP=application.py
FLASK_RUN_HOST=localhost
FLASK_RUN_PORT=80
Run Code Online (Sandbox Code Playgroud)
之后,您只需运行您的应用程序flask run并可以在该端口访问您的应用程序。
请注意,FLASK_RUN_HOST默认为127.0.0.1并且FLASK_RUN_PORT默认为5000。
小智 16
如果使用以下命令更改端口或主机:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
Run Code Online (Sandbox Code Playgroud)
使用以下代码启动服务器(我的主要入口是烧瓶是app.py):
python app.py
Run Code Online (Sandbox Code Playgroud)
而不是使用:
flask run
Run Code Online (Sandbox Code Playgroud)
小智 10
您可以轻松禁用在端口 80 上运行的任何进程,然后运行此命令
flask run --host 0.0.0.0 --port 80
Run Code Online (Sandbox Code Playgroud)
或者如果你更喜欢在 .py 文件中运行它
if __name__ == "__main__":
app.run(host='0.0.0.0', port=80)
Run Code Online (Sandbox Code Playgroud)
小智 8
如果要将应用程序放在相同的端口(即port = 5000)上,则仅在终端中运行以下命令:
fuser -k 5000/tcp
Run Code Online (Sandbox Code Playgroud)
然后运行:
python app.py
Run Code Online (Sandbox Code Playgroud)
如果要在指定端口上运行,例如,如果要在port = 80上运行,请在主文件中提及:
if __name__ == '__main__':
app.run(host='0.0.0.0', port=80)
Run Code Online (Sandbox Code Playgroud)
On my scenario the following steps worked like a charm:
Installing the package:
pip install --upgrade pip
pip install python-dotenv
Run Code Online (Sandbox Code Playgroud)Creating a hidden file in my app directory "flaskr/.flaskenv"
Adding the following content:
FLASK_APP=flaskr
FLASK_RUN_HOST=localhost
FLASK_RUN_PORT=8000
Run Code Online (Sandbox Code Playgroud)Finally, run the flask command one more time:
flask run
Run Code Online (Sandbox Code Playgroud)The version which I am working on is:
pip freeze |grep -i flask
Flask==1.1.1
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
307019 次 |
| 最近记录: |