Разрешение удаленного доступа к API (Nginx / Openresty) через заголовок Access-Control-Allow-Origine - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть API, обслуживаемый Nginx (релиз Openresty), работающий на http://v1.api.macamera.be/

Когда мое приложение внешнего интерфейса (Vue2), запущенное на моем настольном компьютере, запрашивает GET из моего API, на веб-странице отображается следующая «Ошибка сети».

Вывод на консоль:

Failed to load http://v1.api.macamera.be/event/:
No Access-Control-Allow-Origin' header is present on the requested resource.
Origin 'http://127.0.0.1:8081' is therefore not allowed access.

Openresty является выпуском по умолчанию со встроенным модулем 'headers-more-nginx-module-0.33'

Что я пытался решить проблему:

server {
    listen       80;
#    listen 443 ssl;

    server_name  v1.api.macamera.be;
#    server_name 127.0.0.1;

#        include snippets/ssl-params.conf;
#        ssl_certificate /etc/letsencrypt/live/v1.api.macamera.be/fullchain.pem;
#        ssl_certificate_key /etc/letsencrypt/live/v1.api.macamera.be/privkey.pem;

        root /data/sites/v1.api.macamera.be;

        access_log /data/sites/v1.api.macamera.be/logs/access.log;
        error_log /data/sites/v1.api.macamera.be/logs/error.log;

        # pour éviter les erreurs network dans les browsers (à afiner + tard!!):
#       add_header 'Access-Control-Allow-Origin' '*';
#       add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        #more_set_headers    'Access-Control-Allow-Origin: *';
        more_set_input_headers "Access-Control-Allow-Origin: *";

    location /event {
      postgres_pass macamera;
      rds_json on;
      postgres_query    HEAD GET  "SELECT * FROM event";

      postgres_escape $event_id $arg_event_id;
      postgres_escape $camera_id $arg_camera_id;
      postgres_escape $date $arg_date;
      postgres_escape $file  $arg_file;
      postgres_query
        POST "INSERT INTO event (event_id, camera_id, date, file) VALUES($event_id, $camera_id, $date, $file) RETURNING *";
      postgres_rewrite  POST changes 201;
    }

    location ~ /event/(?<event_id>\d+) {
      postgres_pass macamera;
      rds_json  on;
      postgres_escape $escaped_event_id $event_id;
      postgres_query    HEAD GET  "SELECT * FROM event WHERE event_id=$escaped_event_id";
      postgres_rewrite  HEAD GET  no_rows 410;

      postgres_escape $title $arg_title;
      postgres_escape $body  $arg_body;
      postgres_query
        PUT "UPDATE articles SET title=$title, body=$body WHERE id=2 RETURNING *";
      postgres_rewrite  PUT no_changes 410;

#      postgres_query    DELETE  "DELETE FROM articles WHERE id=$escaped_id";
      postgres_query    DELETE  "DELETE FROM articles WHERE id=3";
      postgres_rewrite  DELETE  no_changes 410;
      postgres_rewrite  DELETE  changes 204;
    }

}

Несмотря на мои "more_set_headers 'Access-Control-Allow-Origin: *';" директива, я все еще получаю ошибку.

Вот некоторая отладочная информация из действия GET:

Network Error debug:

1 Ответ

0 голосов
/ 12 сентября 2018

Решено движением

more_set_headers    'Access-Control-Allow-Origin: *';

от области расположения к области сервера. Все еще заинтересованы в понимании того, почему openresty не принимает эту директиву в соответствии с местоположением. Согласно документации это должно

...