Я купил выделенный сервер в 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, чтобы это понять?
То, что вы хотите, называется виртуальным хостингом. И это работает намного лучше, чем вы описали!
Просто добавьте несколько 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;
}
}