Я настроил несколько маршрутов в приложении 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