502 Bad Gateway" with nginx, uwsgi python-flask
Проблема заключается в том, что на одной странице сайта все загружается:
@app.route('/profile', methods=['POST'])
@login_required
def profile():
user_name = request.form["name"]
telegram = request.form["telegram"]
phone = request.form["phone"]
file = request.files['file']
if 'file' not in request.files:
flash('No file part')
return redirect(request.url)
if file.filename == '':
flash('No image selected for uploading')
return redirect(request.url)
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join('assets/uploads/avatars/', filename))
flash('Image successfully uploaded and displayed below')
database = sqlite3.connect('profiles.db')
sql = database.cursor()
sql.execute("SELECT user_id FROM users")
all_id = sql.fetchall()
print(all_id)
ids = []
for item in all_id:
x = str(item)[1:-2]
y = x.lower()
ids.append(y)
if data in ids:
im = Image.open('assets/uploads/avatars/'+filename)
cropped_avatar = crop_max_square(im).resize((200, 200), Image.LANCZOS)
cropped_avatar.save(os.path.join('assets/uploads/avatars/small/', filename))
cropped_avatar.close()
avatar_link = 'uploads/avatars/small/'+filename
print("cropped avatar save")
print("id is exist, add avatar...")
sql.execute("""UPDATE users SET avatar_link=?, user_name=?, telegram=?, phone=? WHERE user_id = ?""", (avatar_link, user_name, telegram, phone, data))
database.commit()
print("avatar succesfully uploaded!")
return redirect(url_for('profile_upload'))
else:
flash('Allowed image types are - png, jpg, jpeg, gif')
return redirect(request.url)
А на другой при загрузке выдает вышеописанную ошибку: 502 Bad Gateway nginx
@app.route('/upload', methods=['POST','GET'])
@login_required
def upload():
order_id = request.url.split('=')[1].replace('%20', ' ')
print(str(order_id))
class orderPageData():
name = get_selected_order(order_id)[0]
class userPageData():
avatar = get_user_data(data)[9]
name = get_user_data(data)[3]
telegram = get_user_data(data)[4]
f = request.files.getlist('files[]')
dirName = str(order_id)
user_folder = 'assets/uploads/userfiles/'+dirName
try:
os.mkdir(user_folder)
print('directory is created!')
except FileExistsError:
print("Directory " , dirName , " already exists")
for file in f:
if file and allowed_file(file.filename):
filename = secure_filename(file.filename)
file.save(os.path.join(user_folder, filename))
# flash('%s uploaded!' %file.filename)
# return redirect(request.url)
return render_template('upload.html', userPageData = userPageData, orderPageData=orderPageData)
Возможно это как то связано с тем, что в первом варианте url "чистый": http://site.ru/profile и загрузка проходит нормально, а во втором варианте url с доп данными: http://site.ru/order?x=adasdasd
В логе nginx:
[error] 23587#23587: *47 upstream prematurely closed connection while reading response header from upstream, client: 81.200.10.245, server: site.ru, request: "POST /upload?a=adasdasd HTTP/1.1", upstream: "uwsgi://unix:/tmp/flask-uwsgi.sock:", host: "site.ru", referrer: "http://site.ru/upload?a=adasdasd"
файл nginx.conf :
GNU nano 2.9.3 /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
# multi_accept on;
}
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 0;
types_hash_max_size 2048;
fastcgi_read_timeout 400s;
send_timeout 10m;
client_header_timeout 10m;
client_body_timeout 10m;
large_client_header_buffers 8 32k;
proxy_connect_timeout 90s;
proxy_send_timeout 120s;
proxy_read_timeout 120s;
include /etc/nginx/mime.types;
default_type application/octet-stream;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
client_max_body_size 2000m;
}
Ошибка вылетает при загрузке такого же файла как и на первом роуте (png ~ 3мб) На локальном сервере все равботает без проблем. При выполнении код даже не создает папку для файлов, то есть сайт виснет и чего то ждет, не дождавшись ошибку.
Апач не запущен.
Честно говоря я вообще не разбираюсь в устройстве nginx и wsgi. Третий день рою в сети решения.
Главное - я не понимаю проблема с кодом или с сервером.