Proxy (nginx) menunjukkan kesalahan gateway Buruk


18

Saya memiliki layanan (buruh pelabuhan registri) yang berjalan pada port 5000, saya telah menginstal nginx untuk mengarahkan permintaan http dari 8080ke 5000. Jika saya membuat ikal untuk localhost:5000bekerja, tetapi ketika saya membuat ikal untuk localhost:8080saya mendapatkan kesalahan gateway buruk .

file konfigurasi nginx:

upstream docker-registry {
 server localhost:5000;
}

server {
 listen 8080;
 server_name registry.mydomain.com;

 proxy_set_header Host       $http_host; 
 proxy_set_header X-Real-IP  $remote_addr; 
 client_max_body_size 0; 
 chunked_transfer_encoding on;

 location / {

     proxy_pass http://docker-registry;
 }
 location /_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }
 location /v1/_ping {
     auth_basic off;
     proxy_pass http://docker-registry;
 }

}

Dalam /var/log/nginx/error.logaku punya:

[crit] 15595#0: *1 connect() to [::1]:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: registry.mydomain.com, request: "GET / HTTP/1.1", upstream: "http://[::1]:5000/", host: "localhost:8080"

Ada ide?


Dalam kasus saya, layanan saya yang saya proksi mati (dan saya tidak menyadarinya) di tengah-tengah saya menggunakannya. Satu detik saya mengaksesnya, detik berikutnya saya mendapat gateway yang buruk. Saya harus memulai kembali layanan.
Michael Plautz

Jawaban:


57

Saya menganggap itu kotak Linux, jadi kemungkinan besar SELinux mencegah koneksi karena tidak ada kebijakan yang mengizinkan koneksi.

Anda harus bisa lari saja

# setsebool -P httpd_can_network_connect true

dan kemudian restart nginx.


Selinux dinonaktifkan, juga layanan firewalld
hellb0y77

2
Anda baru saja memperbaiki masalah saya , bahkan jika Anda tidak memperbaiki hellb0y77. SE_LINUX menyerang lagi!
Wesley Burr

1
Itu juga berhasil bagi saya. Adakah yang punya informasi lebih lanjut tentang apa yang sebenarnya dilakukannya? Aku benci tidak tahu!
martinedwards

Dirubah dan bekerja pada centOs 7, dapatkah saya bertanya masalah keamanan apa yang mungkin terbuka ini? Saya biasanya menjalankan seperangkat aturan iptables yang memungkinkan lalu lintas lokal. Ingin tahu apa efeknya ini.
edencorbin

1
@edencorbin memungkinkan modul httpd untuk dapat terhubung ke jaringan.
Warren

5

Berdasarkan pesan kesalahan, itu membuat saya bertanya-tanya apakah localhost: 5000 sedang diselesaikan sebagai alamat ipv6, yang mungkin tidak Anda inginkan. Anda dapat mencoba mengubahnya menjadi 127.0.0.1-5000

EDIT: Di baris proxy_pass Anda, mungkin Anda kehilangan bagian dari URL? Coba tambahkan $ request_uri sehingga bisa jadi:

proxy_pass http://docker-registry/$request_uri;

atau mungkin:

proxy_pass http://docker-registry$request_uri;

Tidak yakin yang mana yang paling benar.

Hal lain yang perlu dipertimbangkan. Konfigurasi Anda menunjukkan:

server_name registry.mydomain.com;

Jadi, localhost: 8080 mungkin tidak cocok. Untuk pengujian, Anda dapat mengubahnya ke:

server_name registry.mydomain.com localhost;

Maka localhost: 8080 akan dicocokkan, serta domain Anda. Saya berasumsi registry.mydomain.com hanyalah sebuah contoh dan Anda akan meletakkan FQDN server Anda yang sebenarnya di sana.


Tidak bekerja, mengatur 127.0.0.1:5000dan saya telah mencoba dengan hanya server_name localhostdan server_name registry.mydomain.com(mencoba dari server lain di lan yang sama dengan hostname registry.mydomain.comdi / etc / hosts), dan keduanya, tetapi tidak ada ... kesalahan yang sama
hellb0y77

Whit registry.mydomain.com [crit] 16839#0: *5 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: registry.mydomain,com request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "localhost:8080", dengan localhost:[crit] 16839#0: *5 connect() to 127.0.0.1:5000 failed (13: Permission denied) while connecting to upstream, client: 127.0.0.1, server: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "localhost:8080"
hellb0y77
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.