J'essaie de configurer mon serveur de développement nginx / PHP avec une configuration de base vhost maître / catch-all afin que je puisse créer des ___.framework.loc
domaines illimités selon les besoins.
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;
}
Cependant, nginx répond avec une erreur 404 pour cette configuration. Je sais que nginx et PHP fonctionnent et ont la permission parce que la localhost
configuration que j'utilise fonctionne très bien.
server {
listen 80 default;
server_name localhost;
root /var/www/localhost;
index index.html index.htm index.php;
include /etc/nginx/php.conf;
}
Que dois-je vérifier pour trouver le problème? Voici une copie de ce php.conf qu'ils chargent tous les deux.
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
la source
la source
La configuration de Nginx n'est pas un programme, c'est une déclaration. Lorsque vous utilisez une configuration comme celle-ci:
Il n'y a aucun moyen de s'assurer que votre
set
directive s'exécutera avantroot
.Mais il y a un truc avec la
map
directive que j'aime utiliser. Elle repose sur un faitmap
évalué avantlocation
la source
$mypath
ici? Il n'est utilisé nulle part.$mypath
est le groupe de résultats pour l'expression régulière~^(.?<mypath>+)\.frameworks\.loc$
et$rootpath
le résultat de l'astuce de la carte entière.En plus de la grande réponse de DukeLion , je devais changer de ligne
~^(.?<mypath>+)\.frameworks\.loc$ $mypath;
à
~^(?P<mypath>.+)\.frameworks\.loc$ $mypath;
dans mon
/etc/nginx/nginx.conf
dossier comme suggéré ici .Ajouter
root /var/www/frameworks/$rootpath
en
/etc/nginx/sites-available/default
a bien fonctionné après cela.la source
Peut-être que vous pouvez également regarder lighttpd. Il prend en charge exactement ce que vous demandez ici. Il s'agit de mod_evhost .
Activer evhost
Ajoutez les lignes suivantes dans votre lighttpd.conf. Si vous utilisez la distribution de base Debian / Ubuntu, il suffit de créer un lien logiciel ou de copier depuis
/etc/lighttpd/conf-available/10-evhost.conf
vers/etc/lighttpd/conf-enabled/
.Le
%_
(caractère générique) dans evhost.path-patten signifie utiliser le nom de domaine complet (par exemple, www.example.com). Une demande pour www.example.com sera automatiquement dirigée vers la racine du document/home/www/www.example.com/
.Ajouter un site supplémentaire est aussi simple que de créer un autre répertoire sous
/home/www
avec un nom de domaine complet. Aucune modification du fichier de configuration Lighttpd.Il existe d'autres caractères génériques et peuvent être utilisés pour créer une structure de répertoires. Ils sont comme suit
Les informations détaillées sont ici .
PS: L' activation de PHP est également facile si vous êtes sur la plate-forme Debian / Ubuntu. Activez simplement
10-fastcgi.conf
et15-fastcgi-php.conf
.la source
NGINX utilise la bibliothèque d'expressions régulières PCRE.
Depuis la
server_name
directive NGINX v0.8.25, permet des captures nommées .J'utilise l'extrait de code suivant pour "clôturer" les environnements des développeurs. «Utilisateur» désigne son nom d'utilisateur et «proj» le projet sur lequel il travaille:
Notez que la configuration de nginx est déclarative, et en tant que telle, les déclarations statiques peuvent toujours être plus rapides par rapport aux valeurs et variables calculées au moment de l'exécution. L'évaluation des expressions régulières est relativement coûteuse, je suppose qu'elle doit être utilisée avec parcimonie dans des environnements (de production) fortement chargés.
la source