Назад | Перейти на главную страницу

URL-адрес неправильно перенаправляется на другой сайт, размещенный на том же сервере (nginx)

У меня есть виртуальная машина Ubuntu с nginx, которую я частично настроил для SSL.

Я определил несколько пользовательских локальных доменов, которые я использую для разработки, которые хранятся в моем файле hosts (на хост-машине, то есть OSX):

192.168.50.50   foo.dev
192.168.50.50   www.foo.dev

192.168.50.50   bar.dev
192.168.50.50   www.bar.dev

У каждого есть свой собственный файл конфигурации, оба действуют для перенаправления всего трафика в домен SSL без www.

Конфигурация nginx для foo.dev выглядит так:

server {
  listen 80;
  listen 443 ssl;

  server_name www.foo.dev;

  ssl_certificate /etc/ssl/foo.crt;
  ssl_certificate_key /etc/ssl/foo.key;

  return 301 https://foo.dev$request_uri;
}
server {
  listen 80;

  server_name foo.dev;

  return 301 https://foo.dev$request_uri;
}
server {
  listen 443 ssl;

  server_name foo.dev;

  root /var/www/foo;

  ssl_certificate /etc/ssl/foo.crt;
  ssl_certificate_key /etc/ssl/foo.key;
}

А вот конфиг nginx bar.dev:

upstream bar_upstream {
  server 127.0.0.1:4000;
}
server {
  listen 80;
  listen 443 ssl;

  server_name www.bar.dev;

  ssl_certificate /etc/ssl/bar.crt;
  ssl_certificate_key /etc/ssl/bar.key;

  return 301 https://bar.dev$request_uri;
}
server {
  listen 80;

  server_name bar.dev;

  return 301 https://bar.dev$request_uri;
}
server {
  listen 80;
  server_name bar.dev;
  root /var/www/bar/priv/static/;
  location / {
    proxy_pass http://bar_upstream;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
  }
  include /etc/nginx/h5bp/location/expires.conf;
  include /etc/nginx/h5bp/location/cross-domain-fonts.conf;
  include /etc/nginx/h5bp/location/protect-system-files.conf;
}

Проблема в том, что посещение bar.dev в моем браузере вызывает перенаправление на foo.dev. Это происходит во всех браузерах, я пробовал очистить кеш, перезапустить nginx и выполнил конфигурацию.

Я прочесал оба файла на предмет опечаток и неправильных ссылок.

Я новичок в nginx, так что простите, если что-то очевидное?

Я не уверен, стоит ли оставить это в живых для других, но в конечном итоге это явная ошибка, bar.dev не было своего listen 443 ssl;, у него было два listen 80;с.

Итак, рабочий конфиг bar.dev:

upstream bar_upstream {
  server 127.0.0.1:4000;
}
server {
  listen 80;
  listen 443 ssl;

  server_name www.bar.dev;

  ssl_certificate /etc/ssl/bar.crt;
  ssl_certificate_key /etc/ssl/bar.key;

  return 301 https://bar.dev$request_uri;
}
server {
  listen 80;

  server_name bar.dev;

  return 301 https://bar.dev$request_uri;
}
server {
  listen 443 ssl;
  server_name bar.dev;
  root /var/www/bar/priv/static/;
  location / {
    proxy_pass https://bar_upstream;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_set_header Host $host;
  }
  include /etc/nginx/h5bp/location/expires.conf;
  include /etc/nginx/h5bp/location/cross-domain-fonts.conf;
  include /etc/nginx/h5bp/location/protect-system-files.conf;
}