Saya memiliki layanan (buruh pelabuhan registri) yang berjalan pada port 5000
, saya telah menginstal nginx untuk mengarahkan permintaan http dari 8080
ke 5000
. Jika saya membuat ikal untuk localhost:5000
bekerja, tetapi ketika saya membuat ikal untuk localhost:8080
saya 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.log
aku 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?
Jawaban:
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.
sumber
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:
atau mungkin:
Tidak yakin yang mana yang paling benar.
Hal lain yang perlu dipertimbangkan. Konfigurasi Anda menunjukkan:
Jadi, localhost: 8080 mungkin tidak cocok. Untuk pengujian, Anda dapat mengubahnya ke:
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.
sumber
127.0.0.1:5000
dan saya telah mencoba dengan hanyaserver_name localhost
danserver_name registry.mydomain.com
(mencoba dari server lain di lan yang sama dengan hostnameregistry.mydomain.com
di / etc / hosts), dan keduanya, tetapi tidak ada ... kesalahan yang sama[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"