Estoy tratando de configurar mi servidor nginx / PHP de desarrollo con una configuración vhost master / catch-all básica para que pueda crear ___.framework.loc
dominios ilimitados según sea necesario.
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;
}
Sin embargo, nginx responde con un error 404 para esta configuración. Sé que nginx y PHP están funcionando y tienen permiso porque la localhost
configuración que estoy usando funciona bien.
server {
listen 80 default;
server_name localhost;
root /var/www/localhost;
index index.html index.htm index.php;
include /etc/nginx/php.conf;
}
¿Qué debo verificar para encontrar el problema? Aquí hay una copia de ese php.conf que ambos están cargando.
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
fuente
fuente
La configuración de Nginx no es un programa, es una declaración. Cuando está utilizando la configuración de esta manera:
No hay forma de garantizar que su
set
directiva se ejecute antesroot
.Pero hay un truco con la
map
directiva que me gusta usar. Se basa en un hecho quemap
se evalúa anteslocation
fuente
$mypath
aquí? No se usa en ningún lado.$mypath
es el grupo de resultados para regex~^(.?<mypath>+)\.frameworks\.loc$
y$rootpath
es el resultado de todo el truco del mapa.Además de la gran respuesta de DukeLion , necesitaba cambiar de línea
~^(.?<mypath>+)\.frameworks\.loc$ $mypath;
a
~^(?P<mypath>.+)\.frameworks\.loc$ $mypath;
en mi
/etc/nginx/nginx.conf
archivo como se sugiere aquí .Agregando
root /var/www/frameworks/$rootpath
en
/etc/nginx/sites-available/default
bien trabajado después de eso.fuente
Quizás también puedas mirar lighttpd. Tiene soporte para exactamente lo que está preguntando aquí. Se llama mod_evhost .
Habilitar evhost
Agregue las siguientes líneas en su lighttpd.conf. Si está utilizando la distribución base de Debian / Ubuntu, simplemente enlace suave o copie de
/etc/lighttpd/conf-available/10-evhost.conf
a/etc/lighttpd/conf-enabled/
.El
%_
(comodín) en evhost.path-patten significa usar el nombre de dominio completo (por ejemplo, www.example.com). Una solicitud de www.example.com se dirigirá automáticamente a la raíz del documento/home/www/www.example.com/
.Agregar un sitio adicional es tan fácil como crear otro directorio
/home/www
con un nombre de dominio completo. No hay cambios en el archivo de configuración Lighttpd.Hay otros comodines y se pueden usar para construir la estructura de directorios. Son como sigue
La información detallada está aquí .
PD: Habilitar PHP también es fácil si estás en la plataforma debian / ubuntu. Solo habilita
10-fastcgi.conf
y15-fastcgi-php.conf
.fuente
NGINX usa la biblioteca de expresiones regulares PCRE.
A partir de la
server_name
directiva NGINX v0.8.25 permite capturas con nombre .Utilizo el siguiente fragmento para "cercar" los entornos de desarrolladores. «Usuario» se refiere a su nombre de usuario y «proyecto» al proyecto en el que trabajan:
Tenga en cuenta que la configuración de nginx es declarativa y, como tal, las declaraciones estáticas siempre pueden ser más rápidas en comparación con los valores y variables calculados en tiempo de ejecución. La evaluación de expresiones regulares es relativamente costosa, supongo que debe usarse con parsimonia en entornos de carga pesada (producción).
fuente