Nginx Enable CORS для вызова API Google Places

Я хотел бы включить CORS для Google Places API, чтобы вызвать его из приложения Ionic 2 с WkWebView.

Я делаю это в моей конфигурации nginx по умолчанию:

server {
    listen 80 default_server;
    listen [::]:80 default_server;


    root /var/www/html;

    server_name _;

    location / {
    proxy_redirect off;
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    # Nginx doesn't support nested If statements, so we
    # concatenate compound conditions on the $cors variable
    # and process later

    # If request comes from allowed subdomain
    # (*.googleapis.com) then we enable CORS
    if ($http_origin ~* (https?://.*.googleapis.com(:[0-9]+)?$)) {
       set $cors "1";
    }

    # OPTIONS indicates a CORS pre-flight request
    if ($request_method = 'OPTIONS') {
       set $cors "${cors}o";
    }

    # Append CORS headers to any request from 
    # allowed CORS domain, except OPTIONS
    if ($cors = "1") {
       more_set_headers 'Access-Control-Allow-Origin: $http_origin' always;
       more_set_headers 'Access-Control-Allow-Credentials: true' always;
       proxy_pass      http://111.111.111.111:80;
    }

    # OPTIONS (pre-flight) request from allowed 
    # CORS domain. return response directly
    if ($cors = "1o") {
       more_set_headers 'Access-Control-Allow-Origin: $http_origin';
       more_set_headers 'Access-Control-Allow-Methods: GET, POST, OPTIONS, PUT, DELETE';
       more_set_headers 'Access-Control-Allow-Credentials: true';
       more_set_headers 'Access-Control-Allow-Headers: Origin,Content-Type,Accept';
       add_header Content-Length 0;
       add_header Content-Type text/plain;
       return 204;
    }

    # Requests from non-allowed CORS domains
       proxy_pass      http://111.111.111.111:80;
  }

}

Но я получаю 502 плохих шлюза каждый раз, когда я звоню:

http://111.111.111.111/maps/api/place/textsearch/json?key=APIKEY&query=starbucks

Какая-нибудь помощь, пожалуйста?

1 ответ

  1. Хорошо, я нашел мой mystake, proxy_pass должен перенаправить на google не на мой сервер:

    server {
        listen 80 default_server;
        listen [::]:80 default_server;
    
        root /var/www/html;
    
        server_name _;
    
        #location / {
        #   # First attempt to serve request as file, then
        #   # as directory, then fall back to displaying a 404.
        #   try_files $uri $uri/ =404;
        #}
    
        location / {
         proxy_pass https://maps.googleapis.com;
         add_header 'Access-Control-Allow-Origin' '*' always;
         add_header 'Access-Control-Allow-Methods' 'POST,GET,OPTIONS' always;
    
             #preflight request
         if ($request_method = 'OPTIONS') {
           add_header 'Access-Control-Max-Age' '1728000';
           add_header 'Content-Type' 'text/plain charset=UTF-8';
           add_header 'Content-Length' '0';
    
           add_header 'Access-Control-Allow-Origin' '*' always;
             add_header 'Access-Control-Allow-Methods' 'POST,GET,OPTIONS' always;
           return 204;
         }
       }    
    }
    
    # Virtual Host configuration for example.com
    #
    # You can move that to a different file under sites-available/ and symlink that
    # to sites-enabled/ to enable it.
    #
    #server {
    #   listen 80;
    #   listen [::]:80;
    #
    #   server_name example.com;
    #
    #   root /var/www/example.com;
    #   index index.html;
    #
    #   location / {
    #       try_files $uri $uri/ =404;
    #   }
    #}