Заставить сервер управлять несколькими сайтами
Я купил выделенный сервер от 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/
содержит второй домен. В следствии,
- когда я вхожу
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, чтобы понять это?
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
}
То, что вы хотите, называется виртуальным хостингом. И это работает намного лучше, чем вы описали!
Просто добавьте несколько server
блоки с разными server_name
а также root
каталоги. Один server
блок на доменное имя. Обратите внимание, что только один из них может быть помечен как default_server
но кроме этого все блоки могут выглядеть одинаково.
Лучший способ сделать это - создать по одному файлу для каждого сайта, а затем создать ссылку на каждый файл в /etc/nginx/sites-enabled/
, После этого перезапустите nginx с помощью service nginx restart
С Nginx вы должны создать столько файлов конфигурации сайта, сколько потребуется, и просто изменить имя_сервера и корневые предложения, чтобы сопоставить внешние домены с их содержимым и кодом.
Ответ Бена тоже хорош, вот альтернатива просто для разнообразия: создайте сервер и добавьте в него несколько блоков местоположения, указывающих на местоположение вашего сайта.
сервер {
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;
}
}