Nginx: перенаправить IP-адрес на доменное имя

12

Со следующим конфигом Nginx:

server {
    listen 80;
    listen [::]:80 default_server ipv6only=on;

    server_name isitmaintained.com;

    ...
}

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230;

    add_header X-Frame-Options "SAMEORIGIN";

    return 301 $scheme://isitmaintained.com$request_uri;
}

Я пытаюсь перенаправить http://178.62.136.230/на http://isitmaintained.com/, но при развертывании этой конфигурации я получаю одну Redirect loopили обе эти ссылки.

Что я делаю неправильно?

Матье Наполи
источник

Ответы:

30

Попробуйте это на втором блоке:

server {
    listen 80;
    server_name 178.62.136.230;

    return 301 $scheme://isitmaintained.com$request_uri;
}

Проблема в том, что listenдиректива второго блока сервера более специфична, чем первая блок сервера, поэтому она всегда используется. И поскольку второй блок является единственным виртуальным хостом для этой listenспецификации, он всегда используется.

Теро Килканен
источник
Это имеет смысл. Но когда я применяю это, я получаю следующую ошибку: nginx: [emerg] could not build the server_names_hash, you should increase server_names_hash_bucket_size: 32:( И это не имеет смысла, потому что мое доменное имя не такое длинное.
Матье Наполи
По какой-то причине для вашей настройки требуется больше места для хранения имен серверов виртуальных хостов в nginx, поэтому вам просто нужно увеличить настройку.
Теро Килканен
Мои извинения за то, что не пытались напрямую, я был уверен, что что-то не так. Но вы были правы, перенаправление работает сейчас! Очень теплое спасибо :)
Матье Наполи
Вы правый мужик, решил мою проблему, проголосовал,
спасибо
3

Вы были близки Его переписать, что вы ищете.

server {
    listen 178.62.136.230:80;
    server_name 178.62.136.230 isitmaintained.com;

    rewrite  ^/(.*)$  http://www.isitmaintained.com/$1 permanent;
}
server {
    listen 80;
    server_name www.isitmaintained.com;
    # Serve Stuff Here.
}
ticoombs
источник
5
Это rewriteи returnвыше делают одно и то же.
Теро Килканен