Puncte:0

Două servere web pe o singură rețea LAN, care rulează apache2 și, respectiv, nginx, sub o adresă IP WAN - conectarea la serverul corect prin nume (sub)domeniu

drapel in

Am două servere fizice care rulează pe aceeași rețea LAN. Ambele rulează servere web; unul rulează apache2, celălalt nginx. Fiecare are un nume de domeniu diferit, dar aceeași adresă IP WAN externă. Să presupunem că aspectul rețelei arată astfel:

                WAN
            10.20.30.40
      |----------|----------|
      | |
   Domeniul 1 Domeniul 2
exampleABC.com (sub.)exampleXYZ.com
      | |
      |----------|----------|
                 |
            LAN unic
                 |
      |----------|----------|
      | |
  Adresă IP 1 Adresă IP 2
192.168.0.10 192.168.0.20
      | |
      | |
  Server 1 Server 2
   apache2 nginx

Serverul apache2 îmi aparține, în timp ce serverul nginx nu. Ambele servere au subdomenii dedicate pentru fiecare serviciu pe care îl furnizează - de exemplu, (www.)exampleABC.com pentru pagina web principală, cloud.exampleXYZ.com pentru un serviciu cloud cu proxy invers, media.exampleXYZ.com pentru media etc.

Din motive necunoscute, serverul nginx este cel care are prioritate atunci când se conectează la adresa IP WAN - inițial, ambele domenii ar duce la pagina web principală găzduită de nginx, dar cu următoarea configurație (actuală) nginx, exampleABC.com va duce corect la serverul apache2, în timp ce exampleXYZ.com continuă să conducă la serverul nginx.

Server {
    asculta 80;

    # asculta pe toate subdomeniile
    nume_server exampleABC.com *.exampleABC.com;
    
    Locație / {
        # proxy transparent către alt server (port 443)
        proxy_pass http://192.168.0.10:80;

        # setați antetul „Gazdă” transmis către alt server la FQDN solicitat de client, astfel încât celălalt server să știe ce subdomeniu este solicitat
        proxy_set_header Gazdă $http_host;
    }
}

Server {
    asculta 443 ssl;

    nume_server exampleABC.com *.exampleABC.com;
    
    Locație / {
        trece_proxy https://192.168.0.10:443;
        proxy_set_header Gazdă $http_host;
    }
}

Cu toate acestea, subdomeniile găzduite de serverul apache2 (docs.exampleABC.com etc.) continuă să se conecteze la nginx. (Subdomeniile nginx funcționează bine.)

Iată una dintre configurațiile de subdomeniu pe care le-am configurat prin apache2:

<VirtualHost *:80>
    ServerName ft.exampleABC.com
    Redirecționare permanentă / https://ft.exampleABC.com/
    RewriteEngine activat
    RewriteCond %{SERVER_NAME} =ft.exampleABC.com
    RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<IfModule mod_ssl.c>
    <VirtualHost _default_:443>
        # Directiva ServerName stabilește schema de solicitare, numele gazdă și portul
        # serverul îl folosește pentru a se identifica. Acesta este folosit la creare
        # adrese URL de redirecționare. În contextul gazdelor virtuale, ServerName
        # specifică ce nume de gazdă trebuie să apară în antetul solicitării Gazdă: către
        # potriviți această gazdă virtuală. Pentru gazda virtuală implicită (acest fișier) aceasta
        # valoarea nu este decisivă deoarece este folosită ca gazdă de ultimă instanță, indiferent.
        # Cu toate acestea, trebuie să îl setați pentru orice altă gazdă virtuală în mod explicit.

        ServerName ft.exampleABC.com
        #ServerAlias ​​*.exampleABC.com

        ServerAdmin webmaster@localhost
        DocumentRoot /mnt/external/webserver/ft

        # Niveluri de jurnal disponibile: trace8, ..., trace1, debug, info, notice, warn,
        # eroare, critică, alertă, emerg.
        # De asemenea, este posibil să configurați nivelul de jurnal pentru un anumit
        # module, de ex.
        #LogLevel info ssl:warn

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combinat

        # Pentru majoritatea fișierelor de configurare din conf-available/, care sunt
        # activat sau dezactivat la nivel global, este posibil să
        # includeți o linie doar pentru o anumită gazdă virtuală. De exemplu cel
        # următoarea linie activează configurația CGI numai pentru această gazdă
        # după ce a fost dezactivat global cu „a2disconf”.
        #Include conf-available/serve-cgi-bin.conf
        
        <Director /mnt/external/webserver/ft>
            Opțiuni Indexuri FollowSymLinks
            AllowOverride Nici unul
            Solicitați toate acordate
        </Director>

        # Comutator motor SSL:
        # Activați/dezactivați SSL pentru această gazdă virtuală.
        SSLEngine activat

        < tăiat: linii adăugate de certbot >

    </VirtualHost>
</IfModule>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

Aș dori să fac astfel încât, atunci când mă conectez la exampleABC.com, ft.exampleABC.com, etc., clientul să fie conectat corect la serverul apache2. exampleXYZ.com și subdomeniile sale ar trebui să se conecteze în continuare la serverul nginx, desigur.

Alte informații:

Inițial, clientul (de exemplu, browserul web) nu a putut verifica autenticitatea certificatului TLS de la exampleABC.com.(Rețineți că am avut certificate TLS configurate corect sub apache2.) Acest lucru a fost rezolvat prin adăugarea domeniilor mele apache2 la certificatele serverului nginx. Cu toate acestea, nu cred că acest lucru ar fi trebuit să fie necesar - certificatele mele (sub apache2) ar trebui să fie transmise prin proxy invers, nu?

