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

Сделать сервер для управления несколькими сайтами

Я купил выделенный сервер в DigitalOcean и настроил nginx, mysql и php, его IP-адрес a.b.c.d. Я купил два домена у GoDaddy: siteone.com и sitetwo.com. Я сделал субдомен sub.siteone.com, Это будет WordPress сайт. я сделал sub.siteone.com жду a.b.c.d в GoDaddy.

Следуя эта почта и эта почта, Я поместил файлы WordPress в /var/www/sub.siteone.com/html/. /etc/nginx/sites-available/sub.siteone.com содержит следующее:

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

    root /var/www/sub.siteone.com/html;
    index index.php index.html index.htm;

    server_name sub.siteone.com;

    location / {
            try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    error_page 404 /404.html;

    error_page 500 502 503 504 /50x.html;
    location = /50x.html {
            root /usr/share/nginx/html;
    }

    location ~ \.php$ {
            try_files $uri =404;
            fastcgi_split_path_info ^(.+\.php)(/.+)$;
            fastcgi_pass unix:/var/run/php5-fpm.sock;
            fastcgi_index index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include fastcgi_params;
    }
}

В результате, когда я вхожу sub.siteone.com в браузере перенаправляет на a.b.c.d и хорошо показывает сайт WordPress.

Проблема в том, что я хочу свой сервер (a.b.c.d) содержать несколько сайтов (то есть доменов). Итак, механизм, который я представляю, будет a.b.c.d/one/ содержит первый домен, а a.b.c.d/two/ содержит второй домен. В следствии,

Может ли кто-нибудь сказать мне, имеет ли смысл этот механизм? И как я мог изменить настройки nginx и GoDaddy, чтобы это понять?

То, что вы хотите, называется виртуальным хостингом. И это работает намного лучше, чем вы описали!

Просто добавьте несколько server блоки с разными server_name и root каталоги. Один server блок на доменное имя. Обратите внимание, что только один из них может быть отмечен как default_server но в остальном все блоки могут выглядеть одинаково.

Лучший способ сделать это - создать по одному файлу для каждого сайта, а затем создать символьную ссылку на каждый файл в /etc/nginx/sites-enabled/. После этого перезапустите nginx с помощью service nginx restart

Вы можете легко добиться этого, используя серверные блоки в Nginx для создания нескольких «виртуальных хостов», каждый с другой конфигурацией HTTP. Это работает, когда Nginx обрабатывает ваш запрос по-разному, в зависимости от того, какой URL-адрес вы использовали для доступа к серверу.

Проще говоря, чтобы перейти на siteone.com, вам нужно создать server блок с server_name значение siteone.com. Каждый серверный блок может быть в собственном файле или в одном файле, это не имеет особого значения.

siteone.com:

server {
    listen 80;
    server_name sub.siteone.com;
    root /var/www/sub.siteone.com/html;
    # ADD ADDITIONAL SITEONE CONFIGURATION HERE
}

sub.siteone.com:

server {
    listen 80;
    server_name sub.siteone.com;
    root /var/www/sub.siteone.com/html;
    # ADD ADDITIONAL SUB.SITEONE CONFIGURATION HERE
}

sitetwo.com

server {
    listen 80;
    server_name sitetwo.com;
    root /var/www/sitetwo.com/html;
    # ADD ADDITIONAL SITETWO CONFIGURATION HERE
}

Это должно обеспечить нужное вам поведение. Также стоит отметить, что вы можете сделать гораздо больше, чем использовать разные корневые каталоги для каждого сервера, также полезно иметь разные файлы журнала для каждого виртуального хоста, запросы пересылки и многие другие функции.

Вот грубый пример наличия определенных файлов журналов для сайта sitetwo.com

server {
    listen      80;
    server_name sitetwo.com;
    root        /var/www/sitetwo.com/html;
    error_log   /var/www/sitetwo.com/logs/error.log;
    access_log  /var/www/sitetwo.com/logs/access.log;
    # ADD ADDITIONAL SITETWO CONFIGURATION HERE
}

Используя Nginx, вы должны создать столько файлов конфигурации сайта, сколько требуется, и просто изменить предложения server_name и root, чтобы сопоставить внешние домены с их содержимым и кодом.

Ответ Бена тоже хорош, вот альтернатива просто для разнообразия: создайте сервер и внутри него добавьте несколько блоков местоположения, указывающих на местоположение вашего сайта.

server {

   listen  443 ssl;
   server_name dev.domainofmysite.com;

   server_tokens off;


   location /param {
     proxy_pass http://127.0.0.1:8888;
   }
   location /tparam {

     proxy_pass http://127.0.0.1:7172;
   }
   location /dparam {
     proxy_pass http://127.0.0.1:7172;
   }

}