Контроль доступа Allow Origin для нескольких доменов - PullRequest
0 голосов
/ 25 апреля 2019

У меня есть и REST API в PHP, и я хочу разрешить нескольким доменам доступ к API. Проблема в том, что у меня есть ошибки кросс-происхождения, и я добавляю add_header 'Access-Control-Allow-Origin' https://example.com; Но я хочу добавить несколько доменов. Если я сделал и запрос с example2.com на мой API, он не будет работать. Я пытаюсь найти решение в Интернете, но я не нахожу ничего, что сработало.

В попытке: (из примера https://qa.lsproc.com/post/access-control-allow-origin-multiple-origin-domains), но мне нужно удалить \.com$, потому что мне нужно больше гибкости.

    set $cors "false";
    if ($http_origin ~* (^http?://([^/]+\.)*(example.com|example2.com)$)) {
        set $cors "true";
    }

    if ($cors = "true") {
        # Catch all incase there's a request method we're not dealing with properly
        add_header 'Access-Control-Allow-Origin' "$http_origin";
    }

Я пытаюсь: https://serverfault.com/questions/350330/nginx-add-header-adding-multiple-headers https://serverfault.com/questions/958965/nginx-enabling-cors-for-multiple-subdomains

Но я не могу заставить его работать, а также я получил Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details. , если я добавлю if ($cors = "true") {

мой файл nginx

server {
    listen 80;
    listen 443 ssl http2;
    server_name .api.homestead;
    root "/home/vagrant/api/public";

    index index.html index.htm index.php;

    charset utf-8;

    set $cors "false";
    if ($http_origin ~* (^http?://([^/]+\.)*(domain.com|localhost:8080))) {
        set $cors "true";
    }

    if ($cors = "true") {
        # Catch all incase there's a request method we're not dealing with properly
        add_header 'Access-Control-Allow-Origin' "$http_origin";
    }



    location / {
        allow 192.168.10.1;
        deny all;

        try_files $uri $uri/ /index.php?$query_string;

        add_header 0 false;
    }




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

    access_log off;
    error_log  /var/log/nginx/api.homestead-error.log error;

    sendfile off;

    client_max_body_size 100m;

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.3-fpm.sock;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;


        fastcgi_intercept_errors off;
        fastcgi_buffer_size 16k;
        fastcgi_buffers 4 16k;
        fastcgi_connect_timeout 300;
        fastcgi_send_timeout 300;
        fastcgi_read_timeout 300;
    }

    location ~ /\.ht {
        deny all;
    }

    ssl_certificate     /etc/nginx/ssl/api.homestead.crt;
    ssl_certificate_key /etc/nginx/ssl/api.homestead.key;
}


...