Запросы к поддоменам не маршрутизируются правильно в производственной среде. - PullRequest
0 голосов
/ 08 апреля 2020

Я настроил несколько маршрутов в приложении rails для обработки запросов к поддоменам. Я протестировал локальный с lvh.me и все работает как положено. Однако он не работает в рабочей среде.

Я правильно настроил DNS, и запросы к поддомену правильно обрабатываются, nginx имеет настройку приложения в качестве сервера по умолчанию и установлен сертификат с действительным субъектом альтернативное имя для субдомена.

субдомен принимает запрос GET с параметром после него почтового индекса, например SW1A2AA, а затем возвращает список адресов по этому почтовому индексу, однако в настоящее время он просто возвращает ошибку 404.

Если запрос на получение сделан непосредственно на субдомен address-service.api.example.com, я получаю обратно страницу для example.com

Nginx Файл конфигурации

server {

server_name example.com;

# Tell Nginx and Passenger where your app's 'public' directory is
root /home/ubuntu/apps/example/current/public;

try_files   $uri @passenger;

location @passenger {
  rails_env production;
  passenger_enabled on;
  passenger_ruby /home/ubuntu/.rvm/gems/ruby-2.6.3/wrappers/ruby;
}

#Enable HSTS
add_header Strict-Transport-Security "max-age=24192000;
includeSubDomains; preload" always;

listen 443 ssl default_server; # managed by Certbot
}

Передача конфигурации выше nginx -t

Образец из production.log

I, [2020-04-08T14:40:37.282374 #11955]  INFO -- :  Started GET "/SW1A2AA" for 81.158.12.105 at 2020-04-08 14:40:37 +0200
F, [2020-04-08T14:40:37.284179 #11955] FATAL -- :  ActionController::RoutingError (No route matches [GET] "/SW1A2AA"):
F, [2020-04-08T14:40:37.284258 #11955] FATAL -- :  actionpack (5.2.3) lib/action_dispatch/middleware/debug_exceptions.rb:65:in `call'

Образец из Development.log, где это работает

Started GET "/SW1A2AA" for 127.0.0.1 at 2020-04-08 13:41:49 +0100
Processing by Api::AddressServiceController#postcode_lookup as */*
  Parameters: {"subdomain"=>"address-service.api", "postcode"=>"SW1A2AA"}

Применимый раздел route.rb

  namespace :api, path: '/', constraints: { subdomain: 'api' } do
    constraints(subdomain: 'address-service.api') do
        get '/:postcode', to: 'address_service#postcode_lookup'
        get '/address/:udprn', to: 'address_service#address_from_udprn'
    end
  end
...