Ada masalah dengan nginx
. Itu menutup koneksi sebelum klien selesai mengunduh. Sepertinya:
$ wget -O /dev/null http://www.site.com/images/theme/front/clean.jpg
--2012-07-11 21:37:03-- http://www.site.com/images/theme/front/clean.jpg
Resolving www.site.com (www.site.com)... 123.234.123.234
Connecting to www.site.com (www.site.com)|123.234.123.234|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 90707 (89K) [image/jpeg]
Saving to: `/dev/null'
26% [===============> ] 24,291 --.-K/s in 8.7s
2012-07-11 21:37:12 (2.74 KB/s) - Connection closed at byte 24291. Retrying.
--2012-07-11 21:37:13-- (try: 2) http://www.site.com/images/theme/front/clean.jpg
Connecting to www.site.com (www.site.com)|123.234.123.234|:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 90707 (89K), 66416 (65K) remaining [image/jpeg]
Saving to: `/dev/null'
53% [+++++++++++++++============> ] 48,555 --.-K/s in 8.7s
2012-07-11 21:37:23 (2.74 KB/s) - Connection closed at byte 48555. Retrying.
--2012-07-11 21:37:25-- (try: 3) http://www.site.com/images/theme/front/clean.jpg
Connecting to www.site.com (www.site.com)|123.234.123.234|:80... connected.
HTTP request sent, awaiting response... 206 Partial Content
Length: 90707 (89K), 42152 (41K) remaining [image/jpeg]
Saving to: `/dev/null'
100%[+++++++++++++++++++++++++++========>] 90,707 --.-K/s in 0.1s
2012-07-11 21:37:25 (311 KB/s) - `/dev/null' saved [90707/90707]
pada saat yang sama dengan gambar yang lebih kecil semua baik-baik saja:
$ wget -O /dev/null http://www.site.com/images/theme/front/grease.jpg
--2012-07-11 21:41:28-- http://www.site.com/images/theme/front/grease.jpg
Resolving www.site.com (www.site.com)... 123.234.123.234
Connecting to www.site.com (www.site.com)|123.234.123.234|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 21404 (21K) [image/jpeg]
Saving to: `/dev/null'
100%[====================================>] 21,404 --.-K/s in 0.07s
2012-07-11 21:41:29 (316 KB/s) - `/dev/null' saved [21404/21404]
Ini adalah alasan mengapa gambar ini tidak dapat ditarik sepenuhnya di browser. Saya hanya bisa melihat kepala itu.
Nginx dikonfigurasi sebagai front-end dan apache sebagai back-end. Tautan langsung ke apache berfungsi dengan baik, sehingga ada masalah di nginx. Apakah saya benar?
konfigurasi nginx:
user satellite;
worker_processes 1;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
multi_accept on;
}
http {
include /etc/nginx/mime.types;
access_log /var/log/nginx/access.log;
sendfile on;
keepalive_timeout 0;
tcp_nodelay on;
gzip on;
gzip_disable "MSIE [1-6]\.(?!.*SV1)";
client_max_body_size 100m;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
server {
listen 123.234.123.234:80;
server_name site.com www.site.com;
location ~* ^/(admin/|dump/|webmail/|myadmin/|webim/) {
proxy_pass http://123.234.123.234:8080;
proxy_redirect http://site.com:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
location / {
proxy_pass http://123.234.123.234:8080;
proxy_redirect http://site.com:8080/ /;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache ino;
proxy_cache_valid 12h;
proxy_hide_header "Set-Cookie";
proxy_ignore_headers "Cache-Control" "Expires";
}
location ~* ^.+\.(jpg|swf|flv|ico|txt|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
access_log /home/satellite/logs/site.com.nginx.access.log;
error_page 404 = @fallback;
if ( $host ~* ^((.*).site.com)$ ) {
set $proot /home/satellite/www/$1;
break;
}
if ( $host = "www.site.com" ) {
break;
}
if ( $host = "site.com" ) {
break;
}
root /home/satellite/www/site.com;
}
location @fallback {
proxy_pass http://123.234.123.234:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;
}
}
di mana saya harus menggali untuk memperbaiki masalah ini?
nginx
web-server
buru-buru
sumber
sumber
sendfile
?Jawaban:
Hal utama yang saya lupa adalah memeriksa
/var/log/nginx/error.log
.Jadi saya memperbaiki
/var/lib/nginx/proxy/*
izin direktori (sudo chown -R www-data:www-data /var/lib/nginx/proxy/*
) dan sekarang semuanya berfungsi dengan baik. Terima kasih semuanya atas bantuannya.sumber
Alasan yang mungkin untuk penutupan koneksi adalah koneksi yang lambat dan pendek
keepalive_timeout
. Nilai default untukkeepalive_timeout
adalah 75-an. Jika terlalu pendek dan koneksinya lambat, maka bisa ditutup terlalu dini.Salah satu alasan mengapa unduhan gambar Anda bisa lambat adalah aplikasi Anda. Jika Anda menggunakan aplikasi Ruby-on-Rails dengan Asset Pipeline dalam kombinasi dengan Nginx, maka unduhan gambar bisa lambat karena Anda menggunakan url gambar yang salah (tanpa sidik jari yang dihasilkan oleh pipa aset). The Rails helps asset_path dan image_tag menghasilkan file form url yang tepat dengan sidik jari yang dapat diunduh dengan cepat.
sumber
Hal lain yang sangat penting untuk diperiksa adalah: Pastikan Anda memiliki ruang disk yang tersisa!
Bagi saya itu seperti berikut:
Bagi saya, nginx tidak dapat menulis ke disk yang pada akhirnya menyebabkan masalah yang sama! Semoga ini bisa membantu seseorang!
sumber
Tingkat unduhan Anda sangat rendah. (2,74 KB / s!). Apakah Anda mendapatkan hasil yang sama saat menjalankan wget pada mesin yang sama di mana Nginx berada? Bisa jadi Nginx bereaksi wajar terhadap permintaan melalui tautan yang sangat lambat.
Kalau tidak, saya sarankan menjelajahi berbagai arahan waktu dalam dokumen Nginx . Cari setiap penyebutan "batas waktu" pada halaman dan lihat apakah Anda menemukan kecocokan yang baik. Misalnya, Anda dapat melihat waktu Anda habis dalam interval 10 detik, sehingga batas waktu sekitar 10 detik harus mendapat pemeriksaan ekstra.
Sebagai contoh, lingering_timeout default direktif untuk 10 detik, sehingga Anda mungkin memeriksa bahwa.
Anda juga harus melihat mengapa koneksi dengan klien Anda tampaknya sangat lambat.
Gagasan lain: Coba klien alternatif, seperti
curl
, dan lihat Anda mendapatkan hasil yang sama seperti Anda melakukannyawget
. Jikacurl
berfungsi dengan baik, Anda harus curiga ada yang aneh denganwget
membuat permintaan.sumber
Periksa lingering_time nilai di nginx.conf. Ini secara default akan diatur ke 30sec. Jadi yang akan dilakukan adalah, nginx akan menunggu maksimal 30 detik untuk klien mengirim data.
Jika Anda melakukan unggahan atau POST file yang mungkin membutuhkan waktu lebih dari 30 detik untuk menyelesaikan, maka server nginx akan mengatur ulang koneksi ke klien dengan mengirimkan paket RST ke klien jika waktu untuk mengunggah melebihi 30 detik.
Agar nginx menunggu lebih banyak waktu untuk mendengarkan data klien, lalu atur nilai ini ke nilai yang lebih tinggi.
Untuk info terperinci tentang lingering_time, lihat di sini lingering_time
sumber