NGINX - ข้อผิดพลาด CORS มีผลเฉพาะกับ Firefox


4

นี่เป็นปัญหาของ Nginx ที่มีผลต่อ firefox เท่านั้น ฉันมีการกำหนดค่านี้: http://pastebin.com/q6Yeqxv9

upstream connect {
        server 127.0.0.1:8080;
}

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

server {
        listen 80;
        server_name ankieta.example.com www.ankieta.example.com;
        add_header Access-Control-Allow-Origin $http_origin;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, PATCH, DELETE';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header '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';
        return 301 https://ankieta.example.com$request_uri;
}

server {
        server_name admin.example.com;
        listen 443 ssl;
        ssl_certificate /srv/ssl/14182263.pem;
        ssl_certificate_key /srv/ssl/admin_i_ankieta.example.com.key;

        ssl_protocols SSLv3 TLSv1;
        ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;

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

server {
        server_name ankieta.example.com;
        listen 443 ssl;
        ssl_certificate /srv/ssl/14182263.pem;
        ssl_certificate_key /srv/ssl/admin_i_ankieta.example.com.key;

        ssl_protocols SSLv3 TLSv1;
        ssl_ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;

        root /srv/limesurvey;
        index index.php;

        add_header 'Access-Control-Allow-Origin' $http_origin;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, PUT, PATCH, DELETE';
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header '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;

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

        location ~ /*.php$ {

                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
                include 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;
        }

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


}

นี่เป็นแอป AngularJS และแอป PHP (LimeSurvey) ซึ่งให้บริการภายใต้สองโดเมนที่แตกต่างกันโดยเว็บเซิร์ฟเวอร์เดียวกัน (Nginx) อันที่จริงแล้ว AngularJS ให้บริการโดย ConnectJS ซึ่งได้รับการรับรองโดย Nginx (ConnectJS จะฟังเฉพาะบน localhost เท่านั้น)

ใน Firefox console ฉันจะได้รับสิ่งนี้:

ขอข้ามจุดที่ถูกบล็อก: เดียวกันนโยบายกำเนิดไม่อนุญาตให้อ่านทรัพยากรระยะไกลที่ https://ankieta.example.com/admin/remotecontrol สิ่งนี้สามารถแก้ไขได้โดยการย้ายทรัพยากรไปยังโดเมนเดียวกันหรือเปิดใช้งาน CORS

ซึ่งแน่นอนว่าน่ารำคาญ เบราว์เซอร์อื่น ๆ ทำงานได้ดี (Chrome, IE)

ข้อเสนอแนะเกี่ยวกับเรื่องนี้?


คุณเคยไปกับสิ่งนี้หรือไม่? ฉันมีปัญหาเดียวกันและฉันจะวนเป็นวงกลม มันเป็นแค่ Firefox เท่านั้นและมันก็ทำให้พวกเขามีข้อผิดพลาดโง่เดียวกันโดยไม่คำนึงถึงสิ่งที่เกิดขึ้น
toxaq

ถูกต้องดังนั้นสิ่งที่ฉันทำคือฉันต้องให้สิทธิ์แบ็กเอนด์ SSL ssl สำหรับ remotecontrol api ไม่ได้รับความไว้วางใจจาก firefox (เพียงไปที่ปลายทาง / remotecontrol ปลายทางด้วย firefox และเชื่อถือใบรับรอง) ฉันยังได้รับ Nginx ล่าสุด ที่ยังไม่สามารถแก้ปัญหาได้เนื่องจาก Firefox ส่งส่วนหัว Content-Type ที่กำหนดโค้ดแบบยาก ฉันจัดการเพื่อให้มันทำงานแม้ว่าดูโพสต์นี้stackoverflow.com/questions/24465304/ …
wiherek

คำตอบ:


2

ปัญหานี้เกิดขึ้นเนื่องจาก Firefox ไม่ได้อนุญาต SSL รับรองของ API ไว้วางใจใบรับรองของไซต์โดยไปที่ปลายทางด้วย Firefox เพื่อแก้ไขปัญหาชั่วคราวขณะที่เปลี่ยนใบรับรอง - อย่างถาวร

ปัญหาส่วนหัวกับ Firefox และ LimeSurvey remotecontrol API สามารถแก้ไขได้โดยการกำหนดค่าส่วนหัวคงที่หรือส่ง blobs ตามhttps://stackoverflow.com/questions/24465304/trouble-changing-request-headers-in-firefox-with-angularjs

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.