Access-Control-Allow-Origin проблема с префиксом www

У меня есть веб-сайт, бэкэнд nginx, python, django и frontend angularjs. У меня есть политики CORS на бэкэнде, чтобы разрешить только начало внешнего интерфейса, однако я получаю сообщение об ошибке при просмотре моего последнего разработанного раздела, используя www в качестве префикса. Ошибка:

XMLHttpRequest не может загрузить http://backend.com/api/endpoint. Перенаправление с " http://backend.com/api/endpoint " на " http://backend.com/api/endpoint " было заблокировано политикой CORS: заголовок "Access-Control-Allow-Origin" имеет значение " http://frontend.com/ ", который не равен указанному источнику. Происхождение " http://www.frontend.com/ " поэтому не допускается

И то и другое www и нет, URL-адрес веб-интерфейса включен в белый список CORS. Я предположил ошибку конфигурации nginx, но сайт хорошо работает во всех разделах, кроме последнего.

РЕДАКТИРОВАТЬ

Я использую коршедеры для добавления заголовка CORS к ответам. Конфигурация для этого довольно плохая, я просто адрес белого списка

CORS_ORIGIN_WHITELIST = (
    'frontend.com',
    'www.frontend.com',
    'media.frontend.com',
    'backend.com',
)

Вот конфигурация Nginx. Мы используем PhantomJS, чтобы вернуть ботам предоставленную версию сайта

########################################################################
# Frontend AngularJS Application
########################################################################

server {
    listen 80;
    root /home/frontend/current;
    #listen 443 ssl;

    server_name frontend.com;
    #ssl_certificate /etc/nginx/ssl/frontend.com.crt;
    #ssl_certificate_key /etc/nginx/ssl/frontend.com.key;

    access_log /var/log/nginx/www.frontend.com/access.log;
    error_log  /var/log/nginx/www.frontend.com/error.log;

    keepalive_timeout 5;
    charset utf-8;

    location ~ ^/(scripts.*js|styles|images) {
        gzip_static on;
        expires 1y;
        add_header Cache-Control public;
        add_header ETag "";

        break;
    }

    location / {
        include /etc/nginx/mime.types;
        try_files $uri @phantomjs;
    }

    location @phantomjs {
        # We set control variable to 2 to be used in rewrite if a bot visits the page
        set $i 0;
        # If any of the user agent in the RegEX, we set the control variable to 1...
        if ($http_user_agent ~* "Facebot|dapulse|slack|facebook|linkedin|googlebot|yahoo|bingbot|baiduspider|yandex|yeti|yodaobot|gigabot|ia_archiver|facebookexternalhit|twitterbot|developers\.google\.com") {
            set $i 1;

        }
        # ...or if Googlebot in particular (or we appended phantomjs=1 query string for debug) 
        # we set the control variable to 1 as well
        if ($args ~ "_escaped_fragment_|phantomjs=1") {
            set $i 1;
        }
        # Then, finally, if control variable is true (set to 1) we pass the $uri to phantomjs proxy
        # $uri will be something like /some/path/to/something WITHOUT any query string argument
        if ($i = 1) {
            # rewrite .* /$scheme://$host$request_uri? break;
            rewrite .* /$uri? break;
            proxy_pass http://localhost:9999;
        }
        if ($i = 0) {
            rewrite .* /index.html?$query_string break;
        }
    }
}

########################################################################
# Media Assets
########################################################################

server {
    listen 80;
    #listen 443 ssl;

    server_name media.frontend.com;
    #ssl_certificate /etc/nginx/ssl/media.frontend.com.crt;
    #ssl_certificate_key /etc/nginx/ssl/media.frontend.com.key;

    access_log /var/log/nginx/media.frontend.com/access.log;
    error_log  /var/log/nginx/media.frontend.com/error.log;

    root /home/frontend/media;
    keepalive_timeout 5;
    charset utf-8;

    location ~ ^/(scripts.*js|styles|images) {
        gzip_static on;
        expires 1y;
        add_header Cache-Control public;
        add_header ETag "";

        break;
    }
}

########################################################################
# API & Backend Django Application
########################################################################

server {
    listen 80;
    server_name backend.com;

    location = /favicon.ico { access_log off; log_not_found off; }

    location /static/ {
        #proxy_pass http://media.frontend.com:80/;
        #root /home/frontend/media;
        alias /home/frontend/media/;
    }

    location /media/ {
        #proxy_pass http://media.frontend.com:80/;
        #root /home/frontend/media;
        alias /home/frontend/media/media/;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/backend/wsgi.sock;
    }
}

0 ответов

Другие вопросы по тегам