Как перенаправить поддомены в корневой домен в Nginx на CentOS?

Я использую Centos с Nginx и Пума. Я хотел бы перенаправить все поддомены в свой основной корневой домен, поэтому я следовал инструкциям здесь - https://stackoverflow.com/questions/26801479/nginx-redirect-all-subdomains-to-main-domain . Однако я не могу заставить его работать. Ниже представлена ​​моя конфигурация

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;
  }
}

Если я исключу «return 301 http://mydomein.com $ request_uri;» line, то мой сайт будет работать в корневом домене, но не в любом из поддоменов (например, при просмотре поддомена будет открыта страница индекса Nginx по умолчанию). Как мне перенаправить все поддомены в мой основной домен и сохранить мою конфигурацию Rails / Puma?

1
задан 28 February 2018 в 19:56
1 ответ

В настоящее время вы слушаете vhost домена вершины для перенаправления. Что вам нужно сделать, так это иметь отдельный прослушиватель vhost, который перенаправляет на вершину. Это пример перенаправления прослушивателя подстановочных знаков на определение домена вершины:

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;
  }
}
1
ответ дан 3 December 2019 в 23:19

Теги

Похожие вопросы