Ukuran buffer jelas masih merupakan nilai default (4096), pastikan Anda bekerja pada instance yang benar. Anda juga dapat menulis "-b 32k". Pastikan juga opsi ini (ukuran buffer) belum diatur dalam beberapa file konfigurasi.
zakinster
Tidak ada file konfigurasi. Masih tidak bekerja :(
@ zakinster Entah mengapa format nilai dengan ktidak berfungsi untuk saya. Harus memberikan nomor lengkap. Tidak dapat menemukan petunjuk apa pun pada format yang dapat Anda gunakan di sini.
famousgarkin
Jawaban:
207
Saya juga mengalami masalah yang sama saat mengikuti beberapa tutorial. Masalahnya adalah saya mengatur opsi socket = 0.0.0.0:8000alih-alih http = 0.0.0.0:8000.
socketopsi yang dimaksudkan untuk digunakan dengan beberapa router pihak ketiga (misalnya nginx), sedangkan ketika httpopsi diatur uwsgi dapat menerima permintaan HTTP yang masuk dan merutekannya dengan sendirinya.
Saya hanya ingin mengomentari ini: uwsgi memiliki opsi "http", "http-socket" dan "socket". Saya ingin memanggil skrip python cgi; "soket" adalah jawabannya.
NuclearPeon
Dalam file konfigurasi Nginx kita mungkin ingin menggunakan ini: include / etc / nginx / uwsgi_params; uwsgi_pass django_upstream;
mennanov
3
Itu bukan solusi yang benar. Bagaimana jika kita ingin melepas soket?
Farsheed
2
@Feedeed, saya baru saja menjelaskan mengapa OP melihat kesalahan ini. Cara memperbaikinya sepenuhnya terserah Anda. Mungkin socket = /tmp/myapp.sockatau http = 0.0.0.0:8000atau apa pun tergantung pada kebutuhan Anda.
Palasaty
1
Walaupun jawaban ini dapat menyelesaikan masalah dalam beberapa situasi, saya pikir jawaban yang benar dalam kasus umum adalah yang diberikan oleh @Feedeed di bawah ini.
Augusto Destrero
142
Solusi yang benar adalah tidak beralih ke protokol HTTP. Anda hanya perlu menambah ukuran buffer di pengaturan uWSGI.
buffer-size=32768
atau dalam mode commandline:
-b 32768
Kutipan dari dokumentasi resmi:
Secara default, uWSGI mengalokasikan buffer yang sangat kecil (4096 byte) untuk header dari setiap permintaan. Jika Anda mulai menerima "ukuran blok permintaan tidak valid" di log Anda, itu bisa berarti Anda membutuhkan buffer yang lebih besar. Tingkatkan (hingga 65535) dengan opsi ukuran buffer.
Jika Anda menerima '21573' sebagai ukuran blok permintaan dalam log Anda, itu bisa berarti Anda menggunakan protokol HTTP untuk berbicara dengan instance yang berbicara dengan protokol uwsgi. Jangan lakukan ini.
Terkadang Anda harus menggunakan protokol http, karena soket unix hanya tersedia di mesin lokal. Pertimbangkan situasi ketika Anda memiliki sejumlah mesin dan penyeimbang terpisah di atasnya - Anda harus menggunakannya di http-socketsini.
Palasaty
@Palasaty atau soket IP dan uwsgiprotokol, maka Anda mungkin juga mendapatkan kesalahan yang sama dengan OP
Andrei
2
@Palasaty, dengan alasan apa pun, memperbaiki ukuran buffer akan memperbaiki masalah!
Farsheed
Saat menggunakan nginx sebagai proxy terbalik saya harus menggunakan http-socket. Ada lagi yang memberi "502 Bad Gateway", bahkan ketika ukuran buffer ditingkatkan.
Hubro
Adapun dokumentasi yang dikutip "Jika Anda menerima '21573' sebagai ukuran blok permintaan dalam log Anda, itu bisa berarti Anda menggunakan protokol HTTP untuk berbicara dengan instance berbicara protokol uwsgi. Jangan lakukan ini." Jadi jelas bahwa sarannya salah .... Juga, pengguna @Kartic telah mencoba menggunakan opsi "-b" ...
LittleEaster
14
Saya mengalami masalah yang sama mencoba menjalankannya di bawah nginx dan mengikuti dokumen di sini . Penting untuk dicatat bahwa setelah Anda beralih ke nginx, Anda harus memastikan Anda tidak mencoba mengakses aplikasi pada port yang ditentukan oleh param --socket tetapi lebih ke port "listen" di nginx.conf. Meskipun masalah Anda dijelaskan secara berbeda, judulnya sama persis dengan masalah yang saya miliki.
ya saya mengalami hal yang sama. dengan kata lain, saya mendapat kesalahan ketika saya meringkuk port secara lokal, sedangkan saya bisa berhasil menavigasi ke 'lokasi' dari wsgi-reverse-proxy saya sebagaimana ditentukan dalam `nginx.conf 'saya, karena protokol server wsgi di soket yang saya pilih adalah wsgi dan bukan http
danyamachine
14
Saya bisa memperbaikinya dengan menambahkan --protocol = http ke uwsgi
Bagaimana saya bisa mengatur ini di file pengaturan uWSGI ini? Konfigurasi saya berfungsi dengan saran Anda tetapi hanya di baris perintah.
Henry Lynx
2
@HenryLynx, tambahkan saja protocol=httpke .inifile Anda
151291
7
Kesalahan ini ditampilkan ketika server uWSGI menggunakan uwsgiprotokol dan seseorang mencoba mengaksesnya melalui httpprotokol oleh curlatau browser web secara langsung. Jika Anda bisa, coba konfigurasikan server uWSGI Anda untuk menggunakan httpprotokol, sehingga Anda dapat mengaksesnya melalui browser web atau ikal.
Ada juga server proxy terbalik sederhana uwsgi_proxyjika Anda perlu mengakses aplikasi Anda melalui browser web dll. Lihat jawaban yang lebih luas https://stackoverflow.com/a/32893520/179581
Seperti yang ditunjukkan dalam komentar lain dari dokumen:
Jika Anda menerima '21573' sebagai ukuran blok permintaan dalam log Anda, itu bisa berarti Anda menggunakan protokol HTTP untuk berbicara dengan instance yang berbicara dengan protokol uwsgi. Jangan lakukan ini.
Jika Anda menggunakan Nginx, ini akan terjadi jika Anda memiliki konfigurasi ini (atau sesuatu yang serupa aneh):
proxy_pass http://unix:/path/to/socket.sock
ini berbicara HTTP ke uWSGI (yang membuatnya galak). Sebaliknya, gunakan:
k
tidak berfungsi untuk saya. Harus memberikan nomor lengkap. Tidak dapat menemukan petunjuk apa pun pada format yang dapat Anda gunakan di sini.Jawaban:
Saya juga mengalami masalah yang sama saat mengikuti beberapa tutorial. Masalahnya adalah saya mengatur opsi
socket = 0.0.0.0:8000
alih-alihhttp = 0.0.0.0:8000
.socket
opsi yang dimaksudkan untuk digunakan dengan beberapa router pihak ketiga (misalnya nginx), sedangkan ketikahttp
opsi diatur uwsgi dapat menerima permintaan HTTP yang masuk dan merutekannya dengan sendirinya.sumber
socket = /tmp/myapp.sock
atauhttp = 0.0.0.0:8000
atau apa pun tergantung pada kebutuhan Anda.Solusi yang benar adalah tidak beralih ke protokol HTTP. Anda hanya perlu menambah ukuran buffer di pengaturan uWSGI.
atau dalam mode commandline:
Kutipan dari dokumentasi resmi:
Dari sini: https://uwsgi-docs.readthedocs.io/en/latest/ThingsToKnow.html
sumber
http-socket
sini.uwsgi
protokol, maka Anda mungkin juga mendapatkan kesalahan yang sama dengan OPhttp-socket
. Ada lagi yang memberi "502 Bad Gateway", bahkan ketika ukuran buffer ditingkatkan.Saya mengalami masalah yang sama mencoba menjalankannya di bawah nginx dan mengikuti dokumen di sini . Penting untuk dicatat bahwa setelah Anda beralih ke nginx, Anda harus memastikan Anda tidak mencoba mengakses aplikasi pada port yang ditentukan oleh param --socket tetapi lebih ke port "listen" di nginx.conf. Meskipun masalah Anda dijelaskan secara berbeda, judulnya sama persis dengan masalah yang saya miliki.
sumber
Saya bisa memperbaikinya dengan menambahkan --protocol = http ke uwsgi
sumber
protocol=http
ke.ini
file AndaKesalahan ini ditampilkan ketika server uWSGI menggunakan
uwsgi
protokol dan seseorang mencoba mengaksesnya melaluihttp
protokol olehcurl
atau browser web secara langsung. Jika Anda bisa, coba konfigurasikan server uWSGI Anda untuk menggunakanhttp
protokol, sehingga Anda dapat mengaksesnya melalui browser web atau ikal.Jika Anda tidak dapat (atau tidak ingin) mengubahnya, Anda dapat menggunakan proxy terbalik (mis.
nginx
) Di depan server uWSGI lokal atau jarak jauh, lihat https://uwsgi-docs.readthedocs.org/en/latest/Nginx .htmlJika terasa terlalu banyak pekerjaan, cobalah
uwsgi-tools
paket python:Ada juga server proxy terbalik sederhana
uwsgi_proxy
jika Anda perlu mengakses aplikasi Anda melalui browser web dll. Lihat jawaban yang lebih luas https://stackoverflow.com/a/32893520/179581sumber
Seperti yang ditunjukkan dalam komentar lain dari dokumen:
Jika Anda menggunakan Nginx, ini akan terjadi jika Anda memiliki konfigurasi ini (atau sesuatu yang serupa aneh):
ini berbicara HTTP ke uWSGI (yang membuatnya galak). Sebaliknya, gunakan:
sumber
man im havin masalah yang sama; jadi saya melakukannya ... lihat menggunakan UWSGI + DJANGO + NGINX + REACT +
1 - nano /etc/uwsgi/sites/app_plataform.ini [uwsgi]
2 - melakukan peningkatan kinerja yang serius pada nginx ... pengguna www-data;
3 - lalu ... mulai ulang layanan atau masukkan kembali server ...
sumber