Cela a été demandé le SO avant mais les réponses n'ont pas été généralisées. Alors voilà.
J'ai deux applications Web différentes. Ils ont été faits pour être sur différents serveurs à la racine. Mais maintenant, ils vont être placés dans des sous-répertoires sur le même serveur. Le script ci-dessous envoie le sous-répertoire avec les URI aux scripts. C'est un problème.
anciennes URL:
nouvelles URL:
Le site du magasin voit /store/items/1
quand il veut juste voir /items/1
. Il en va de même pour le site backoffice.
Ma tentative:
location /store {
try_files @store_site;
}
location /backoffice {
try_files @backoffice_site;
}
location @store_site {
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
proxy_set_header Host $Host;
}
location @backoffice_site {
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock;
proxy_set_header Host $Host;
}
Encore une fois, le site du magasin obtient des URL avec le /store
le préfixe et le backoffice obtiennent /backoffice
. Ces sites ont été codés pour ne pas attendre ces préfixes. Je dois supprimer le /store
et /backoffice
préfixe avant l'envoi vers le site réel.
Est-ce une règle de réécriture?
J'ai essayé ceci basé sur this SO page et cela n'a pas fonctionné. Je ne dois pas comprendre quelque chose sur la syntaxe.
location /store {
rewrite ^/store/(.*) /$1;
try_files $uri @store_site;
}
Mise à jour
Apparemment, cela fonctionne (ajouté break;
) Est-ce une solution complète?
location /store {
rewrite ^/store/(.*) /$1 break;
try_files $uri @store_site;
}
Vous devez réécrire l'URI sans déclencher une redirection comme indiqué en utilisant break
.
Selon les détails de votre configuration, si tout doit aller au backend ou si Nginx doit servir certaines requêtes telles que des fichiers statiques, vous aurez besoin soit ...
location /store {
try_files $uri @store_site;
}
location /backoffice {
try_files $uri @backoffice_site;
}
location @store_site {
rewrite ^/store/(.*) /$1 break;
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
}
location @backoffice_site {
rewrite ^/backoffice/(.*) /$1 break;
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock;
}
... ou
location /store {
rewrite ^/store/(.*) /$1 break;
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
}
location /backoffice {
rewrite ^/backoffice/(.*) /$1 break;
include uwsgi_params;
uwsgi_pass unix:/var/run/uwsgi/backoffice_site.sock;
}
Je vous suggère d'essayer ceci pour un article:
location /store/ {
rewrite ^/store/(.*) /$1 break;
include uwsgi_params;
proxy_set_header Host $Host;
uwsgi_pass unix:/var/run/uwsgi/store_site.sock;
}
Je ne l'ai pas testé mais je pense que ça devrait marcher.