2015-10-20 4 views
1

У меня есть три разных прокси-пароля в моей конфигурации nginx. Два из них перенаправляются на хост https и последний через стандартный порт 80.Nginx proxy_pass перенаправление на неправильный домен

Два первых (example.com и proxmox.example.com) работают исправно.

Но проблема в том, что касается третьего. http://blog.example.com перенаправляет на https://example.com, и я не могу понять, почему.

Если у кого-то есть идея ... Я новичок в nginx, и у меня все еще возникают трудности с пониманием proxy_pass с SSL или без него.

Вот моя конфигурация.

server { 
    listen 80 default_server; 
    server_name _; 
    return 444; 
} 

server { 
    listen 80; 
    server_name example.com proxmox.example.com; 
    rewrite ^(.*) https://$host$1 permanent; 
} 

server { 
    listen 443; 
    server_name example.com; 
    ssl on; 
    ssl_certificate /etc/nginx/ssl/server.crt; 
    ssl_certificate_key /etc/nginx/ssl/server.key; 
    proxy_redirect off; 
    location/{ 
     proxy_pass https://localhost:8000; 

     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP   $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 
    } 
} 
server { 
    listen 443; 
    server_name proxmox.example.com; 
    ssl on; 
    ssl_certificate /etc/nginx/ssl/server.crt; 
    ssl_certificate_key /etc/nginx/ssl/server.key; 
    proxy_redirect off; 
    location/{ 
     proxy_pass https://localhost:8006; 

     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP   $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 

     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
    } 
} 

server { 
    listen 80; 
    server_name blog.example.com; 
    proxy_redirect off; 
    location/{ 
     proxy_pass http://10.0.0.3:80; 

     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP   $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 
    } 
} 

Благодаря

EDIT

Я прочитал это на Nginx док. Возможно, это причина проблемы.

С этой конфигурацией браузер получает сертификат сервера по умолчанию, то есть www.example.com, независимо от имени запрашиваемого сервера. Это вызвано поведением протокола SSL. SSL-соединение устанавливается до того, как браузер отправит HTTP-запрос, а nginx не знает имя запрашиваемого сервера. Поэтому он может предлагать только сертификат сервера по умолчанию.

Link: see in Name-based HTTPS servers

+0

только предположение: правильно ли введенна запись DNS-A для «blog.example.com»? Возможно, это указывает на неправильную цель IP .. – semm0

+0

Возможно, это то, что '10.0.0.3: 80' делает. –

+0

Фактически, я нахожусь на узле, где установлен proxmox. Поэтому 'localhost' является основным хостом, а' 10.0.0. * 'Являются контейнерами proxmox ... Итак, 10.0.0.3 является одним из моих контейнеров proxmox. Для DNS это должно быть хорошо, потому что в моих контейнерах используется информация об DNS-хосте. –

ответ

0

Наконец, потому, что мой сертификат был только example.com и не *.example.com. Таким образом, это был не совпадение поддомена, и я был перенаправлен на первую доступную конфигурацию SSL (которая была example.com). Поэтому я добавил subjectAltName в свой сертификат, чтобы разрешить *.example.com.

Затем я также изменил определение своей декларации сертификата непосредственно в разделе конфигурации Nginx в разделе html для целей кэширования. Вот моя окончательная конфигурация:

# Certificates 
ssl_certificate /etc/nginx/ssl/server.crt; 
ssl_certificate_key /etc/nginx/ssl/server.key; 

# Return 404 if no server name matches 
server { 
    listen 80 default_server; 
    server_name _; 
    return 444; 
} 

# Redirect chosen domain to https 
server { 
    listen 80; 
    server_name example.com proxmox.example.com; 
    rewrite ^(.*) https://$host$1 permanent; 
} 

# Main configuration 
server { 
    listen 443; 
    server_name example.com; 
    ssl on; 
    proxy_redirect off; 
    location/{ 
     proxy_pass https://localhost:8000; 

     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP   $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 
    } 
} 

# Proxmox configuration 
server { 
    listen 443; 
    server_name proxmox.example.com; 
    ssl on; 
    proxy_redirect off; 
    location/{ 
     proxy_pass https://localhost:8006; 

     proxy_set_header Host    $host; 
     proxy_set_header X-Real-IP   $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header X-Forwarded-Proto $scheme; 

     proxy_http_version 1.1; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
    } 
}