Wildcard поддомен в Nginx возвращает No input file specified. Что не так?

Есть домен, на котором для показа результатов клиенту хотел бы сделать динамические поддомены, которые вели бы на папки в директории subdomains в корне. Пишу такой конфиг:

server {
        listen 80;
        server_name ~^(.*)\.example\.com$;

        root /var/www/html/example.com/public_html/subdomains/$1;

        index   index.php index.html index.htm;

        # Security
        include common/security;

        # Gzip
        include common/gzip;

        location ~ \.php$ {
                root /var/www/html/example.com/public_html/subdomains/$1;
                include common/php-fpm;
        }
}


При обращении к поддомену выдает No input file specified.. Владелец www-data:www-data. В чем может быть дело?

UPD Выложу полный конфиг, возможно проблема в какой то части.

include common/upstream;

server
{
	listen 80;
	root	/var/www/html/example.com/public_html;
	index	index.php index.html index.htm;
	server_name	example.com;
	
	error_log "/var/www/html/example.com/logs/error.log";
	access_log "/var/www/html/example.com/logs/access.log";
	
	# увеличение максимального объема файла для загрузки до 200МБ
	client_max_body_size		5m;
	
	# Buffers
	fastcgi_buffers 64 4K;
	
	# Security
	include common/security;
	
	# Gzip
	include common/gzip;
	
	# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
	location ~ \.php$ {
		include common/php-fpm;
	}

	# Кеширование
	include common/cache;

	# Запрещенные файлы
	include common/deny;
}

# 301 redirect from www
server {
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

# subdomain for static content
server {
	listen 80;
	server_name st.example.com;
	root /var/www/html/example.com/public_html;

	# Запрещенные файлы
	include common/deny;
	
	# Кеширование
	include common/cache;

	fastcgi_hide_header Set-Cookie;
}

# dynamic subdomains
server {
        listen 80;
        server_name ~^(.*)\.example\.com$;

        root /var/www/html/example.com/public_html/subdomains/$1;

        index   index.php index.html index.htm;

        # Security
        include common/security;

        # Gzip
        include common/gzip;

        location ~ \.php$ {
                root /var/www/html/example.com/public_html/subdomains/$1;
                include common/php-fpm;
        }
}
  • Вопрос задан
  • 226 просмотров
Пригласить эксперта
Ответы на вопрос 3
@Wexter
location / {
try_files $uri $uri/ =404;
}
Ответ написан
@noroots Автор вопроса
Увы, так и не получается решить
Ответ написан
Комментировать
@miksir
IT
Вы используете нумерованные выделения, но они сбрасываются после каждого регекспа. Т.е. в `location ~ \.php$` уже нет того $1, что вы ожидаете.
Для выхода из положения присвойте $1 какой-то переменной `set $servername $1`, а самое лучшее - использовать именованные выделения
`server_name ~^(?<servername>.+)\.example\.com$;`
и далее использовать $servername в любом месте конфига сервера.

Стоит прочитать nginx.org/ru/docs/http/ngx_http_core_module.html#s... и nginx.org/ru/docs/http/server_names.html
Там расписано в том числе порядок обработки имен серверов.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы