我有一个flask-app,它使用flask-socketio扩展名。使用'socketio.run()'或'flask run'开发服务器在本地计算机上运行良好。我想使其与Nginx代理一起使用,并且可以在具有此Nginx服务器配置的本地计算机上工作:
文件/etc/nginx/sites-available/server.conf
server {
listen 8080;
location / {
proxy_pass http://localhost:5000;
}
}
实际的应用程序正在使用socketio.run()在端口5000上运行,据我所知,这也是一个很好的生产服务器。奇怪的是,它甚至可以与以下消息一起使用:“ WebSocket传输不可用。安装eventlet或gevent和gevent-websocket以提高性能。”它也可以与以下警告一起使用:“ Flask-SocketIO在Werkzeug下运行,WebSocket不可用。” (首先,当我使用socketio.run()时,其次是烧瓶运行)
但是,如果我尝试在生产服务器上运行相同的东西,则只有http部分有效,而套接字无效。当我在Internet上到处阅读时,我应该在nginx服务器配置中指定标题“连接和升级”,但我不明白为什么和我也尝试过:
文件/etc/nginx/sites-available/server.conf
server {
listen 80;
server_name servername.com;
location / {
proxy_pass http://127.0.0.1:5000;
}
location /socket.io/ {
proxy_pass http://127.0.0.1:5000/socket.io;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
结果相同,套接字不起作用。将flask run与任何配置一起使用,我得到以下调试消息: 127.0.0.1--[04 / Feb / 2019 20:55:52]“ GET /socket.io?EIO=3&transport=polling&t=MYwIxxF HTTP / 1.1” 404- 指示套接字无法正常工作,但服务器将其获取并用404答复,我认为没有理由。
我的本地计算机运行Kali linux和nginx 1.13.12,远程是具有nginx 1.14.0的Ubuntu 18.04 现在,我真的不明白哪个配置合适,为什么第一个配置在我的本地计算机上起作用,为什么没有一个配置在生产服务器上起作用,以及我如何解释此404消息。即使Internet上有几本指南,它对我也不起作用。
任何帮助表示赞赏!
答案 0 :(得分:-1)
也许nginx无法将/socket.io/
的位置与/socket.io?EIO=3&transport=polling&t=MYwIxxF
的路径匹配。看看nginx documentation on location,了解如何编写适合您需求的位置匹配器。