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

Как перенаправить корневой домен на www с помощью Openshift v2 и nginx?

Я не могу перенаправить свой example.com просьба к www.example.com и теперь это разные веб-сайты, указывающие на одно и то же приложение.

Задний план:

Я установил php 7 с nginx на Openshift ver. 2 с использованием этот. Я добавил 2 псевдонима для развернутого приложения, а именно:

  1. URL приложения: myapp.rhcloud.com; Имя домена: www.example.com
  2. URL приложения: myapp.rhcloud.com; Доменное имя: example.com

Я также добавил в CNAME следующие детали DNS:

  1. Имя: www.example.com; Значение: myapp.rhcloud.com
  2. Название: @; Значение: www.example.com

Мой файл конфигурации nginx (erb) выглядит следующим образом:

server {
    root              <%= ENV['OPENSHIFT_REPO_DIR'] %>/www;
    listen            <%= ENV['OPENSHIFT_PHP_IP'] %>:<%= ENV['OPENSHIFT_PHP_PORT'] %>;
    server_name       <%= ENV['OPENSHIFT_APP_DNS'] %>;
    index             index.php index.html index.htm <%= ENV['NGINX_EXTRA_INDEX'] %>;
    set_real_ip_from  <%= ENV['OPENSHIFT_PHP_IP'] %>;
    real_ip_header    X-Forwarded-For;

который становится:

server {
    root              /path/to/my/app-root/folder/;
    listen            127.11.2.1:8080;
    server_name       myapp.rhcloud.com;
    index             index.php index.html index.htm ;
    set_real_ip_from  127.11.2.1;
    real_ip_header    X-Forwarded-For;

Я попытался добавить еще один блок сервера в свой конфигурационный файл nginx, например:

server {
    server_name example.com;
    return 301 https://www.example.com$request_uri;
}

Однако я не уверен, что мне использовать вместо example.com.

Что касается DNS, как указано в другом ответе, вы не можете сделать @ CNAME www, т.е. не может указывать из корня на субдомен. Однако, делая наоборот, www CNAME @, т. е. указание от поддомена обратно к корню, должно быть полностью приемлемым и не обязательно должно быть симметричным тому, как представлена ​​веб-сторона домена (например, с точки зрения веб-сайта вы все равно можете указать из root в поддомен, даже если вы делаете прямо противоположное на стороне DNS).

Что касается веб-сайта, казалось бы, имеет смысл иметь оба server определения в том же файле, где вы просто вручную префикс www. прямо перед <%= ENV['OPENSHIFT_APP_DNS'] %> для одного из серверов, например, server_name www.<%= ENV['OPENSHIFT_APP_DNS'] %>;.

В качестве альтернативы, хотя это не будет наиболее эффективным решением, вы также можете выполнить условное перенаправление с помощью if заявление в одном server контекст (например, один с server_name .example.com;):

if ($host != "www.example.com") {
    rewrite ^   http://www.example.com$request_uri? redirect;
}

В качестве альтернативы, если вы предпочитаете красивый, но менее эффективный код, вы также можете использовать регулярные выражения:

if ($host !~ "^www\.") {
    rewrite ^   http://www.$host$request_uri?   redirect;
}

Я не использую Openshift, но мне кажется, что что-то не так в ваших настройках DNS, где вы создали CNAME для своего корневого домена:

Название: @; Значение: www.example.com

Согласно спецификациям DNS вы не можете создать запись CNAME для своего корневого домена. Даже если ваш DNS-сервер позволяет вам это делать, это не сработает.

Проверять, выписываться этот вопрос чтобы понять, почему это запрещено.