2
votes

502 bad gateway error pops up on saving data to the db.

Once the user logs into the django app (OLE 7). Data is pulled regarding that user from ldap server and saved in my local db(postgres). It worked perfectly fine on local server after configuring nginx, gunicorn once the user logs into the website instead of displaying retrieved data it shows 502 Bad gateway. I went thru a lot of stackoverflow post regarding this, some said increase the timeout, check gunicorn is running. I have already tried all this but it still wont work.

nginx.conf

    user  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
worker_connections  1024;
}
er  nginx;
worker_processes  2;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;


events {
  worker_connections  1024;
}


http {
include       /etc/nginx/mime.types;
default_type  application/octet-stream;

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                  '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';

access_log  /var/log/nginx/access.log  main;

sendfile        on;
#tcp_nopush     on;

keepalive_timeout  300;

#gzip  on;
upstream app_server {
    server 10.111.xxx.xxx:8001 fail_timeout=0;
}

server{
 listen 80;
 server_name 10.111.xxx.xxx;
 location = /favicon.ico { access_log off; log_not_found off; }
 location /static/ {root /home/lisa/revcon;}
 location / {
    proxy_set_header Host $http_host;
    proxy_set_header Connection "";
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://unix:/home/lisa/revcon/revcon.sock;
    proxy_connect_timeout 500s;
    proxy_read_timeout 600s;
}

views.py

 def save_information(request):

associate_id = id_to_numeric(request.user.username)
ldap = Ldap()

associate_details = ldap.search(associate_id=associate_id)[0]

details = UserDetails(
    associate_name=associate_details['name'],
    associate_nbr=associate_id,
    associate_email=associate_details['email'],
   associate_department_id=id_to_numeric(associate_details['department']),
    associate_mgr=associate_details['managerCN'],
    associate_exec=associate_details['execCN'],
    associate_org=associate_details['org'],
    associate_image=img,
    date_of_service=rcm_date,
    title=associate_details['title'],
    client=client,
    lob=lob,
    phone_number=associate_details['mobile'],
)
details.save()
messages.success(request, 'Profile created! ')
return redirect('/?submit=true')

nginx error log looks like this:

2019/05/15 04:01:55 [error] 7602#7602: *1 upstream prematurely closed connection while reading response header from upstream, client: 10.111.044.xxx, server: 10.111.xxx.xxx, request: "POST /save_information HTTP/1.1", upstream: "http://unix:/home/lisa/revcon/revcon.sock:/save_information", host: "10.111.xxx.xxx", referrer: "http://10.111.xxx.xxx/pr/"

gunicorn SELECT "django_session"."session_key", "django_session"."session_data", "django_session"."expire_date" FROM "django_session" WHERE ("django_session"."session_key" = 'hzy3dsjxfzqxhds6kd5uyteux0gps9d1' AND "django_session"."expire_date" > '2019-05-15T09:04:53.974657+00:00'::timestamptz); args=('hzy3dsjxfzqxhds6kd5uyteux0gps9d1', datetime.datetime(2019, 5, 15, 9, 4, 53, 974657, tzinfo=)) (0.001) SELECT "auth_user"."id", "auth_user"."password", "auth_user"."last_login", "auth_user"."is_superuser", "auth_user"."username", "auth_user"."first_name", "auth_user"."last_name", "auth_user"."email", "auth_user"."is_staff", "auth_user"."is_active", "auth_user"."date_joined" FROM "auth_user" WHERE "auth_user"."id" = 1; args=(1,) (0.001) SELECT (1) AS "a" FROM "CollectData_userdetails" WHERE "CollectData_userdetails"."associate_nbr" = '050667' LIMIT 1; args=(u'050667',) Exception while resolving variable 'img' in template 'CreateUser.html'. Traceback (most recent call last): File "/home/lisa/revcon/env/lib/python2.7/site-packages/django/template/base.py", line 903, in _resolve_lookup (bit, current)) # missing attribute VariableDoesNotExist: Failed lookup for key [img] in u'[{\'False\': False, \'None\': None, \'True\': True}, {u\'csrf_token\': , \'user\': >, \'perms\': , \'DEFAULT_MESSAGE_LEVELS\': {\'DEBUG\': 10, \'INFO\': 20, \'WARNING\': 30, \'SUCCESS\': 25, \'ERROR\': 40}, \'messages\': , u\'request\': }, {}, {\'form\': }, {\'block\': \n, , \n\n\n\n, , , , Associate \'>, , , , , , , , , , \n\n\t\t\t , , \\n\\t\\t\\t , , \\n]>}]' Exception while resolving variable 'tag' in template 'bootstrap4/field.html'.

It hits this url url('save_information', views.save_information, name='save_information'), and then fails. 502 error.

2
Can you provide log of gunicorn?Marin
I have updated the question added the gunicorn log there.Lisa

2 Answers

4
votes

I figured it out. In my gunicorn.service file in /etc/systemd/system/gunicorn i service. I made a change:Added the time out. Default time out for gunicorn is 30 sec so I updated to 120.

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=lisa
Group=nginx
Restart=on-failure
WorkingDirectory=/home/lisa/revcon
ExecStart=/home/lisa/revcon/env/bin/gunicorn --**timeout 120** --workers 5 
--bind unix:/home/lisa/revcon/env.sock revcon.wsgi:application

[Install]
WantedBy=multi-user.target
~

And it worked just fine for me.

0
votes

Error 502 it's timeout for gunicorn service

[Service]
User=user
Group=www-data
WorkingDirectory=/home/user/projects/myproject/project
ExecStart=/home/user/projects/myproject/projectenv/bin/gunicorn\
                --access-logfile - \
                --workers 3 \
                --timeout 1000 \ # this
                --bind unix:/run/gunicorn.sock \
                project.wsgi:application

near error 504 it's timeout for nginx server:

location /{
                include proxy_params;
                proxy_read_timeout 1000; # this
                proxy_pass http://unix:/run/gunicorn.sock;
        }