Puncte:0

Nginx nu deschide portul de ascultare specificat

drapel cn

Încerc să transfer traficul SSH de la nginx (ascultă pe portul 7999) la un server bitbucket (ascultă pe portul 7998) pe back-end. Atât nginx, cât și bitbucket rulează în containerele Docker. Dacă mă conectez la containerul nginx și fac telnet bitbucket.domain-name.com 7998 se conectează. Pe mașina gazdă dacă o fac netstat -pnlt Eu iau:

Conexiuni la internet active (numai servere)
Proto Recv-Q Trimitere-Q Adresă locală Adresă străină Stat PID/Nume program    
tcp6 0 0 :::2377 :::* ASCULTĂ 24477/dockerd       
tcp6 0 0 :::7946 :::* ASCULTĂ 24477/dockerd       
tcp6 0 0 :::80 :::* ASCULTĂ 24477/dockerd       
tcp6 0 0 :::443 :::* ASCULTĂ 24477/dockerd       
tcp6 0 0 :::7999 :::* ASCULTĂ 24477/dockerd   

Dar, când fac asta pe computerul meu: git clone ssh://[email protected]:7999/project_key/repo_name.git eu iau

Se clonează în „repo_name”...
ssh: conectează-te la portul gazdă nume-domeniu.com 7999: conexiune refuzată
fatal: nu s-a putut citi din depozitul de la distanță.

Și când o fac nume-domeniu telnet.com 7999 eu iau telnet: Imposibil de conectat la gazda de la distanță: Conexiune refuzată.

Se pare că problema este că nginx nu ascultă pe portul 7999 din containerul docker. Dar, pe gazdă pot vedea dockerd ascultă pe portul 7999. Îmi imaginez că s-ar putea să nu am configurația nginx corectă, dar nu sunt sigur. Iată biții relevanți din fișierele de configurare.

docker-compose.yaml (nginx)

Servicii:
    nginx:
        porturi:
            - „80:8080”
            - „443:8443”
            - „7999:7997”

nginx.conf (în interiorul containerului nginx)

curent {
    Server {
        asculta 7997;
        proxy_pass bitbucket1.cybertron.ninja:7998;
    }
}

Și iată câteva rezultate executate în interiorul containerului nginx:

root@6d123f454eef:/# netstat -pnlt
Conexiuni la internet active (numai servere)
Proto Recv-Q Trimitere-Q Adresă locală Adresă străină Stat PID/Nume program                                                                        
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 10/nginx: master pr                                                                     
tcp 0 0 0.0.0.0:8443 0.0.0.0:* LISTEN 10/nginx: master pr                                                                     
tcp 0 0 127.0.0.11:44703 0.0.0.0:* ASCULTĂ -            

Aveți idee cum să remediați această problemă? sunt nedumerit.

tilleyc avatar
drapel us
Aveți iptables, firewalld sau orice alt firewall care rulează?
drapel in
Se pare că nginx nu citește fișierul dvs. de configurare. Unde ai pus-o? Este inclus în configurația principală?
drapel cn
@tilleyc iptables rulează, dar nu sunt definite reguli personalizate, doar cele definite automat de dockerd.
drapel cn
@GeraldSchneider aici este un extras din `docker-compose.yaml`: volumes: - ./configs/nginx:/etc/nginx/conf.d:ro. Pot confirma că nginx își citește într-adevăr fișierele de configurare. Dacă nu ar fi, nu ar fi proxy porturile 80->8080 sau 443->8443.
drapel in
Ieșirea netstat din interiorul containerului nu arată portul 7997 din configurația dvs. Dacă ați adăugat acea configurație mai târziu, ați repornit containerul?
Puncte:1
drapel in

Tocmai am creat un mediu de testare pentru cazul dvs. cu puținele informații pe care le furnizați. Presupunând că ceea ce ați furnizat este tot ce ați schimbat, acest lucru nu poate funcționa.

Nginx.conf implicit din interiorul containerului oficial nginx are include directivă în interiorul a http bloc:

http {
    #...
    includ /etc/nginx/conf.d/*.conf;
}

Dacă doar plasați fișierul .conf în directorul conf.d, nginx va eșua cu următorul mesaj de eroare:

2021/09/23 05:58:30 [emerg] 1#1: directiva „stream” nu este permisă aici în /etc/nginx/conf.d/blah.conf:1

Deoarece nginx rulează, pot doar să presupun că ați plasat configurația în director după ce a pornit și nu ați repornit sau reîncărcat nginx.

The curent directiva trebuie să fie în rădăcina configurației, trebuie să furnizați și un nginx.conf modificat.

Copiați nginx.conf din containerul dvs.:

docker cp test_nginx_1:/etc/nginx/nginx.conf .

Adăugați configurația acolo sau adăugați o a doua directivă include cu un director separat și montați-o și ca volum:

De exemplu, adăugați în afara http {} bloc:

includ /etc/nginx/conf.stream.d/*.conf;

Adăugați acest lucru în docker-compose.yml

Servicii:
nginx:
    imagine: nginx
    volume:
        - ./config/nginx.conf:/etc/nginx/nginx.conf:ro
        - ./config/nginx:/etc/nginx/conf.d:ro
        - ./config/nginx_stream:/etc/nginx/conf.stream.d:ro

alerga docker-compune până -d, și funcționează.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.