Python 如何使用Flask、Flask SocketIO和nginx实现SSL(http到https)

Python 如何使用Flask、Flask SocketIO和nginx实现SSL(http到https),python,nginx,flask,openssl,flask-socketio,Python,Nginx,Flask,Openssl,Flask Socketio,我的应用程序使用Flask Socketio、Flask和nginx。我在一篇文章中读到,所有HTTP到HTTPS的处理都必须在Web服务器级别完成,而不是在应用服务器级别。我使用rewrite属性将所有HTTP请求重定向为HTTPS请求。这可以成功地处理静态页面。但是,当我尝试加载动态内容时,我会收到一个错误,在'https://localhost/myLoc'通过HTTPS加载,但显示来自的不安全内容'http://localhost/myLoc/more/paths?t=1390397“:

我的应用程序使用Flask Socketio、Flask和nginx。我在一篇文章中读到,所有HTTP到HTTPS的处理都必须在Web服务器级别完成,而不是在应用服务器级别。我使用
rewrite
属性将所有HTTP请求重定向为HTTPS请求。这可以成功地处理静态页面。但是,当我尝试加载动态内容时,我会收到一个错误,在'https://localhost/myLoc'通过HTTPS加载,但显示来自的不安全内容'http://localhost/myLoc/more/paths?t=1390397“:此内容也应通过HTTPS加载。

此外,我还发现
XMLHttpRequest无法加载此错误http://localhost/myLoc/more/paths?t=1390397. 请求的资源上不存在“Access Control Allow Origin”标头。起源'https://localhost因此,不允许访问。

我的nginx.conf文件如下所示

server {
    server {
    listen       80;
    server_name  _;
   rewrite ^ https://$host$request_uri? permanent;
}

server {
    gzip  on;
    ssl     on;
    listen 443 ssl;

    server_name     *.mydomain.com;

    ssl_certificate /path/to/nginx/ssl/nginx.crt;
    ssl_certificate_key /path/to/nginx/ssl/nginx.key;

    location /myLoc {
            proxy_pass http://localhost:9001/myLoc;
            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 $proxy_add_x_forwarded_for;
    }
}
请帮忙。Flask SocketIO是否还必须包含指向证书和密钥的路径?

尝试以下操作:

location /myLoc {
        proxy_pass https://localhost:9001/myLoc;
        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 $proxy_add_x_forwarded_for;
        add_header Access-Control-Allow-Origin *;
}
但HTTPS卸载是首选方式,代理\u传递http://指令更好,
它帮助Nginx尽快从后端获得响应并关闭连接。唯一的要求是让后端(侦听端口9901)为HTTP服务。

您是否正在加载第三方内容,如jQuery?您如何引用您的内容?看起来您可能在
http://localhost/myLoc/more/paths?t=1390397
当它应该是相对的(没有域,例如
/myLoc/more/path?t=1390397
)或协议相对的(没有方案,例如
/localhost/myLoc/more/path?t=1390397
);理想情况下,这应该使用的
url\u来完成,而不是硬编码。您可能还需要在位置块中设置
X-Forwaded-Proto
标题,并根据添加
ProxyFix
中间件。@dim:Yes dim,我们使用的是JavaScript和jQuery