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?****
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.
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';
}
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".
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.
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
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/
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 :
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 ?
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à :)
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.
je pense avoir trouvé, ca viendrait du cache du navigateur...
Pourtant, j'avais utilisé plusieurs navigateurs, même celui de mon tel
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 !