Nginx разные домены на одном IP

127

Я хотел бы разместить 2 разных домена на одном сервере с помощью nginx. Я перенаправил оба домена на этот хост через свойство @. Хотя я настраиваю 2 разных серверных блока, всякий раз, когда я пытаюсь получить доступ ко второму домену, он перенаправляется на первый.

Вот мой конфиг.

server {
    listen      www.domain1.com:80;
    access_log  /var/log/nginx/host.domain1.access.log  main;
    root /var/www/domain1;
    server_name www.domain1.com;

    location ~ \.php$ {
        # Security: must set cgi.fixpathinfo to 0 in php.ini!
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME         $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include /etc/nginx/fastcgi_params;
    }
}

server {
    listen       www.domain2.com:80;
    access_log  /var/log/nginx/host.domain2.access.log  main;
    root /var/www/domain2;
    server_name www.domain2.com;

    location ~ \.php$ {
        # Security: must set cgi.fixpathinfo to 0 in php.ini!
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME         $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include /etc/nginx/fastcgi_params;
    }
}

Как я могу это исправить? Спасибо.

berkayk
источник

Ответы:

163

Ваши директивы "слушать" неверны. См. Эту страницу: http://nginx.org/en/docs/http/server_names.html .

Они должны быть

server {
    listen      80;
    server_name www.domain1.com;
    root /var/www/domain1;
}

server {
    listen       80;
    server_name www.domain2.com;
    root /var/www/domain2;
}

Обратите внимание, я включил только соответствующие строки. Все остальное выглядело нормально, но я просто удалил это для ясности. Чтобы проверить это, вы можете попробовать сначала передать текстовый файл с каждого сервера, прежде чем фактически обслуживать php. Вот почему я оставил там директиву root.

aychedee
источник
9
Это исправило это для меня. Проблема, похоже, заключалась в том, что в обоих моих server {}блоках директивы sever_name были подстановочными знаками: .domain1.comи .domain2.com. При изменении их на server_name www.domain1.com domain1.com;и server_name www.domain2.com domain2.com;теперь отображается правильная страница для каждого сайта, когда используются эти адреса.
Steve HHH,
4
Я знаю, что это копает древний комментарий. Но я предполагаю, что эти два серверных блока могут быть в отдельных файлах конфигурации в sites-enabled /?
labarna
3
Безусловно, это просто зависит от того, как вы хотите структурировать свой конфиг. Я обычно использую один файл на реальный домен. Каждый из них может содержать несколько серверных блоков.
aychedee
5
Вы ДЕЙСТВИТЕЛЬНО не хотите этого делать. Выберите www.domain.com или domain.com и перенаправьте один на другой. Наличие одного и того же контента по двум разным адресам рассматривается как спам и может серьезно повредить вашему поисковому рейтингу.
aychedee 01
4
Вы также можете просто использовать .domain.com. Это специальный подстановочный знак nginx, который соответствует domain.comи *.domain.com. См .: nginx.org/en/docs/http/server_names.html
aychedee 01