Puncte:0

Cum îmi pot configura serverul nginx pentru a accepta diferite subdomenii și, de asemenea, porturi?

drapel mx

Am un server care rulează pe Ubuntu/Nginx. Am subdomenii care rulează din diferite porturi interne. Vreau să expun o aplicație publicului, dar să nu o asociez cu niciun nume de domeniu/server.

Mai jos este fișierul meu de configurare:

Server {
    nume_server app.example.com www.app.example.com;
    access_log /home/hub-app/logs/app.example.com.access.log;
    
    Locație / {
        proxy_set_header Gazdă $gazdă;
        proxy_pass http://127.0.0.1:8082;
        proxy_redirect dezactivat;
        proxy_set_header Actualizare $http_upgrade;
        proxy_set_header Conexiune „upgrade”;      
        proxy_cache_bypass $http_upgrade;       
        proxy_http_versiunea 1.1;     
        proxy_set_header X-Real-IP $adresă_la distanță;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $schema; 
    }

    asculta 443 ssl; 
    ssl_certificate /etc/letsencrypt/live/app.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/app.example.com/privkey.pem;
    includ /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;


}   

Server {
    nume_server example.com www.example.com;
    access_log /home/hub-public/logs/example.com.access.log;
    
    Locație / {
        proxy_set_header Gazdă $gazdă;
        proxy_pass http://127.0.0.1:8081;
        proxy_redirect dezactivat;
        proxy_set_header Actualizare $http_upgrade;
        proxy_set_header Conexiune „upgrade”;      
        proxy_cache_bypass $http_upgrade;       
        proxy_http_versiunea 1.1;     
        proxy_set_header X-Real-IP $adresă_la distanță;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $schema; 
    }

    asculta 443 ssl;
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem; 
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem; 
    includ /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; 

}

Cele de mai sus funcționează bine și indică domeniile specificate, de exemplu example.com și app.example.com. Acum vreau să adaug un alt server virtual pentru a rula la MY_PUBLIC_IP:8080. Portul 8080 nu ar trebui să fie accesibil pe celelalte domenii, de exemplu. example.com:8080/app.example.com:8080 nu ar trebui să fie disponibile.

djdomi avatar
drapel za
utilizați ca server_name IP-ul
Puncte:0
drapel ru

Poți să folosești implicit_server.

Nginx va declara acel server ca server implicit. După aceea, Nginx va utiliza serverul implicit pentru a gestiona solicitările atunci când antetul lor HTTP Host rămâne nepotrivit cu niciun alt bloc de server.

Ce este default_server în Nginx

Exemplu:

Server {
    asculta 8080 default_server;
    
    root /www/default;
        
    Locație / {
        index index.html;
    }
}


Îl folosesc pentru roboții de scanare Honeypot și le transmit niște emoji-uri caca dacă caută phpAdmin sau ceva asemănător :)

Puncte:0
drapel gr

Nu cred că răspunsul @Klamberext răspunde cu adevărat la întrebare. Adică, serverul web nginx are un server implicit concept. Pagina oficială de documentație pe acest subiect poate fi găsită aici: Cum procesează nginx o solicitare. Cu toate acestea, unul dintre blocurile de server care ascultă pe o combinație de interfață de rețea/port va acționa întotdeauna ca cel implicit. Dacă nu specificați acel bloc de server în mod explicit, acesta va fi primul bloc de server din configurația dvs. Asta înseamnă că serverul tău se blochează cu nume_server app.example.com www.app.example.com; linia va fi blocul implicit al serverului pentru orice solicitare care vine pe portul 443 TCP, deservind orice solicitare unde un HTTP Gazdă antetul nu se va potrivi exemplu.com sau www.example.com (sau dacă nu va exista Gazdă antet deloc).

După cum a spus deja @Klamberext, o practică obișnuită este de a defini un bloc de server stub pentru a captura toate cererile în care Gazdă Antetul HTTP nu se potrivește cu niciunul dintre domeniile pe care le deserviți. Puteți vedea un exemplu la acest Așa răspuns. De obicei, un astfel de bloc de server conține întoarcere 444; declarație care este un cod special de returnare nginx pentru a închide imediat conexiunea.Cu toate acestea, se pare că aveți nevoie de ceva opus și veți avea nevoie de două blocuri de server pentru a realiza acest lucru, deoarece, după cum s-a spus deja, un singur bloc de server care ascultă pe portul TCP 8080 va acționa ca cel implicit, indiferent care este Gazdă antetul setat la:

Server {
    asculta 8080;
    server_name example.com www.example.com app.example.com www.app.example.com;
    întoarcere 444;
}
Server {
    asculta 8080 default_server;
    ... configurația dvs. aici
}

Ca alternativă, puteți verifica Gazdă valoarea antetului din blocul serverului dvs., de exemplu pentru a bloca un exemplu.com domeniul și oricare dintre subdomeniile acestuia:

Server {
    asculta 8080;
    if ($http_host ~ \.?example\.com$) { returnează 444; }
    ... configurația dvs. aici
}

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.