Wie leite ich Subdomänen in Nginx auf CentOS zur Stammdomäne um?

Wie leite ich Subdomänen in Nginx auf CentOS zur Stammdomäne um?

Ich verwende Centos mit Nginx und Puma. Ich möchte alle Subdomains auf meine Hauptstammdomäne umleiten, also bin ich diesen Anweisungen gefolgt --https://stackoverflow.com/questions/26801479/nginx-redirect-all-subdomains-to-main-domain. Ich bekomme es jedoch nicht zum Laufen. Unten ist meine Konfiguration

upstream projecta {
  server unix:///home/rails/projecta_production/shared/sockets/puma.sock;
}

server {
  listen 80;
  server_name mydomein.com;
  return 301 http://mydomein.com$request_uri;
  root /home/rails/projecta_production/public; # I assume your app is located at this location

  location / {
    proxy_pass http://projecta; # match the name of upstream directive which is defined above
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location ~* ^/assets/ {
    # Per RFC2616 - 1 year maximum expiry
    expires 1y;
    add_header Cache-Control public;

    # Some browsers still send conditional-GET requests if there's a
    # Last-Modified header or an ETag header even if they haven't
    # reached the expiry date sent in the Expires header.
    add_header Last-Modified "";
    add_header ETag "";
    break;
  }
}

Wenn ich die "return 301http://mydomein.com$request_uri;"-Zeile, dann funktioniert meine Site auf der Stammdomäne, aber nicht auf einer der Subdomänen (das Anzeigen einer Subdomäne führt beispielsweise zur Standardindexseite von Nginx). Wie leite ich alle Subdomänen auf meine Hauptdomäne um und behalte meine Rails/Puma-Konfiguration bei?

Antwort1

Sie warten derzeit auf dem virtuellen Host der Apex-Domäne auf die Umleitung. Sie benötigen einen separaten virtuellen Listener, der zur Apex-Domäne umleitet. Dies ist ein Beispiel für einen Wildcard-Listener, der zur Definition der Apex-Domäne umleitet:

upstream projecta {
  server unix:///home/rails/projecta_production/shared/sockets/puma.sock;
}

# Listener for all subdomains
server {
  listen 80;
  server_name *.mydomein.com;
  # If you want to redirect all requests, not just subdomains, use below config instead.
  # server_name _;
  return 301 http://mydomein.com$request_uri;
}

# Listener for Apex Domain
server {
  listen 80;
  server_name mydomein.com;
  root /home/rails/projecta_production/public; # I assume your app is located at this location

  location / {
    proxy_pass http://projecta; # match the name of upstream directive which is defined above
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

  location ~* ^/assets/ {
    # Per RFC2616 - 1 year maximum expiry
    expires 1y;
    add_header Cache-Control public;

    # Some browsers still send conditional-GET requests if there's a
    # Last-Modified header or an ETag header even if they haven't
    # reached the expiry date sent in the Expires header.
    add_header Last-Modified "";
    add_header ETag "";
    break;
  }
}

verwandte Informationen