Saya baru saja menginstal Redis dengan sukses menggunakan petunjuk pada panduan Mulai Cepat di http://redis.io/topics/quickstart di server Ubuntu 10.10 saya. Saya menjalankan layanan sebagai dameon (sehingga dapat dijalankan oleh init.d)
Server adalah bagian dari Rackspace Cluster dengan IP Internal dan Eksternal. Host berjalan pada port 6379 (standar untuk Redis)
Saya telah menambahkan baris di iptables untuk mengizinkan koneksi masuk dari port 6379 seperti yang ditunjukkan di bawah ini:
ACCEPT tcp -- anywhere anywhere tcp dpt:6379
Dalam kode PHP saya di server lain, saya mencoba menyambung ke server Redis baru di sini:
$this->load->helper("iredis");
$hostname = "IP ADDRESS HERE";
$redis = new iRedis(array('hostname' => $hostname, 'port' => 6379));
Setelah saya melakukan ini - saya selalu mendapatkan koneksi ditolak. Di file redis.conf saya, saya memiliki perintah bind lokal yang dikomentari, jadi itu harus mendengarkan lebih dari IP localhost. Saya dapat terhubung ke database di mesin lokal tidak hanya di server lain. Saya sudah mencoba IP eksternal dan internal tidak berhasil.
Ada saran untuk membuat ini bekerja?
sumber
redis-cli -h hostname
Jawaban:
Pertama saya akan memeriksa untuk memverifikasi itu mendengarkan pada IP yang Anda harapkan:
Bergantung pada bagaimana Anda memulai / menghentikan, Anda mungkin tidak benar-benar memulai ulang instans saat Anda mengira telah melakukannya. Netstat akan memberi tahu Anda jika ia mendengarkan di tempat yang Anda pikirkan. Jika tidak, restart dan pastikan restart. Jika restart dan masih tidak mendengarkan seperti yang Anda harapkan, periksa file konfigurasi Anda hanya untuk memastikan.
Setelah menetapkan itu mendengarkan di mana Anda mengharapkannya, dari node jarak jauh yang seharusnya memiliki akses coba:
Anda juga dapat mencobanya dari host lokal tetapi gunakan IP yang Anda harapkan untuk didengarkan daripada nama host atau host lokal. Anda seharusnya melihatnya sebagai tanggapan PONG dalam kedua kasus tersebut.
Jika tidak, firewall Anda sedang / memblokir Anda. Ini bisa berupa IPTables lokal atau mungkin firewall di antara node. Anda dapat menambahkan pernyataan pencatatan ke konfigurasi IPtables Anda untuk mencatat koneksi melalui 6379 untuk melihat apa yang terjadi. Selain itu, mencoba me-redis ping dari lokal dan non-lokal ke IP yang sama harus memberikan gambaran. Jika merespons secara lokal tetapi tidak dari jarak jauh, saya akan condong ke firewall intervensi tergantung pada kompleksitas aturan Tabel IP on-node Anda.
sumber
Saya telah terjebak dengan masalah yang sama, dan jawaban sebelumnya tidak membantu saya (meskipun ditulis dengan baik).
Solusinya ada di sini: periksa Anda
/etc/redis/redis.conf
, dan pastikan untuk mengubah defaultuntuk
Kemudian restart layanan Anda (
service redis-server restart
)Sekarang Anda dapat memeriksa apakah redis sedang mendengarkan di antarmuka non-lokal dengan
(ganti 192.168.xx dengan alamat IP Anda)
Catatan penting: seperti yang dinyatakan beberapa pengguna, tidak aman untuk menyetel ini di server yang terpapar ke Internet. Anda harus yakin bahwa redis dilindungi dengan cara apa pun yang sesuai dengan kebutuhan Anda.
sumber
bind 0, ::
,bind 0, [::]
,bind 0\nbind6 ::
(di mana \ n adalah baris baru) danbind 0 [::]
tetapi satu-satunya yang bekerja tidak memilikibind
garis di konfigurasi sama sekali. Secara default mendengarkan pada 0 (atau 0.0.0.0/0) dan [::] jadi tidak ada masalah, tapi saya ingin tahu metode yang tepat jika saya membutuhkannya. Tampaknya tidak didokumentasikan di mana pun.iptables
) untuk memblokir klien yang tidak sah.Selain jawaban luar biasa yang diberikan oleh Orabîg:
Saya menyelesaikan masalah ini dengan menghapus seluruh
bind
bagian dan mengaturprotected-mode
keno
.Jangan pernah menggunakan metode ini di server yang terbuka secara publik.
sumber
Orabig benar.
Anda dapat mengikat 10.0.2.15 di Ubuntu (VirtualBox) kemudian melakukan penerusan port dari host ke guest Ubuntu.
di /etc/redis/redis.conf
lalu, mulai ulang redis:
Ini akan berhasil!
sumber
Saya kesulitan dengan koneksi jarak jauh ke Redis selama beberapa hari. Akhirnya saya berhasil. Berikut adalah daftar lengkap yang saya kumpulkan untuk diikuti agar dapat terhubung. Beberapa solusi diberikan dalam jawaban di atas. Namun saya ingin jawaban saya menjadi nano-wiki tentang subjek tersebut :) Saya juga menambahkan beberapa tautan yang berguna.
Jika redis bekerja secara lokal:
Jika kata sandi tidak disetel
Lihat
/etc/redis/redis.conf
config (ini adalah lokasi default untuk Ubuntu 18.04, Anda mungkin memilikinya di lokasi yang berbeda):Jika mode terproteksi disetel ke 'no' dalam konfigurasi:
jika pengikatan IP terbuka untuk akses dari internet di konfigurasi:
Jika firewall Linux memungkinkan koneksi
(di sini untuk Ubuntu 18.04) Periksa ini memungkinkan lalu lintas internet masuk untuk pergi ke port
6379
(port default Redis)Mulai ulang layanan Redis
Jangan lupa untuk me-restart layanan Redis agar perubahan diterapkan dan melihatnya sedang berjalan:
Periksa apakah itu berfungsi sebagai server jarak jauh
dari baris perintah Anda, gunakan
redis-cli
seolah-olah server Redis berada di server jarak jauh:Jika Anda dapat melakukan ping-PONG server Redis Anda melalui server internet yang terhubung sebagai server jarak jauh daripada koneksi Redis jarak jauh berfungsi.
Peringatan keamanan
Semua hal di atas membuat data Redis Anda terbuka sepenuhnya untuk siapa saja dari internet.
Untuk pada dasarnya mengamankan penggunaan
requirepass
danprotected-mode yes
pengaturan Redis di konfigurasi Redis (lihat di atas) dan memblokir perintah Redis yang berbahaya (lihat tautan di atas), untuk pemahaman yang lebih dalam, lihat artikel ini dan bagian keamanan situs Redis ).Link yang berguna
Beberapa tautan untuk membantu Cara menginstal dan mengamankan Redis di Ubuntu 18.04 dan cara mengatur firewall Ubuntu 18.04 .
Semoga membantu.
sumber
jika Anda mengunduh redis sendiri (bukan apt-get install redis-server) dan kemudian mengedit redis.conf dengan saran di atas, pastikan Anda memulai redis dengan konfigurasi seperti ini:
./src/redis-server redis.conf
sumber
Mengatur tcp-keepalive ke 60 (itu diatur ke 0) dalam konfigurasi redis server membantu saya menyelesaikan masalah ini.
sumber