Я пытаюсь настроить свой сервер разработки nginx / PHP с помощью базовой конфигурации master / catch-all vhost, чтобы при необходимости я мог создавать неограниченное количество ___.framework.loc
доменов .
server {
listen 80;
index index.html index.htm index.php;
# Test 1
server_name ~^(.+)\.frameworks\.loc$;
set $file_path $1;
root /var/www/frameworks/$file_path/public;
include /etc/nginx/php.conf;
}
Тем не менее, nginx отвечает с ошибкой 404 для этой установки. Я знаю, что nginx и PHP работают и имеют разрешение, потому что используемый localhost
мной конфиг работает нормально.
server {
listen 80 default;
server_name localhost;
root /var/www/localhost;
index index.html index.htm index.php;
include /etc/nginx/php.conf;
}
Что я должен проверить, чтобы найти проблему? Вот копия того php.conf, который они оба загружают.
location / {
try_files $uri $uri/ /index.php$is_args$args;
}
location ~ \.php$ {
try_files $uri =404;
include fastcgi_params;
fastcgi_index index.php;
# Keep these parameters for compatibility with old PHP scripts using them.
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
# Some default config
fastcgi_connect_timeout 20;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_pass 127.0.0.1:9000;
}
php
nginx
virtualhost
Xeoncross
источник
источник
Конфигурация Nginx - это не программа, а декларация. Когда вы используете конфигурацию, как это:
Нет способа гарантировать, что ваша
set
директива будет выполнена раньшеroot
.Но есть трюк с
map
директивой, которую я люблю использовать. Он опирается на то, чтоmap
оценивается раньшеlocation
источник
$mypath
здесь? Это нигде не используется.$mypath
- это группа результатов для регулярных выражений~^(.?<mypath>+)\.frameworks\.loc$
и$rootpath
результат для всего трюка с картой.В дополнение к великому ответу DukeLion , мне нужно было изменить линию
~^(.?<mypath>+)\.frameworks\.loc$ $mypath;
в
~^(?P<mypath>.+)\.frameworks\.loc$ $mypath;
в моем
/etc/nginx/nginx.conf
файле, как предложено здесь .Добавление
root /var/www/frameworks/$rootpath
в
/etc/nginx/sites-available/default
работал отлично после этого.источник
Может быть, вы можете посмотреть в lighttpd также. Он имеет встроенную поддержку именно то, что вы просите здесь. Это вызов mod_evhost .
Включить evhost
Добавьте следующие строки в ваш lighttpd.conf. Если вы используете базовый дистрибутив Debian / Ubuntu, просто создайте мягкую ссылку или скопируйте из
/etc/lighttpd/conf-available/10-evhost.conf
в/etc/lighttpd/conf-enabled/
.%_
(Подстановочные) в evhost.path-Паттен средства использовать полное доменное имя (например, www.example.com). Запрос на www.example.com будет автоматически направлен на root-документ/home/www/www.example.com/
.Добавить дополнительный сайт так же просто, как создать другой каталог
/home/www
с полным доменным именем. Без изменений в конфигурационном файле Lighttpd.Существуют и другие шаблоны, которые можно использовать для построения структуры каталогов. Они как следовать
Подробная информация здесь .
PS: Включить PHP также легко, если вы работаете на платформе Debian / Ubuntu. Просто включите
10-fastcgi.conf
и15-fastcgi-php.conf
.источник
NGINX использует библиотеку регулярных выражений PCRE.
Начиная с NGINX v0.8.25
server_name
директива разрешает именованные захваты .Я использую следующий фрагмент кода для «ограждения» среды разработчиков. «Пользователь» относится к их имени пользователя и «проекту» проекта, над которым они работают:
Обратите внимание, что конфигурация nginx является декларативной, и поэтому статические объявления всегда могут быть быстрее по сравнению с вычисляемыми во время выполнения значениями и переменными. Оценка регулярных выражений является относительно дорогостоящей, я думаю, она должна использоваться с экономией в сильно загруженных (производственных) средах.
источник