2013-12-24 5 views
1

Я настраиваю перенаправление для всего HTTP-трафика на моем поддомене для прохождения HTTPS, но я заметил, что когда я нахожусь http://mydomain.com, он перенаправляется на https://subdomain.mydomain.com. На https://mydomain.com проблем не возникает.nginx subdomain ssl перенаправление перенаправления домен верхнего уровня

Просто для уточнения,

http://mydomain.com не должен перенаправлять но currectly перенаправляет https://subdomain.mydomain.com

http://subdomain.mydomain.com должен перенаправлять https://subdomain.mydomain.com.

Это мой Nginx конф

server { 
    listen *:80; 
    server_name subdomain.mydomain.com; 
    server_tokens off; 
    root /nowhere; # this doesn't have to be a valid path since we are redirecting, you don't have to change it. 
    rewrite^https://$server_name$request_uri permanent; 
} 

server { 
    listen 443 ssl; 
    server_name subdomain.mydomain.com; 
    server_tokens off; 
    .... other stuff ... 
} 
+0

Где блок-сервер для 'mydomain.com'? – foibs

+0

Этого не существует, потому что мой домен должен идти туда, где я не буду определять, что я хочу там положить. – sunnyrjuneja

+0

Если он не существует, то используется первый серверный блок, который будет перенаправлен. Вы должны настроить серверный блок для 'mydomain.com', который печатает сообщение по умолчанию или что-то в этом роде. – foibs

ответ

1

Цитируя http://nginx.org/en/docs/http/request_processing.html

Nginx первым решает, какой сервер должен обработать запрос. Давайте начнем с простой конфигурацией, в которой все три виртуальные серверы слушать порт *: 80:

server { 
    listen  80; 
    server_name example.org www.example.org; 
    ... 
} 

server { 
    listen  80; 
    server_name example.net www.example.net; 
    ... 
} 

server { 
    listen  80; 
    server_name example.com www.example.com; 
    ... 
} 

В этой конфигурации испытаний Nginx только поле заголовка просьбе в «Host», чтобы определить, к какому серверу запрос должен быть перенаправлен. Если его значение не соответствует ни одному имени сервера, либо запрос не содержит это поле заголовка вообще, тогда nginx направит запрос на сервер по умолчанию для этого порта. В приведенной выше конфигурации сервер по умолчанию является первым - это стандартное поведение nginx по умолчанию .

Это означает, что в вашем примере, когда вы делаете запрос на http://mydomain.com единственного блок доступного сервера для обслуживания запроса является server_name subdomain.mydomain.com; блоком, поэтому он перенаправляет на HTTPS. Самое простое решение - создать новый серверный блок, который просто возвращает код состояния http и, возможно, сообщение. Например.

server { 
    listen 80; 
    server_name mydomain.com; 
    return 403 "nothing to see here"; 
} 

Вы также можете использовать default_server как это listen 80 default_server;, чтобы убедиться, что все «несконфигурированные» хосты придут в этом блоке

+0

Я установил временную страницу владельца места, и она отлично работала. благодаря! – sunnyrjuneja

Смежные вопросы