Подстановочные знаки Vhosts на Nginx

25

Я только что установил Nginx на свой сервер и очень доволен результатами, однако до сих пор не могу понять, как вставить виртуальные хосты с подстановочными знаками.

Это структура [каталог], я хотел бы:

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

Однако, как вы можете видеть, это довольно просто, но я бы хотел добавить возможность добавления доменов, просто добавив запись A для нового субдомена, который сразу же укажет на подкаталог с тем же именем в public_html.

В Интернете есть что-то, но я не встречал ничего подобного.

Любая помощь будет принята с благодарностью.

rorygilchrist
источник
Я не уверен, что вы подразумеваете под "подкаталогом с тем же именем", когда ваш пример имеет два разных имени: subdomain 1/ x.example.com- вы можете уточнить?
Никгрим
Правда, не очень понятно, извините. Допустим, у меня есть поддомен 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

И регулярное выражение имя сервера:

$ 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; } }
конфиг
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;
}
AnthumChris
источник
Пожалуйста, объясните ваше решение.
Эндрю Шульман
Это выглядит практически идентично существующему ответу. Что это добавляет?
Майкл Хэмптон
1
Обеспечивает немного больше специфичности. Надеюсь, это поможет всем.
AnthumChris