Proxy (nginx) hatalı ağ geçidi hatası gösteriyor


18

Ben ishal olduğu bir hizmeti (liman işçisi kayıt) var port 5000, ben den yönlendirme http isteği nginx yüklemiş 8080için 5000. Eğer bir kıvrım yaparsam localhost:5000çalışır, ama bir kıvrılma localhost:8080yaptığımda bir Kötü ağ geçidi hatası alıyorum.

nginx yapılandırma dosyası:

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;
 }

}

In /var/log/nginx/error.logI sahiptir:

[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"

Herhangi bir fikir?


Benim durumumda, vekalet ettiğim hizmetim onu ​​kullanarak ortasında öldü (ve bunu fark etmedim). Bir saniye ona erişiyordum, sonraki saniye kötü ağ geçidim oldu. Hizmeti yeniden başlatmak zorunda kaldım.
Michael Plautz

Yanıtlar:


57

Bir Linux kutusu olduğunu varsayıyorum, bu yüzden SELinux bağlantıyı engelliyor çünkü bağlantıya izin veren bir politika yok.

Sadece koşabilmelisin

# setsebool -P httpd_can_network_connect true

ve sonra nginx'i yeniden başlatın.


Selinux devre dışı, ayrıca servis firewalld
hellb0y77

2
Sen cehennemi düzeltmedin bile benim sorunumu çözdün. SE_LINUX tekrar saldırıyor!
Wesley Burr

1
Bu benim için de işe yaradı. Gerçekte ne yaptığına dair daha fazla bilgiye sahip olan var mı? Bilmekten nefret ediyorum!
martinedwards

CentOs 7'de oylandı ve çalıştı, bunun hangi güvenlik sorunlarını açabileceğini sorabilir miyim? Genellikle yerel trafiğe izin veren bir dizi iptables kuralı çalıştırıyorum. Bunun ne olduğunu merak ediyorum.
edencorbin

1
@edencorbin, httpd modüllerinin ağa bağlanabilmesini sağlar.
Warren

5

Hata mesajına dayanarak, localhost: 5000'in istemeyebileceğiniz bir ipv6 adresi olarak çözülüp çözülmediğini merak ediyor. Bunu 127.0.0.1:5000 olarak değiştirmeyi deneyebilirsiniz

EDIT: proxy_pass satırında, URL'nin bir parçası eksik olabilir? Olabilmek için $ request_uri eklemeyi deneyin:

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

veya muhtemelen:

proxy_pass http://docker-registry$request_uri;

Hangisinin en doğru olduğundan emin değilim.

Dikkate alınması gereken başka bir şey. Yapılandırmanız şunu gösterir:

server_name registry.mydomain.com;

Bu nedenle, localhost: 8080 eşleşmeyebilir. Test için bunu şu şekilde değiştirebilirsiniz:

server_name registry.mydomain.com localhost;

Daha sonra localhost: 8080 ve alan adınız eşleşir. Registry.mydomain.com'un sadece bir örnek olduğunu ve gerçek sunucu FQDN'nizi oraya koyacağınızı varsayıyorum.


Çalışmıyor, ayarladım 127.0.0.1:5000ve sadece denedim server_name localhostve server_name registry.mydomain.com( registry.mydomain.com/ etc / hosts ana bilgisayar
adıyla

[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"Localhost ile 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: localhost, request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:5000/", host: "localhost:8080"
hellb0y77
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.