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