problème de redirection avec nginx

Par chaptor, il y a 9 ans


Outils Linux

Bonjour,

J'ai un problème de redirection avec nginx:
J'ai un nouveau ndd "A". Il pointe vers mon vps. J'ai créé un fichier de configuration dans "sites-available".
Quand je veux me rendre sur "A", le suis redirigé vers un autre ndd "B" qui est sur mon vps.

J'ai dabord cru à une mauvaise configuration dans un des fichiers présent dans "sites-available" mais j'ai rien trouvé d'anormal.

Du coup, j'ai supprimé tout les liens symboliques dans "sites-enabled", relancé nginx. Donc normalment, il n'y a aucune redirection active et pourtant, je suis toujours redirigé vers le ndd "B".

Comment puis-je trouver d'où vient cette redirection?****

21 réponses

yanis-git, il y a 9 ans

Bonjour, peux tu nous montrer les différents vhost que tu as ? Notament le domain "a" et "b" ?

Pour ma part : un serveur que j'administre dispose systématiquement d'un default.conf tel que :

server { listen 80 default_server; server_name _; access_log /home/default/logs/access.log; error_log /home/default/logs/access.log; root /home/default/www; index index.php; # [...] }

Tu remarqueras le listen et le server_name différent d'un vhost classique, cela permet de grabe tout ce qui ne match pas avec un autre vhost.

server { server_name my.domain.ltd; root /home/project/www/public; }

Au plaisir de t'aider.

chaptor, il y a 9 ans

justement, je cherchis une ligne ressemblant à

server_name _;

mais je n'ai pas trouvé.

Voici mon vhost du ndd A:

upstream puma_carnavals_production { server unix:/home/carnaval/www/shared/tmp/sockets/puma.sock fail_timeout=0; } server { listen 80; server_name lescarnavals.be; root /home/carnaval/www/current/public; try_files $uri/index.html $uri @puma_carnavals_production; error_log /var/log/nginx/carnavals-error.log notice; access_log /var/log/nginx/carnaval-access; client_max_body_size 4G; keepalive_timeout 10; error_page 500 502 504 /500.html; error_page 503 @503; location @puma_carnavals_production { proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header X-Forwarded-Proto http; proxy_pass http://puma_carnavals_production; # limit_req zone=one; access_log /home/carnaval/www/shared/log/nginx.access.log; error_log /home/carnaval/www/shared/log/nginx.error.log; } location ^~ /assets/ { gzip_static on; expires max; add_header Cache-Control public; } location = /50x.html { root html; } location = /404.html { root html; } location @503 { error_page 405 = /system/maintenance.html; if (-f $document_root/system/maintenance.html) { rewrite ^(.*)$ /system/maintenance.html break; } rewrite ^(.*)$ /503.html break; } if ($request_method !~ ^(GET|HEAD|PUT|PATCH|POST|DELETE|OPTIONS)$ ){ return 405; } if (-f $document_root/system/maintenance.html) { return 503; } }

Le vhost du ndd B

# Redirection http vers https server { listen 80; listen [::]:80; server_name animauxperdus.net; location / { return 301 https://animauxperdus.net$request_uri; } } server { # spdy pour Nginx < 1.9.5 listen 443 ssl spdy; listen [::]:443 ssl spdy; spdy_headers_comp 9; server_name animauxperdus.net; root /home/animauxperdus/www/web; error_log /var/log/nginx/animauxperdus.log notice; access_log off; #### Locations # On cache les fichiers statiques location ~* \.(html|css|js|png|jpg|jpeg|gif|ico|svg|eot|woff|ttf)$ { expires max; } # On interdit les dotfiles #### SSL ssl on; ssl_certificate /etc/letsencrypt/live/animauxperdus.net-0001/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/animauxperdus.net-0001/privkey.pem; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/animauxperdus.net-0001/fullchain.pem; # Google DNS, Open DNS, Dyn DNS resolver 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 216.146.35.35 216.146.36.36 valid=300s; resolver_timeout 3s; #### Session Tickets # Session Cache doit avoir la même valeur sur tous les blocs "server". ssl_session_cache shared:SSL:100m; ssl_session_timeout 24h; ssl_session_tickets on; # [ATTENTION] il faudra générer le ticket de session. ssl_session_ticket_key /etc/nginx/ssl/ticket.key; # [ATTENTION] Les paramètres Diffie-Helman doivent être générés ssl_dhparam /etc/nginx/ssl/dhparam4.pem; #### ECDH Curve ssl_ecdh_curve secp384r1; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK'; location / { try_files $uri /app.php$is_args$args; } location ~ ^/(app_dev|config)\.php(/|$) { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; } location ~ ^/app\.php(/|$) { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; internal; } location ~ \.php$ { return 404; } }

Et un vhost qui fonctionne (D)

# Redirection http vers https server { listen 80; listen [::]:80; server_name lesrongeursdomestiques.com www.lesrongeursdomestiques.com; location / { return 301 https://lesrongeursdomestiques.com$request_uri; } } server { listen 443 ssl spdy; listen [::]:443 ssl spdy; spdy_headers_comp 9; server_name lesrongeursdomestiques.com; #access_log /var/log/nginx/lesrongeursdomestiques.com.access.log; error_log /var/log/nginx/lesrongeursdomestiques.com.error.log; root /home/rongeurs/www; index index.html index.php; # set expiration of assets to MAX for caching location ~* \.(ico|css|js|gif|jpe?g|png)(\?[0-9]+)?$ { expires max; log_not_found off; } location / { # Check if a file exists, or route it to index.php. try_files $uri $uri/ /index.php; } location ~* \.php$ { fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $realpath_root; internal; } #### SSL ssl on; ssl_certificate /etc/letsencrypt/live/lesrongeursdomestiques.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/lesrongeursdomestiques.com/privkey.pem; ssl_stapling on; ssl_stapling_verify on; ssl_trusted_certificate /etc/letsencrypt/live/lesrongeursdomestiques.com/fullchain.pem; # Google DNS, Open DNS, Dyn DNS resolver 8.8.8.8 8.8.4.4 208.67.222.222 208.67.220.220 216.146.35.35 216.146.36.36 valid=300s; resolver_timeout 3s; #### Session Tickets # Session Cache doit avoir la même valeur sur tous les blocs "server". ssl_session_cache shared:SSL:100m; ssl_session_timeout 24h; ssl_session_tickets on; # [ATTENTION] il faudra générer le ticket de session. ssl_session_ticket_key /etc/nginx/ssl/ticket.key; # [ATTENTION] Les paramètres Diffie-Helman doivent être générés ssl_dhparam /etc/nginx/ssl/dhparam4.pem; #### ECDH Curve ssl_ecdh_curve secp384r1; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK'; }
chaptor, il y a 9 ans

Normalement, si je supprime tout les liens symbolique, il ne devrait plus avoir de redirection?

yanis-git, il y a 9 ans

Ton serveur ne devrait plus rien répondre. Cf le point d'entré de la config à savoir un fichier nginx.conf

user www-data; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; client_max_body_size 200m; charset utf-8; pagespeed FileCachePath "/var/cache/ngx_pagespeed/"; pagespeed AdminPath /pagespeed_admin; pagespeed GlobalAdminPath /pagespeed_global_admin; include conf.d/*.conf; include /etc/nginx/conf/site-enabled/*.conf; }

si ça continue de retourner quelques choses, tu dois vérifier ce fichier ainsi que tout les fichiers qui "match" avec le(s) "include".

chaptor, il y a 9 ans

Je viens de regarder le fichier nginx.conf ainsi que les include mais il n'y a aucune redirection. J'ai de nouveau supprimé tout les liens symbolique, ajouté un vhost default avec le code que tu as mis dans ta 1ere réponse. Biensûr, j'ai redémaré nginx et ca ne change rien, quand je tape lescarnavals.be, ca ridirige vers animauxperdus.net (qui est h.s.).

yanis-git, il y a 9 ans

le ping des deux domaines envoient bien sur ton domaine ? A tout hasard es-tu sure que rien n'ecoute sur le port 80 ?

netstat -a | grep port

Cette commande t'aidera à en être sûre.

chaptor, il y a 9 ans

la commande

netstat -a | grep 80

Me retourne:

unix 2 [ ACC ] STREAM LISTENING 18037173 /home/skrirails/www/shared/tmp/sockets/puma.sock unix 3 [ ] STREAM CONNECTE 780524885 unix 3 [ ] STREAM CONNECTE 780524884 unix 3 [ ] STREAM CONNECTE 780524883 unix 3 [ ] STREAM CONNECTE 780524882 unix 3 [ ] STREAM CONNECTE 780524881 unix 3 [ ] STREAM CONNECTE 780524880 unix 3 [ ] STREAM CONNECTE 780524879 unix 3 [ ] STREAM CONNECTE 780524878 unix 2 [ ] DGRAM 780369191 unix 3 [ ] STREAM CONNECTE 778704880 /var/run/dovecot/anvil

La preimière ligne, correspond à un de mes sites, les autres je ne sais pas

chaptor, il y a 9 ans

Quand je tape la commande

sudo service nginx stop

la redirection se fait toujours. Donc, ca ne vient pas de nginx

yanis-git, il y a 9 ans

Tu as ta réponse :)

le web-server Puma occupe le port 80 (pour être sûre, éteint Puma et retest) , tu ne peux avoir deux services occupant le même port. Tu dois donc laisser ce port à Nginx et te servir de la méchanique proxy de Nginx.

ici une config type de Nginx Proxy pour puma : https://github.com/puma/puma/blob/master/docs/nginx.md

Ici des trames pour configurer Puma sur un autre port :
https://github.com/puma/puma/issues/939
https://github.com/rails/rails/issues/24435
https://www.schneems.com/2017/03/13/puma-ports-and-polish/

chaptor, il y a 9 ans

Sauf qu'hier soir, j'ai redémarré le serveur et maintenant, j'ai ca

unix 16 [ ] DGRAM 781768380 /dev/log unix 3 [ ] STREAM CONNECTE 787550380 unix 3 [ ] STREAM CONNECTE 787550180 unix 3 [ ] STREAM CONNECTE 787550080 /var/run/dovecot/anvil unix 2 [ ] DGRAM 781805546

Il n'y a plus le serveur puma mais la redirection est toujours là.

J'ai essayé d'arrêter puma mais je n'ai pas réussi. Pour le deploiement de l'app, j'utilise capistrano (comme indiqué dans le tuto) et même en récupérant la ligne de commande que capistrano utilise pour restart puma, ca ne marche pas (~/.rvm/bin/rvm default do bundle exec pumactl -S /home/skrirails/www/shared/tmp/pids/puma.state restart)

yanis-git, il y a 9 ans
sudo ps aux | grep puma

Tu repères le ou les PID de l'app

sudo kill -9 <PID>

ça devrait stopper le processus Puma, si c'est pas le cas et que la première commande remonte toujours des instances de puma en cours, compare les PID pour déterminer si :

  • même PID : tu as pas réussie à le kill
  • PID différent : Un daemon ou le système relance automatiquement le daemon de Puma.
chaptor, il y a 9 ans

J'ai réussi à stopper le processus de puma de l'app.
Maintenant, la commande sudo ps aux | grep puma me retourne:

1000 15340 0.0 0.0 8300 932 pts/0 S+ 13:35 0:00 grep puma

Je ne sais pas si il faut supprimer ou si c'est normal (en tout cas, je n'arrive pas à le supprimer)

netstat -a | grep 80 me retourne

unix 15 [ ] DGRAM 781768380 /dev/log unix 3 [ ] STREAM CONNECTE 787550380 unix 2 [ ] DGRAM 781805546

Et le reirection est toujours là

yanis-git, il y a 9 ans

Pour le premier grep c'est normal de voir cette ligne, en effet le grep s'auto detect, c'est assez drôle comme comportement et tout à fait normal.

En revanche je te confirme que rien ne tourne sur le port 80, as tu ping tes domaines pour vérifier qu'ils pointent bien sur ton serveur ?

chaptor, il y a 9 ans

oui, ils pointent vers mon serveur

yanis-git, il y a 9 ans

Bon .. Sur l'un des domaines qui répond, peux tu me montrer l'entête HTTP :

curl -X HEAD -i http://domain.ltd

Parce que je t'avoue que je sèche un peu là :)

chaptor, il y a 9 ans

Sur le domaine où il y a la redirection:

HTTP/1.1 200 OK Server: nginx/1.6.2 Date: Thu, 04 May 2017 08:48:41 GMT Content-Type: text/html Content-Length: 4 Last-Modified: Thu, 04 May 2017 08:47:53 GMT Connection: keep-alive ETag: "590aeab9-4" Accept-Ranges: bytes
yanis-git, il y a 9 ans

Cela dit bien que la réponse viens du serveur Nginx... Très étonnant étant donné que tu es sûre qu'il ne tourne pas. (pour t'en double assurer)

sudo ps aux | grep nginx

Sans accès à ta machine, je ne peux t'aider plus au risque d'y passer des heures.

chaptor, il y a 9 ans

je pense avoir trouvé, ca viendrait du cache du navigateur...

Pourtant, j'avais utilisé plusieurs navigateurs, même celui de mon tel

yanis-git, il y a 9 ans

Du coup qu'as tu maintenant ?

chaptor, il y a 9 ans

Je viens de modifier mon vhost pour qu'il redirige vers le https et ca fonctionne.

J'ai dû effacer le cache, historique,... des navigateurs pour que ca fonctionne

A mons avis, a un certiain moment, on a corrigé le problème mais le cache du navigateur continuait à faire la redirection.

En tout cas merci beaucoup pour l'aide apportée

yanis-git, il y a 9 ans

De rien est bonne continuation :) tu auras appris deux trois trucs ce n'est pas plus mal !