8 votes

Meilleure pratique pour gérer default_server et IP publique dans nginx

J'ai récemment créé un serveur nginx sur debian 8. Il est venu avec une configuration par défaut sur /etc/nginx/sites-available/default qui redirige vers une page de bienvenue nginx.

server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;

server_name your_server_ip;

location / {
    try_files $uri $uri/ =404;
}

location ~ \.php$ {
    include snippets/fastcgi-php.conf;
    fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
}

location ~ /\.ht {
    deny all;
}
}

J'avais ajouté une nouvelle page de production, disons 'exemple.com' avec ssl dessus.

Dans la configuration pour ../exemple.com, elle n'est pas définie comme serveur par défaut.

server {
listen 80;
listen [::]:80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}

server {

# Configuration SSL

listen 443 ssl;
listen [::]:443 ssl;
include snippets/ssl-example.com.conf;
include snippets/ssl-params.conf;
....

Maintenant lorsque j'ai testé la sécurité SSL sur https://www.ssllabs.com/ssltest/analyze.html?d=example.com, j'ai obtenu un A+. Mais il avait commenté 'Configuration de serveur incohérente'.

Et lorsque je charge l'adresse IP, disons x.x.x.x sur le navigateur en tant que https:// x.x.x.x, il charge la même page que https://example.com mais sans ssl (barre d'adresse verte). Si je charge http:// x.x.x.x, il charge la page de bienvenue nginx par défaut.

J'ai essayé de définir la configuration par défaut (pour l'adresse IP) pour obtenir un message interdit, j'ai ajouté le code suivant

location / {
deny all;
}

Maintenant lorsque je teste la sécurité SSL de exemple.com, il dit "Aucun protocole sécurisé pris en charge" et aucun résultat de test n'est apparu.

Alors mes questions sont,

Que faut-il faire avec la configuration par défaut fournie avec nginx qui se charge pour l'adresse IP?

Quel server_name (fichier de configuration) doit être défini comme default_server sur la commande 'listen'?

Que faire avec l'adresse IP qui redirige actuellement les demandes https vers le domaine exemple?

Résultats souhaités :-

https:// example.com devrait être le seul utilisé pour se connecter au serveur et charger l'adresse IP devrait afficher 'page non trouvée' ou 'interdit', puisque exemple.com sera utilisé pour des scripts php dessus.

Les tests SSL devraient donner au moins une note A après la configuration définie.

L'adresse IP ne devrait pas accepter de connexions directement et les traiter.

9voto

Tero Kilkanen Points 32968

Vous pouvez avoir ceci comme votre bloc serveur par défaut :

serveur {
    écouter 80 serveur par défaut;
    écouter 443 ssl serveur par défaut;

    nom_du_serveur _;

    ... Clés SSL pour le serveur par défaut ...

    retour 403;
}

Cela provoquera toute connexion HTTP dont l'en-tête Host: ne correspond à aucun autre hôte virtuel sur le serveur pour renvoyer un message d'erreur 403 Forbidden au client.

Si vous utilisez des clés SSL valides ici pour le nom d'hôte qui ne correspond à aucun nom d'hôte existant, le client obtiendra directement la page d'erreur 403. Si vous utilisez un certificat auto-signé ici, alors l'utilisateur recevra un message d'erreur de certificat non approuvé.

3voto

Ajay Singh Points 298

Enfin trouvé une solution utilisable. Quora fait quelque chose comme ça. Pour rediriger le défaut vers 404.

Source : Mise en place correcte d'un serveur nginx "par défaut" pour https

En définissant la configuration par défaut comme ceci.

server {
server_name _;
listen       80  default_server;
return       404;
}

server {
listen 443 ssl;
server_name _;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
return       404;
}

Ensuite, créez un répertoire pour ssl s'il n'existe pas

sudo mkdir -p /etc/nginx/ssl

Ensuite, créez un ssl auto-signé pour le même

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/ssl/nginx.key -out /etc/nginx/ssl/nginx.crt

Vérifiez les erreurs et rechargez nginx pour obtenir le 404

nginx -t

sudo sytemctl reload nginx

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X