J'essaie actuellement de séparer 3 applications d'un référentiel en 3, mais en conservant la structure d'URL, donc essentiellement des emplacements différents sous le même domaine doivent être fournis par différentes applications.
Ce avec quoi je me bats, c'est qu'une des applications doit être la solution de remplacement pour les URL inexistantes, donc si la première ne correspond pas, et la seconde non, alors la troisième devrait gérer la demande
La structure que j'ai est la suivante:
/ etc / nginx / sites-enabled / main_site, ici, à part nom_serveur et journaux que j'ai include /etc/nginx/subsites-enabled/*
, où j'ai 3 fichiers de configuration, un pour chacune des applications.
Chacun des 3 fichiers de configuration contient un bloc d'emplacement.
J'ai essayé l'anticipation négative dans regex (essentiellement en essayant de coder en dur les URL que les autres applications gèrent), mais j'ai échoué.
Donc, pour résumer:
/ et / communauté doit être fourni par /etc/nginx/subsites-enabled/example.org/home (quelques scripts Perl)
/ les nouvelles doivent être fournies par /etc/nginx/subsites-enabled/example.org/news (wordpress)
tout le reste doit être livré par /etc/nginx/subsites-enabled/example.org/app (cake app)
Le bit perl fonctionne bien. Le problème que j'ai, c'est que l'application prend le relais de l'actualité (probablement parce qu'elle correspond. *), J'ai essayé différentes options (j'y suis depuis 2 jours) mais aucune n'a résolu tous les problèmes (parfois les actifs statiques ne fonctionneraient pas, etc.).
Ma configuration est:
/etc/nginx/sites-enabled/example.org:
server {
listen 80;
server_name example.org;
error_log /var/log/nginx/example.org.log;
include /etc/nginx/subsites-enabled/example.org/*;
}
/etc/nginx/subsites-enabled/example.org/home:
location = / {
rewrite ^.*$ /index.pl last;
}
location ~* /community(.*) {
rewrite ^.*$ /index.pl last;
}
location ~ \.pl {
root /var/www/vhosts/home;
access_log /var/log/nginx/home/access.log;
error_log /var/log/nginx/home/error.log;
include /etc/nginx/fastcgi_params;
fastcgi_index index.pl;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/home$fastcgi_script_name;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
/ etc / ngins / subsites-enabled / news
location /news {
access_log /var/log/nginx/news/access.log;
error_log /var/log/nginx/news/error.log debug;
error_page 404 = /news/index.php;
root /var/www/vhosts/news;
index index.php;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ \.php {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/news$fastcgi_script_name;
}
}
/ etc / nginx / subsites-enabled / app:
location ~ .* {
access_log /var/log/nginx/app/access.log;
error_log /var/log/nginx/app/error.log;
rewrite_log on;
index index.php;
root /var/www/vhosts/app/app/webroot;
if (-f $request_filename) {
expires 30d;
break;
}
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ \.php {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/app/app/webroot$fastcgi_script_name;
}
}
location ^~ /news
. b) pour votre bloc d'application, vous devriez pouvoir le faire location /
(ce n'est pas la même chose location = /
, mais doit correspondre à tout ce qui ne l'est pas déjà. c) dans certains cas (en particulier les regex), l'ordre importe - vous pouvez combiner les 3 fichiers dans un seul fichier avec les blocs dans le bon ordre. Utilisez également try_files au lieu de !-e
. Voir enfin wiki.nginx.org/HttpCoreModule#location .
@
préfixe) qui correspond à votre application par défaut. Vous pouvez également configurer une page d'erreur qui mappe un 404 à un emplacement nommé.