使用Flask在Nginx中进行套接字管理 - 为什么跨源请求被阻止?

时间:2016-02-02 23:39:23

标签: python nginx flask socket.io gunicorn

我想通过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?

0 个答案:

没有答案