3 votes

Nginx redirige soudainement tout vers la page 403, est-il possible de déboguer ou de retracer cela?

Je ne suis pas sûr de ce qui s'est passé avec mon installation nginx. Soudainement, toutes les demandes de page sont redirigées vers la page 403.

Hier, j'ai essayé d'ajouter un agent utilisateur à bloquer, redémarré le service à partir de ce moment-là tout était envoyé vers le 403. J'ai annulé ce changement, redémarré nginx et tout est toujours dirigé vers la page 403. Même si je supprime les déclarations $http_user_agent et $http_referer, tout est encore envoyé vers 403.

J'ai même restauré tout le dossier nginx à partir d'une sauvegarde et toutes mes demandes de page continuent d'être dirigées vers la page 403....

Je ne sais pas comment résoudre ce problème, les fichiers de configuration semblent propres. Y a-t-il une trace que je peux faire pour nginx lorsque les demandes entrent?

[root@soupcan nginx]# nginx -t
nginx: le fichier de configuration /etc/nginx/nginx.conf est syntaxiquement correct
nginx: le test de fichier de configuration /etc/nginx/nginx.conf est un succès

Voici la configuration du site web:

server {
    listen       80;
    server_name  localhost;

    #charset koi8-r;

    access_log  /var/log/nginx/website1/access.log  main;
    error_log /var/log/nginx/website1/error.log;

    root /srv/www/website1;

    ## Blocage de l'agent utilisateur http - scanner foutu de morpheus ##
    if ($http_user_agent ~* "morpheus fucking scanner|ZmEu|Morfeus strikes again.|OpenWebSpider v0.1.4 (http://www.openwebspider.org/)") {
        return 403;
     }

    if ($http_referer ~* (semalt.com|WeSEE)) {
        return 403;
    }

    ## Autoriser uniquement les méthodes de demande GET et HEAD. Par défaut, Nginx bloque
    ## toutes les demandes autres que GET et HEAD pour le contenu statique.
    if ($request_method !~ ^(GET|HEAD)$ ) {
      return 405;
    }

    location / {
        index  index.html index.htm index.php;
        ssi on;
    }

    location ~ \.php {
        try_files $uri =404;
        include /etc/nginx/fastcgi_params;
        fastcgi_pass 127.0.0.1:9000;
        #fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME /srv/www/website1/$fastcgi_script_name;
    }

    #error_page  404              /404.html;

    # redirection des pages d'erreur du serveur vers la page statique /50x.html
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # Rediriger les pages d'erreur du serveur vers la page statique
    error_page 403 404 /error403.html;
    location = /error403.html {
        root /usr/share/nginx/html;
    }
}

nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    gzip  on;
    gzip_disable "msie6";
    gzip_min_length 1100;
    gzip_vary on;
    gzip_proxied any;
    gzip_buffers 16 8k;
    gzip_types text/plain text/css application/json application/x-javascript
        text/xml application/xml application/rss+xml text/javascript
        image/svg+xml application/x-font-ttf font/opentype
        application/vnd.ms-fontobject;

    server_tokens off;

    include /etc/nginx/conf.d/*.conf;
    # Charger les fichiers de configuration du virtual host.
    include /etc/nginx/sites-enabled/*;

    # BLOQUER LES ADRESSES IP DES SPAMMERS
    include /etc/nginx/conf.d/blockips.conf;
}

Autorisations pour le répertoire webroot:

[root@soupcan nginx]# namei -om /srv/www/website1/
f: /srv/www/website1/
 dr-xr-xr-x root  root   /
 drwxr-xr-x root  root   srv
 drwxrwxr-x brian nobody www
 drwxr-x--x brian nobody website1

EDIT

J'ai découvert que CentOS 6.6 et SELinux perturbent nginx. Je cherche toujours une solution, mais voici la cause.

EDIT 2

Solution postée ci-dessous.

2voto

Larry G. Wapnitsky Points 198

L'incident a été causé par la mise à niveau de CentOS de 6.5 à 6.6 et par la façon dont SElinux autorise le type de contenu. Avec cette mise à niveau, SElinux autorise par défaut uniquement le contenu httpd_t (similaire à la façon dont ils traitent apache), et comme je stocke tout mon contenu web dans /srv/www/, ces dossiers créés par les utilisateurs n'avaient pas de libellé de contenu défini automatiquement par le système.

Pour vérifier cela, exécutez la commande suivante contre votre webroot et vos répertoires /etc/nginx et comparez les types de contenu :

ls -Z /srv/www/

J'ai exécuté ces commandes et redémarré nginx et maintenant tout fonctionne normalement.

grep nginx /var/log/audit/audit.log | audit2allow -m nginx > nginx.te
grep nginx /var/log/audit/audit.log | audit2allow -M nginx
semodule -i nginx.pp

Je ne suis pas sûr de ce que fait ce module SElinux, mais je l'ai trouvé en lisant ce post sur le même problème. Je vais peut-être le supprimer aujourd'hui, car je pense que la deuxième chose que j'ai faite pour résoudre cela a effectivement fonctionné.

[09:15 AM] robotoverlord ~>chcon -Rv --type=httpd_sys_content_t /srv/www/
[09:15 AM] robotoverlord ~> ls -Z /srv/www/
drwxr-xr-x. www-data nobody unconfined_u:object_r:httpd_sys_content_t:s0 website1
[09:15 AM] robotoverlord ~>service nginx restart

Informations supplémentaires sur l'étiquetage du contenu pour SElinux

Problème résolu !

0voto

cclark Points 1381
chmod ogw file

définit les autorisations sur le fichier pour le propriétaire, le groupe et le monde, chacun étant la somme de lecture (4), écriture (2), exécution (1), si désiré

pas d'accès approprié pour lire écrire

drwxr-x--x brian personne site1

nginx ne fait que lire, donc vous devez le laisser entrer!

cd /srv/
find . -type d -exec chmod 755 {} \;

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