est-il possible de faire quelque chose comme ça avec nginx?
if ( $http_user_agent = "wget" ){
server {
listen 11.11.11.11:1111;
root /website1/;
server_name example.com www.example.com;
else
server {
listen 22.22.22.22:22222;
root /website2/;
server_name example2.com www.example2.com;
}
linux
nginx
configuration
user421936
la source
la source
Réponses:
Le module de réécriture Nginx a une
if
directive (voir la documentation liée pour des exemples), mais paselse
. L'équivalent deelse
serait tout ce qui n'est pas modifié avec unif
.Vous pouvez utiliser à l'
if
intérieur d'unserver { }
mais pas l'inverse. Vous n'auriez même pas la condition comparée dans votre si avant une demande qui a déjà besoin du serveur. Là, vous ne pouvez diffuser du contenu que lorsque l'agent utilisateur est (ou n'est pas)wget
.Notez également que vous ne devez pas l'utiliser à l'
if
intérieurlocation
car cela pourrait ne pas fonctionner comme vous le souhaitez (voir Si c'est mal ).la source
Dans la forme donnée, cela ne fonctionnera pas: le test de l'agent utilisateur HTTP implique que la demande a déjà été reçue. Cela n'est possible que si un
server
bloc a déjà été défini. Voulez-vous vraiment démarrer de nouveaux serveurs en fonction de la chaîne User-Agent d'une demande que vous avez reçue ailleurs?Si vous souhaitez simplement servir un contenu différent, rediriger vers différents chemins, etc. en fonction de parties de la demande comme l'agent utilisateur, c'est possible, par exemple avec http://nginx.org/en/docs/http/ngx_http_rewrite_module. html
la source