J'utilise nginx pour mapper plusieurs domaines à google app engine. Dans ce cas précis, j'associe plusieurs domaines au moteur d'applications Google. même locataire . il y a une configuration dans mon code qui sait quel domaine est le domaine principal et quand une demande arrive, je vérifie si l'hôte est le domaine principal et si ce n'est pas le cas, je redirige vers le domaine principal.
par exemple, disons que www.aaa.com
est le domaine défini par défaut
aaa.com -> www.aaa.com
www.bbb.com -> www.aaa.com
ccc.com -> www.aaa.com
...
ce qui arrive de temps en temps, c'est qu'une url javascript entre dans une boucle de redirection sur nginx. Notez que la requête n'atteint jamais Appengine. Nginx crée cette boucle. 302 Found
boucle. Cela s'est produit deux fois au cours des deux dernières semaines.
le chemin de la requête ressemble à www.aaa.com/22/foobar.js
où la première partie du chemin est le numéro de version du fichier javascript.
un fichier css avec le même format uri www.aaa.com/22/foobar.css
n'aura pas cette boucle de redirection.
si je déploie une nouvelle version, le fichier sera à nouveau serveur correctement. donc déployer une version 23
et l'accès à www.aaa.com/23/foobar.js
travaillerait à nouveau. De plus, si j'utilise un cachebuster sur la requête, comme par exemple www.aaa.com/22/foobar.js?345
Le redémarrage de nginx ou même le redémarrage de la machine où nginx est exécuté n'aide pas. L'installation d'une nouvelle machine avec la même configuration exacte sert le fichier sans problème.
Alors qu'est-ce qui pourrait causer cette boucle de redirection ? Comment puis-je m'en débarrasser une fois qu'elle se produit ? Y a-t-il un cache sur nginx (je sais que nginx ne fait pas de cache par défaut) que je ne connais pas ? La machine met-elle en cache ces redirections ?
voici mon nginx.conf
user nginx;
worker_processes 2;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
server_names_hash_max_size 1024;
server_names_hash_bucket_size 128;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
# enable gzip compression
gzip on;
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_comp_level 5;
gzip_types text/plain application/x-javascript text/xml text/css;
gzip_vary on;
server {
server_name www.aaa.com;
location / {
resolver 8.8.8.8;
proxy_pass http://tenantname.myappid.appspot.com/$request_uri;
proxy_set_header Host tenantname.myappid.appspot.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header NexHost $scheme://$host;
proxy_redirect http://tenantname.myappid.appspot.com/ /;
proxy_intercept_errors on;
}
}
server {
server_name aaa.com;
location / {
resolver 8.8.8.8;
proxy_pass http://tenantname.myappid.appspot.com/$request_uri;
proxy_set_header Host tenantname.myappid.appspot.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header NexHost $scheme://$host;
proxy_redirect http://tenantname.myappid.appspot.com/ /;
proxy_intercept_errors on;
}
}
server {
server_name www.bbb.com;
location / {
resolver 8.8.8.8;
proxy_pass http://tenantname.myappid.appspot.com/$request_uri;
proxy_set_header Host tenantname.myappid.appspot.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header NexHost $scheme://$host;
proxy_redirect http://tenantname.myappid.appspot.com/ /;
proxy_intercept_errors on;
}
}
server {
server_name bbb.com;
location / {
resolver 8.8.8.8;
proxy_pass http://tenantname.myappid.appspot.com/$request_uri;
proxy_set_header Host tenantname.myappid.appspot.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header NexHost $scheme://$host;
proxy_redirect http://tenantname.myappid.appspot.com/ /;
proxy_intercept_errors on;
}
}
server {
server_name www.ccc.com;
location / {
resolver 8.8.8.8;
proxy_pass http://tenantname.myappid.appspot.com/$request_uri;
proxy_set_header Host tenantname.myappid.appspot.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header NexHost $scheme://$host;
proxy_redirect http://tenantname.myappid.appspot.com/ /;
proxy_intercept_errors on;
}
}
server {
server_name ccc.com;
location / {
resolver 8.8.8.8;
proxy_pass http://tenantname.myappid.appspot.com/$request_uri;
proxy_set_header Host tenantname.myappid.appspot.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header NexHost $scheme://$host;
proxy_redirect http://tenantname.myappid.appspot.com/ /;
proxy_intercept_errors on;
}
}
server {
server_name ~^(?.+)\.maindomain\.com$;
location / {
resolver 8.8.8.8;
proxy_pass http://$sub.myappid.appspot.com/$request_uri;
proxy_set_header Host $sub.myappid.appspot.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header NexHost $scheme://$host;
proxy_redirect http://$sub.myappid.appspot.com/ /;
proxy_intercept_errors on;
}
}
server {
listen 80 default_server;
server_name _;
location / {
root /etc/nginx/html;
}
}
}