Nginx різні домени на одному IP-адресі


127

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

Ось моя конфігурація.

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;
    }
}

Як я можу це виправити? Дякую.

Відповіді:


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. Тому я залишив там «кореневу» директиву.


9
Це зафіксувало це для мене. Проблема, мабуть, полягала в тому, що в обох моїх server {}блоках директиви sever_name були символами: .domain1.comі .domain2.com. Зміна їх server_name www.domain1.com domain1.com;і server_name www.domain2.com domain2.com;тепер має правильну сторінку для кожного сайту відображається , коли використовується ці адреси.
Стів HHH

4
Я знаю, що це дратування древніх коментарів. Але я припускаю, що ці два серверні блоки можуть знаходитись в окремих файлах конфігурацій із включеними сайтами /?
labarna

3
Абсолютно, це просто залежить від того, як ви хочете структурувати конфігурацію. Я схильний мати один файл у реальному домені. Кожен з яких може містити кілька блоків сервера.
aychedee

5
Ви дійсно не бажаєте цього робити. Виберіть www.domain.com або domain.com та переспрямуйте один на інший. Наявність однакового вмісту за двома різними адресами розглядається як спам і може сильно пошкодити ваш рейтинг пошуку.
айчедей

4
Ви також можете просто використовувати .domain.com. Це спеціальна підстановка nginx, яка відповідає domain.comі *.domain.com. Дивіться: nginx.org/uk/docs/http/server_names.html
aychedee
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.