Dacă încerc să mă conectez la serverul apache2 prin curl în timp ce specific manual antetul Host (prin curl -vL -H „Gazdă: ft.exampleABC.com” https://192.168.0.10), voi fi redirecționat către pagina web principală a serverului nginx. Nu sunt sigur ce înseamnă asta.

EDITAȚI | ×:

Aceasta este rezultatul nginx -T, conform administratorului de sistem al sistemului nginx:

- taie -

De asemenea, serverul nginx rulează într-un container prin „SWAG” de la LinuxServer.io.

EDITAȚI | ×:

SWAG de la LinuxServer.io încarcă o configurație nginx diferită de cea implicită. Următoarea comandă primește conf. corecte:

docker exec -it swag /usr/sbin/nginx -c /config/nginx/nginx.conf -T

Rezultatul comenzii menționate poate fi găsit la această pastă. (prea multe caractere pentru StackExchange)

drapel us
Vă rugăm să afișați configurația completă nginx așa cum este arătată de comanda `nginx -T`. De asemenea, vă rugăm să utilizați `example.com` în mod constant, în fragmentul dvs. actual există `*.fennet.rentals`, ceea ce face mai dificilă conectarea lucrurilor.
unilock avatar
drapel in
@Tero Kilkanen Rău, am încercat să editez toate mențiunile domeniului meu. O voi repara acum.
Zac67 avatar
drapel ru
Rularea mai multor servere pe o singură adresă IP și un număr de port TCP necesită un proxy invers - nginx ar putea face asta și să proxy serverul Apache. O redirecționare *nu* funcționează.
unilock avatar
drapel in
@Zac67 Ai putea detalia? Am crezut că serverul nginx folosea un proxy invers prin „proxy_pass”.
drapel us
Configurația nginx nu are niciun bloc `server` pentru `exampleABC.com`. Sunteți sigur că este fișierul de configurare corect?
unilock avatar
drapel in
@TeroKilkanen Am descoperit că SWAG încarcă o configurație nginx diferită de cea implicită. Mi-am editat întrebarea în mod corespunzător.
Puncte:0
drapel in

Ceea ce a funcționat a fost crearea unui fișier nou /config/nginx/proxy-confs/exampleABC.subdomain.conf (echivalentă cu /etc/nginx/conf.d/exampleABC.subdomain.conf, cu exempluABC.subdomeniu fiind înlocuibil cu orice) cu următorul conținut:

Server {
    asculta 80;
    asculta [::]:80;

    nume_server .exampleABC.com;
    
    Locație / {
        proxy_pass http://192.168.0.10:80;
        proxy_set_header Gazdă $http_host;
    }
}

Server {
    asculta 443 ssl;
    asculta [::]:443 ssl;

    nume_server .exampleABC.com;
    
    Locație / {
        trece_proxy https://192.168.0.10:443;
        proxy_set_header Gazdă $http_host;
    }
}

Configurația nginx pe care am tastat-o ​​în postarea mea originală ar fi trebuit să funcționeze aproape identic cu aceasta, așa că bănuiesc că problema a fost fie lipsa asculta [::]:<port>; pentru compatibilitatea IPv6 sau un alt fișier de configurare în conflict cu cel pe care l-am creat.

Puncte:0
drapel bd

Sunt proprietarul casei în care se află serverul lor. Nu sunt expert în niciun fel; Pur și simplu urmez ghidurile destul de bine. Am un nume de domeniu DuckDNS și rulez containere Docker pentru Plex, Sonarr, SABnzbd etc. De asemenea, rulez un container SWAG pentru proxy-ul meu invers.

Unilock și-a adus propriul server. Are propriul nume de domeniu și folosește apache2 pentru toate configurațiile de server. Acest server, înainte de a fi în rețeaua mea, asculta pe aceleași porturi ca și al meu (80, 443 etc.).

Mi s-a spus că, dacă Unilock își poate rula serviciile pe porturi non-standard, este posibil să putem schimba setările routerului meu pfSense pentru a rula ambele servere. De asemenea, mi s-a spus că aș putea adăuga numele de domenii ale serverului lor la variabila EXTRA_DOMAINS a containerului meu SWAG. Am făcut asta și nu a ajutat.

De asemenea, am adăugat un bloc suplimentar de server în fișierul meu implicit SITE_CONF. Blocul suplimentar arată astfel:

#al doilea bloc de server
Server {
    asculta 443 ssl;
    asculta [::]:443 ssl;
    server_name <numele său de domeniu>; #schimbați acest lucru în subdomeniul dvs
    #include /config/nginx/ssl.conf;
    client_max_body_size 0;
    Locație / {
    #include /config/nginx/proxy.conf;
    resolver 127.0.0.11 valid=30s;
    #set $upstream_app 192.168.0.10;
    #set $upstream_port 443;
    #set $upstream_proto https;
    #proxy_pass $upstream_proto://$upstream_app:$upstream_port;
    trece_proxy https://192.168.0.10:443; 
    proxy_max_temp_file_size 2048m;
   }

Blocul meu principal de server este fișierul implicit. Dacă trebuie să postez întreaga configurație, o voi face; deși se pare că deblocarea a făcut-o deja pe Pastebin.După ce am introdus cele de mai sus, am putut accesa pagina principală a unilock, dar subdomeniile lor încă redirecționează către pagina de pornire implicită a serverului nginx.

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.