Заміські підписи на Nginx


25

Щойно я встановив Nginx на свій сервер і дуже задоволений результатами, проте досі не можу зрозуміти, як вставити віртуальну хостинг-скрипт.

Це структура [каталогу], яку я хотів би:

-- public_html (example.com)
---subdoamin 1 (x.example.com)
---subdomain 2 (y.example.com)

Як ви бачите, це досить базово, однак, я хотів би можливість додати домени, просто додавши запис для нового піддомену, який миттєво вкаже на однойменний підкаталог під public_html.

В Інтернеті є речі, однак я не натрапив на щось подібне.

Будь-яка допомога буде дуже вдячна.


Я не впевнений, що ви маєте на увазі під однойменним підкаталогом, коли ваш приклад має два різні імена: subdomain 1/ x.example.com- ви можете уточнити?
nickgrim

Правда, не дуже ясно вибачте. Скажімо, у мене є субдомен x.example.com, це каталог буде / public_html / x, однак мені потрібно як example.com, так і www.example.com, щоб вказати на / public_html /
rorygilchrist

Відповіді:


39

Я вам покажу.

Файл конфігурації

server {
  server_name example.com www.example.com;
  root www/pub;
}

server {
  server_name ~^(.*)\.example\.com$ ;
  root www/pub/$1;
}

Тестові файли

У нас є два тестові файли:

$ cat www/pub/index.html 
COMMON

$ cat www/pub/t/index.html 
T

Тестування

Статичні імена сервера:

$ curl -i -H 'Host: example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:42 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

$ curl -i -H 'Host: www.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:48 GMT
Content-Type: text/html
Content-Length: 7
Last-Modified: Wed, 23 Mar 2011 07:56:24 GMT
Connection: keep-alive
Accept-Ranges: bytes

COMMON

І назва сервера regexp:

$ curl -i -H 'Host: t.example.com' http://localhost/
HTTP/1.1 200 OK
Server: nginx/0.8.54
Date: Wed, 23 Mar 2011 08:00:54 GMT
Content-Type: text/html
Content-Length: 2
Last-Modified: Wed, 23 Mar 2011 07:56:40 GMT
Connection: keep-alive
Accept-Ranges: bytes

T

На жаль, не працює. Усі піддомени просто вказують на public_html. Ось друга конфігурація сервера:server{ listen 80; server_name ~^(.*)\.example\.com$ ; location / { root /var/www/public_html/$1; index index.html index.htm index.php; } location ~ \.php$ { root $1; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/public_html/$1$fastcgi_script_name; include fastcgi_params; } }
rorygilchrist

4
"не працює на жаль" не дає деталей, на жаль. Завжди дивіться у nginx error.log для деталей. Я оновив свою відповідь, щоб показати вам, як працює ця конфігурація. Ви можете побачити мою версію Nginx - 0.8.54
Олександр Азаров

Працював ідеально для мене просто зараз.
Клер Ферні

5

Цей файл конфігурації Nginx, наведений нижче, дозволяє використовувати імена хост-кодів, які динамічно спрямовуються до відповідної папки, /var/www/vhost/а також динамічно генерують відповідні файли журналу.

http://test1.wildcard.com/var/www/vhost/test1
                                                   /var/log/nginx/test1.wildcard.com-access.log                                                    /var/log/nginx/test1.wildcard.com-error.log

http://test2.wildcard.com/var/www/vhost/test2
                                                   /var/log/nginx/test2.wildcard.com-access.log                                                    /var/log/nginx/test2.wildcard.com-error.log

wildcard.conf

server {
  listen 80;
  listen [::]:80;

  #  Match everything except dot and store in $subdomain variable
  #  Matches test1.wildcard.com, test1-demo.wildcard.com
  #  Ignores sub2.test1.wildcard.com
  server_name ~^(?<subdomain>[^.]+).wildcard.com;

  root /var/www/vhost/$subdomain;

  access_log /var/log/nginx/$host-access.log;
  error_log  /var/log/nginx/$host-error.log;
}

Будь ласка, поясніть своє рішення.
Ендрю Шульман

Схоже, це практично ідентично існуючій відповіді. Що це додає?
Майкл Хемптон

1
Надає трохи більше специфіки. Сподіваюся, що це допомагає всім.
AnthumChris

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.