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


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
Auteur

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
Auteur

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

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
Auteur

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.).

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
Auteur

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
Auteur

Quand je tape la commande

 sudo service nginx stop

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

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
Auteur

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)

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
Auteur

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à

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
Auteur

oui, ils pointent vers mon serveur

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
Auteur

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

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
Auteur

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

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

Du coup qu'as tu maintenant ?

chaptor
Auteur

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

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