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

Я купил выделенный сервер у DigitalOcean и настроил nginx, mysql и php, его IP-адрес a.b.c.d. Я купил два домена у GoDaddy: siteone.com и sitetwo.com. Я сделал субдомен sub.siteone.com, это будет a 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/ содержит второй домен. В результате

  • когда я вхожу sub.siteone.com в браузере URL остается тем же, в то время как содержание от a.b.c.d/one/;
  • когда я вхожу, например. sub.siteone.com/photos/ в браузере URL остается тем же, в то время как содержание от a.b.c.d/one/photos;
  • когда я вхожу sitetwo.com в браузере URL остается тем же, в то время как содержание от a.b.c.d/two/;
  • когда я вхожу, например. sitetwo.com/downloads/ в браузере URL остается тем же, в то время как содержание от a.b.c.d/two/downloads

Кто-либо мог сказать мне, если этот механизм имеет смысл? И как я мог изменить установку nginx и GoDaddy для понимания этого?

2
задан 18 August 2015 в 01:52
4 ответа

Вы можете легко добиться этого, используя серверные блоки в 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
}
5
ответ дан 3 December 2019 в 08:36

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

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

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

6
ответ дан 3 December 2019 в 08:36

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

1
ответ дан 3 December 2019 в 08:36

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

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

}

0
ответ дан 3 December 2019 в 08:36

Теги

Похожие вопросы