Et comme le fait remarquer ache, est-que 45.55.0.38 correspond bien à ton serveur ?
Non, c’est une fausse piste. C’est l’IP d’un bot aux USA.
J’ai fais une réponse un peu complète …
Y a un récap' à la fin du poste, si tu veux.
Il y a bien la redirection du port 80 vers le port 443.
Franchement, c’est le premier truc suspect mais quand je le regarde, je vois rien. J’ai pour habitude de mettre le server_name
au début mais ça ne change rien du tout. Si on veut vraiment innocenter ce bloc, il faudrait le changer temporairement de 301 vers 302. Redémarrer nginx, refaire curl pour vérifier que c’est bien encore un 301. Mais à mon avis, ça sera encore un 301, ce n’est pas ça.
Un autre truc un peu suspect, c’est la mise en place du proxy avec ton proxy_pass
.
Il te faut peut-être un redirect_off.
location / {
proxy_redirect off;
proxy_pass http://unix:/tmp/gunicorn.[dns].sock;
proxy_set_header X-Real-IP $remote_addr;
}
Avec un peu de chance, c’est juste nginx qui essaye d’être malin. 🤞
Aussi ! Le dossier /tmp
, s’il est monté par systemd peut-être géré différemment des autres et avoir PrivateTmp
ce qui pourrait le rendre invisible (mais dans ce cas là, tu aurais eu un 404, pas un 301).
Dans tous les cas, je te conseil de mettre ton socket linux dans /var/run
ou /srv/
Si ce n’est pas le proxy, du coup, ben je vois que l’application. Pour innocenter (ou inculper ! 😈) l’application, il faudrait créer une application basique qui retourne constamment disons au pif un code de statut 418.
J’ai mis en place rapidement ce petit serveur:
upstream teapot {
server unix:/srv/tea.sock fail_timeout=0;
}
server {
listen 80;
listen [::]:80;
server_name tea.local;
access_log /var/log/nginx/tea.log;
error_log /var/log/nginx/tea.error.log;
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://unix:/srv/tea.sock;
}
}
Mais garde ta configuration. Tu n’as pas besoin de la changer.
Avec: 127.0.0.1 tea.local
dans le fichier host.
Et comme application:
from flask import Flask
app = Flask(__name__)
@app.route("/")
def hello_world():
return "<p>I'm a teapot ! 🫖</p>", 418
Dans un fichier tea.py
, qu’on pourra alors appeler avec gunicorn
avec tea:app
.
Et en lançant gunicorn avec: sudo gunicorn --bind unix:/srv/tea.sock tea:app
.
Mais du coup, tu peux juste faire sudo gunicorn --bind unix:/tmp/gunicorn.[dns].sock tea:app
chez toi comme ça tu ne modifies pas ta configuration nginx. Attention à bien éteindre django avant.
Et curl:
$ curl -sSD - http://tea.local
HTTP/1.1 418 I'M A TEAPOT
Server: nginx/1.24.0
Date: Sat, 02 Dec 2023 18:04:50 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 26
Connection: keep-alive
<p>I'm a teapot ! 🫖</p>
Ça marche bien.
Bref à tester:
- Changer le 301 en 302, redémarrer nginx et vérifier que c’est encore 301. C’est rapide.
- Rajouter
proxy_redirect off;
puir redémarrer nginx.
- Changer le chemin du socket pour qu’il ne soit pas dans
/tmp
, c’est rapide mais par-contre, c’est peu probable que ça soit ça.
- On peut essayer d’inculper l’application en la remplaçant par une application Flask (Django mais genre vraiment light).
Après, si même après ces trois étapes, tu as une 301. Il va falloir vérifier que tu tapes sur le bon nginx.
Ça nous est tous arrivé au moins une fois.