我想通过Nginx和Unicorn在Flask-SocketIO中创建一个套接字。以下配置适用于没有Nginx的 localhost 。
当我通过Chrome中的Nginx访问网络应用程序时,出现错误:
无法加载资源:无法连接到服务器。 http://52.34.18.48:6419/socket.io/?EIO=3&transport=polling&t=1454455363683-6
当我在Firefox中通过Nginx访问Web应用程序时,出现错误:
阻止跨源请求:同源策略禁止读取 远程资源在 http://52.34.18.48:6419/socket.io/?EIO=3&transport=polling&t=1454464333740-25。 (原因:CORS请求失败)。
这是我在JavaScript中初始化套接字连接的方法:
import io from "socket.io-client"
const socketUrl = 'http://' + document.domain + ':6419' + '/FlaskApp'
const socket = io(socketUrl);
export default socket;
我的Nginx配置文件如下所示:
server {
listen 80;
server_name 52.34.18.48;
error_log /var/www/Flaskapp/nginx_errorlog.log;
access_log /var/www/Flaskapp/nginx_accesslog.log;
root /var/www/Flaskapp;
location /socket.io {
proxy_pass http://127.0.0.1:6419/socket.io;
proxy_redirect off;
proxy_buffering off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
proxy_pass http://127.0.0.1:6419;
proxy_buffering off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
我使用的Gunicorn命令是:
gunicorn --worker-class eventlet -w 1 -b 127.0.0.1:6419 flask_app:application
我像这样在Flask应用程序中包装了套接字。
from flask_app import application
from flask_socketio import SocketIO
socketio = SocketIO(application)
为什么我通过Nginx收到此错误,但在通过localhost连接时却没有?如何通过Nginx正确访问socket.io?