当前位置: 首页 > 知识库问答 >
问题:

NGINX-SSL握手中关闭连接,而SSL与上游握手

郁烨
2023-03-14

堆栈:React,NGINX 1.14.0,GUnicorn,Django 2.2.8,Python 3.6.9

错误:

  • 在浏览器:当React调用Django API(当然在请求头中有origin)时,大约30秒后在浏览器控制台出现CORS错误。
    在浏览器控制台:CORS策略阻止从源“https://mydomain”访问“https://mydomain:8000/somethy/”处的XMLHttpRequest:请求的资源上没有“access-control-allog-origin”标头。
    此外,HTTP状态代码为502坏网关。
  • 在NGINX:当SSL握手时SSL握手中的对等关闭连接,客户端:something,服务器:mydomain,请求:“Get/something/HTTP/1.1”,上游:“https://unix://home/Ubuntu/django_path/gunicorn.sock://Somethy/”,主机:“mydomain:8000”,引用者:“https://mydomain/something”。客户端在等待请求时超时(110:连接超时),客户端:something,服务器:0.0.0.0:443
  • 在GUnicorn处:[关键]工作人员超时
  • 在Django:我编写了要查看的日志,但日志没有打印出来。

Conf:

  • Nginx:
server {
    listen 80;
    server_name mydomain;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name mydomain;

    error_log /var/log/nginx/error.log debug;

    ssl_certificate /etc/letsencrypt/live/mydomain/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mydomain/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    location / {
        root /home/ubuntu/react_path/build;
        index index.html index.htm;
        try_files $uri $uri/ /index.html;
    }
}

server {
    listen 8000 ssl;
    server_name mydomain;

    ssl_certificate /etc/letsencrypt/live/mydomain/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/mydomain/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot

    charset utf-8;

    location / {
        include proxy_params;
        proxy_pass https://unix:/home/ubuntu/django_path/gunicorn.sock;
    }

    location /static/ {
        alias /home/ubuntu/django_path/static/;
    }

    location /media/ {
        alias /home/ubuntu/django_path/media/;
    }
}
  • Gunicorn:
[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/django_path
ExecStart=/home/ubuntu/VENV/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/django_path/gunicorn.sock api.wsgi:application

[Install]
WantedBy=multi-user.target
  • Django:
CORS_ALLOWED_ORIGINS = [
    'https://mydomain',
]

有一些问题,但我认为CORS错误是因为交通无法到达Django,甚至Gunicorn。

所以也许我改变NGINX conf。你怎么看?我怎么能修好?

共有1个答案

葛季萌
2023-03-14

继续下去后,我找到了解决办法

https://serverfault.com/questions/746297/how-to-run-gunicorn-upport-with-an-nginx-ssl-configuration
非常有帮助。

下面是Nginx的conf。

upstream gunicorn {
    server 127.0.0.1:8080;
}

server {
    listen 80;
    server_name mydomain;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name mydomain;

    ...
}

server {
    listen 8000 ssl;
    server_name mydomain;

    ...

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_pass http://gunicorn;
    }
    ...
}

下面是Gunicorn的conf。

...
ExecStart=/home/ubuntu/VENV/bin/gunicorn --workers 3 --bind 127.0.0.1:8080:/home/ubuntu/django_path/gunicorn.sock api.wsgi:application
...
 类似资料:
  • 99.110.244:443 2017/09/28 13:03:51[错误]34080#34080:*1062 SSL握手中的对等方关闭连接(104:由对等方重置连接),同时与上游进行SSL握手,客户端:10.210.0.81,服务器:webshop.domain.be,请求:“get/http/1.1”,上游:“https://10.1.10.61:443/,主机:”webshop.domain

  • 问题内容: 有几个与此类似的问题,但没有一个解决这个特定的问题。如果有一个我错过了,请引导我找到相关的解决方案。 现在是我的问题。我用Java编写了一个测试SSL服务器: 我这样创建了密钥库: 当出现提示时,我将localhost作为键名。 然后编译(我使用的是Sun / Oracle JDK和JRE版本1.6.0_26): 然后我运行: 然后,我通过导航到https:// localhost:8

  • 我最近从AWS ELB转到HAProxy。我正在负载平衡器(HAProxy 1.5dev19)上终止SSL。 自从切换以来,我一直在HAProxy日志中遇到一些SSL连接错误(占请求总数的5-10%)。有三种类型的错误重复:SSL握手期间连接关闭SSL握手期间超时SSL握手失败(这种情况很少发生) 我使用的是免费的StartSSL证书,所以我的第一个想法是一些主机在接受该证书时遇到了问题,我过去没

  • 我有以下建立SSL连接的简单代码。 如果我在Java8下运行这段代码,它就不起作用了。它以开始SSL握手时停止。 代理端口:8081 如果删除或将其设置为false,它也不能用于Java10。但是通过系统属性设置代理设置是不起作用的。

  • 从文件导入证书时SSL握手失败的后续问题 在该链接中,使用第三方证书时SSL握手失败。 我对此表示怀疑。 一旦服务器向客户端颁发了包含公钥的证书,客户端是否使用服务器的公钥对每条消息进行编码?

  • 在这个基于Xcode7(beta)构建的应用程序中,TCP套接字连接(NSStream)失败,错误如下。 在info.plist中,我还包括了以下相关异常的ATS。 但在下面的委托中 -(void)stream:(NSStream*)stream HandleEvent:(NSStreamEvent)eventCode 我得到的事件代码为8,表示错误发生。具有上述描述。 验证错误:num=19:证