У меня есть виртуальная машина 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;
}