无法将数据写入AWS RDS PostgreSQL数据库?

问题描述 投票:0回答:1

在我的 Django 应用程序中,我使用 AWS RDS PostgreSQL 作为我的数据库后端。我在尝试发送 POST 请求以在数据库中存储数据时遇到问题。加载一段时间后,我收到“502 Bad Gateway”错误。有趣的是,我可以成功从数据库读取数据。

我还有一个移动应用程序和一个用 Vue.js 开发的单独的前端应用程序。从移动应用程序发出 POST 请求时,所有操作都可以完美运行,但与 OTP 相关的操作除外,该操作也会出现“502”错误。应用程序中的其他 CRUD 操作按预期运行。此外,从 Django 管理面板和仪表板可以正常读取和写入数据,这两个面板都是在 Django 中构建的。

在前端应用程序中,我可以成功写入数据,但在尝试写入时遇到“502”错误。当我将 Application Load Balancer 的 DNS 点的 CNAME 添加到域时,会特别出现此问题。但是,如果我在 A 记录中使用 IP 地址指向域,则一切都会按预期运行。

此问题的根源可能是什么以及如何解决?

我添加了一些细节: This is listner rules SS

This is ALB details SS

This is ALB SG SS

This is TG SS

NGINX 设置

server {

    # add here the ip address of your server
    # or a domain pointing to that ip (like example.com or www.example.com)
    server_name example.com www.example.com;
    keepalive_timeout 5;
    client_max_body_size 4G;

    error_log /var/www/app/app-backend/logs/nginx-error.log;

    location /static/ {
        alias   /var/www/app/static/;
    }

    location /media/ {
        proxy_pass https://appbkt.s3.ap-south-1.amazonaws.com;
    }

    location / {
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_redirect off;
      proxy_pass http://unix:/var/www/app/gunicorn.sock;
      proxy_send_timeout 300;
      proxy_read_timeout 300;
    }

    listen 443 ssl; # managed by Certbot
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/example.com/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
}
server {
    if ($host = www.example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    if ($host = example.com) {
        return 301 https://$host$request_uri;
    } # managed by Certbot


    server_name example.com www.example.com;
    listen 80;
    return 404; # managed by Certbot
}

This is update instance view. This view take request from front-end application

This view takes request from flutter app. This responsible for generate otp and send in response

这已添加到 django settings.py 文件中

CSRF_TRUSTED_ORIGINS = ['https://www.example.com', 'https://example.com','https://app-alb-asg-3817902479.ap-south-1.elb.amazonaws.com'
                        ]
SECURE_PROXY_SSL_HEADER = ('HTTP_X_FORWARDED_PROTO', 'https')
django postgresql amazon-ec2 amazon-rds aws-application-load-balancer
1个回答
0
投票

我认为这与您的 SSL 设置有关。 我不明白为什么你在 ALB 上为带有证书的端口 443 定义了一个监听器,同时在 nginx 上定义了一个带有证书的端口 443 监听器。 常见的方法是在 ALB 上设置 SSL,并将所有内容转发到 nginx 上的端口 80。您可以避免在 nginx 上处理 SSL。

所以我建议检查你的 nginx 配置,以便在端口 80 上只有一个服务器块;然后更改您的 ALB 设置以将任何 HTTP 请求重定向到 HTTPS(使用重定向规则),并将端口 443 转发到您的 ec2 实例上的端口 80。

© www.soinside.com 2019 - 2024. All rights reserved.