5 votes

NGINX - erreur CORS ne concernant que Firefox

Il s'agit d'un problème avec Nginx qui n'affecte que firefox. J'ai cette configuration : http://pastebin.com/q6Yeqxv9

amont connect {
        serveur 127.0.0.1:8080;
}

serveur {
        server_name admin.example.com www.admin.example.com;
        écouter 80;
        retour 301 https://admin.example.com$request_uri;
}

serveur {
        écouter 80;
        server_name ankieta.example.com www.ankieta.example.com;
        ajouter_en-tête Access-Control-Allow-Origin $http_origin;
        ajouter_en-tête 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, PATCH, DELETE';
        ajouter_en-tête 'Access-Control-Allow-Credentials' 'true';
        ajouter_en-tête 'Access-Control-Allow-Headers' 'Access-Control-Request-Method,Access-Control-Request-Headers,Cache,Pragma,Authorization,Accept,Accept-Encoding,Accept-Language,Host,Referer,Content-Length,Origin,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
        retour 301 https://ankieta.example.com$request_uri;
}

serveur {
        server_name admin.example.com;
        écouter 443 ssl;
        ssl_certificate /srv/ssl/14182263.pem;
        clé de certificat ssl /srv/ssl/admin_i_ankieta.example.com.key;

        protocoles SSLv3 TLSv1;
        chiffres SSL ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;

        emplacement / {
                proxy_pass http://connect;
        }
}

serveur {
        server_name ankieta.example.com;
        écouter 443 ssl;
        ssl_certificate /srv/ssl/14182263.pem;
        clé de certificat ssl /srv/ssl/admin_i_ankieta.example.com.key;

        protocoles SSLv3 TLSv1;
        chiffres SSL ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;

        racine /srv/limesurvey;
        index index.php;

        ajouter_en-tête 'Access-Control-Allow-Origin' $http_origin;
        ajouter_en-tête 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, PATCH, DELETE';
        ajouter_en-tête 'Access-Control-Allow-Credentials' 'true';
        ajouter_en-tête 'Access-Control-Allow-Headers' 'Access-Control-Request-Method,Access-Control-Request-Headers,Cache,Pragma,Authorization,Accept,Accept-Encoding,Accept-Language,Host,Referer,Content-Length,Origin,DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

        client_max_body_size 4M;

        emplacement / {
                try_files $uri $uri/ /index.php?q=$uri&$args;
        }

        emplacement ~ /*.php$ {

                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                #NOTE: Vous devriez avoir "cgi.fix_pathinfo = 0;" dans php.ini
                inclure fastcgi_params;
                fastcgi_param SCRIPT_FILENAME /srv/limesurvey$fastcgi_script_name;
#                       fastcgi_param HTTPS $https;
                fastcgi_intercept_errors on;
                fastcgi_pass 127.0.0.1:9000;
        }

        emplacement ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expire max;
                log_not_found off;
        }

}

il s'agit essentiellement d'une application AngularJS et d'une application PHP (LimeSurvey), servies sous deux domaines différents par le même serveur web (Nginx). AngularJS est en fait servi par ConnectJS, qui est proxyé par Nginx (ConnectJS n'écoute que sur localhost).

Dans la console Firefox j'obtiens ceci :

Requête interdomaine bloquée : la même politique d'origine empêche la lecture de la ressource distante à https://ankieta.example.com/admin/remotecontrol. Ceci peut être corrigé en déplaçant la ressource vers le même domaine ou en activant CORS.

ce qui est bien sûr ennuyeux. Les autres navigateurs fonctionnent correctement (Chrome, IE).

Des suggestions à ce sujet ?

2voto

Finduilas Points 101

Le problème survenait car Firefox n'autorisait pas le certificat SSL de l'API. Faire confiance au certificat du site en naviguant jusqu'au point d'accès avec Firefox a résolu temporairement les problèmes, tandis que le changement de certificat - définitivement.

Les problèmes d'en-tête avec Firefox et l'API LimeSurvey remotecontrol peuvent être résolus en relayant des valeurs d'en-tête fixes, ou en envoyant des blobs, comme indiqué dans https://stackoverflow.com/questions/24465304/trouble-changing-request-headers-in-firefox-with-angularjs

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