Nginx nie przekierowuje niestandardowych żądań domeny do właściwego portu

1

Mam stronę internetową, która pozwala użytkownikom tworzyć portfele dla swoich stron internetowych, po prostu zmieniają swoje rekordy A w swojej domenie i umieszczają adres IP mojego serwera w swoich rekordach, a mapa zostanie odwzorowana na ich stronie internetowej (użytkownik1.przyklad.com). Mój problem polega na tym, że kupiłem domenę, aby to przetestować (przyklad.com) i przekierowuje ją na stronę główną mojej rzeczywistej witryny, na której można skorzystać z tej usługi.

Jedyny sposób, w jaki użytkownik może uzyskać dostęp do swojej witryny, to: http://example.com:3000- 3000 to port, na którym działa moja aplikacja Node.js. Moja konfiguracja Nginx jest poniżej, czy ktoś może rzucić mi kość?

server {
    listen 80;
    listen 443 ssl;
    listen [::]:443 ssl;

    ssl_certificate /etc/nginx/ssl/example.com/cert_chain.crt;
    ssl_certificate_key /etc/nginx/ssl/example.com/example.com.key;

    server_name example.com *.example.com "";
    access_log /var/log/nginx/nginx.vhost.access.log;
    error_log /var/log/nginx/nginx.vhost.error.log;

    root /opt/33i/;

    # Perfect forward secrecy
    ssl_prefer_server_ciphers on;
    ssl_dhparam /etc/nginx/ssl/example.com/dhparams.pem;
    ssl_ciphers ;

    # HSTS
    add_header Strict-Transport-Security "max-age=31536000; includeSubdomains";

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header X_FORWARDED_PROTO https;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_set_header X-Url-Scheme $scheme;
        proxy_redirect off;
        proxy_max_temp_file_size 0;
    }
}

Jakieś pomysły? Doprowadziło mnie to do szaleństwa!

Paul Sanders
źródło
Jeśli dotrze do twojego serwera i twojej aplikacji, brzmi to jak problem z poziomem aplikacji, a nie z routingiem / siecią / Nginx.
Tim
Cześć @Tim, do aplikacji dociera tylko przy użyciu przykładu: 3000 - wskazuję example.com na adres IP serwera, który działa na porcie 80, a następnie podaje go w przybliżeniu do 3000, ale przechodzi na główną stronę serwera, a nie domena, o którą prosiłem, wydaje mi się, że domena, o którą prosiłem, gubi się gdzieś w przepustce proxy.
sdfkjsdfsgfvsdgfsdg
Czy możesz spróbować $hostzamiast $http_host? Czy jesteś pewien, że konfiguracja node.js jest poprawna? Również twoje ssl_ciphers są puste.
Grumpy
Twoja aplikacja musi rozpoznać swoją domenę. Twoje user1.example.comimię nie odgrywa już w tym żadnej roli.
Richard Smith
@RichardSmith, jeśli jest dynamiczny, nie mogę utworzyć dla niego vhosta - więc nie wiem dokładnie, jak użytkownik ustawił swoją domenę, wszystko, co mamy, to to, co nam powiedzieli w naszej bazie danych. Więc jeśli użytkownik ustawi example.com w swoich ustawieniach i wskaże nam domenę CNAME, spodziewamy się, że to dopasujemy, ale host nie przechodzi, więc nie mogę dopasować go z mojej strony.
Paul Sanders

Odpowiedzi:

1

Myślę, że problem może być na server_namelinii.

Ponieważ jest obecnie implementowany, pasuje do następujących rodzajów żądań:

  • Host: nagłówek jest example.com
  • Host: nagłówek kończący się na .example.com
  • Host: brak nagłówka

Oznacza to, że ta konfiguracja nie pasuje do dowolnych domen, co wygląda tak, jak chcesz.

Teraz najprawdopodobniej masz inny serverblok w konfiguracji z:

Listen 443 ssl default_server;

Host wirtualny zawierający tę dyrektywę jest hostem wirtualnym typu catch-all dla żądań, które w inny sposób nie są dopasowane.

Aby więc rozwiązać problem, musisz usunąć default_serverdyrektywę z serverbloku, w którym jest teraz, i dodać default_serverdo listendyrektyw tego bloku .

Tero Kilkanen
źródło
Cześć Tero, dziękuję za odpowiedź, jesteś moją jedyną nadzieją w tym momencie! Mam tylko jeden blok serwera, więc nie jestem w 100% pewien twojego ostatniego punktu, jeśli nie będzie to zbyt wielkim problemem, czy byłbyś w stanie złożyć blok serwera razem lub zmodyfikować mój obecny blok? Byłbym bardzo wdzięczny!
Paul Sanders
Większość instalacji nginx ma gdzieś w swoich plikach konfiguracyjnych domyślny blok serwera. Możesz się tego dowiedzieć, dodając default_serverdo swojej listendyrektywy i uruchamiając nginx -t. Jeśli nginx nie narzeka, to nie ma domyślnego bloku serwera. Jednak oryginalna konfiguracja nie powinna się tak zachowywać.
Tero Kilkanen,
Uruchomiłem to polecenie, sprawdziłem pliki i upewniłem się, że nie mam domyślnego bloku serwera, to jedyna konfiguracja Nginx, którą mam.
Paul Sanders
Więc dodałeś już default_serverdyrektywę?
Tero Kilkanen,