2017-01-24 9 views
0

У меня возникла странная проблема с моим сайтом, встроенным в Rails 4. При разработке я тестировал webhook Stripe, используя Ngrok, который прошел нормально, поэтому код должен быть в порядке, но теперь на производстве Я получаю ошибки от Stripe, говоря, что он не может подключиться к webhook.Ошибка веб-камеры Stripe Не удалось подключиться

Кроме того, я хотел выполнить некоторые стресс-тесты, используя Loader.io, и после добавления хоста, когда его попросили проверить файл, который они просят загрузить в корневой каталог, он также терпит неудачу с ошибкой There was an error loading the URL.

Это как-то заставляет меня поверить, что может быть что-то не так с моей конфигурацией Nginx, даже если сайт отлично работает в браузере, у меня есть пользователи из Северной Америки и Европы, и у меня не было жалоб на таймауты или медленные скорости далеко, хотя он работает на небольшом VPS.

Вот Nginx хост файл:

server { 
    listen 80; 
    listen 443 ssl http2; 

    ssl on; 
    ssl_certificate /var/lib/acme/live/example.com/fullchain; 
    ssl_certificate_key /var/lib/acme/live/example.com/privkey; 

    # Set up preferred secure protocols and ciphers. TLS1.2 is required for HTTP/2 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; 
    ssl_prefer_server_ciphers on; 
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA; 

    root /var/www/example/public; 
    server_name example.com; 
    if ($ssl_protocol = "") { 
    rewrite ^ https://$server_name$request_uri? permanent; 
    } 
    client_max_body_size 20M; 
    passenger_enabled on; 
    rails_env production; 

    # For issuing https certificates 
    location ^~ /.well-known/acme-challenge/ { 
    alias /var/www/acme-challenge/.well-known/acme-challenge/; 
    } 

    location ~* ^/assets/ { 
    # Per RFC2616 - 1 year maximum expiry 
    # http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html 
    expires 1y; 
    add_header Cache-Control public; 

    # Some browsers still send conditional-GET requests if there's a 
    # Last-Modified header or an ETag header even if they haven't 
    # reached the expiry date sent in the Expires header. 
    add_header Last-Modified ""; 
    add_header ETag ""; 
    break; 
    } 
} 

А вот Rails часть

Маршруты

match 'stripe/webhook' => 'stripe#webhook', via: [:post, :get], as: :stripe_webhook 

Контроллер

class StripeController < ApplicationController 

    protect_from_forgery :except => [:subscription, :webhook] #Otherwise the request from Stripe wouldn't make it to the controller 
    skip_before_action :require_login, only: [:webhook] 

    def webhook 
    Stripe.api_key = 'SECRET' 

    begin 
     event_json = JSON.parse(request.body.read) 

     #make sure this is the real deal by verifying the event by fetching it from Stripe 
     if event.has_key?("id") 
     event = Stripe::Event.retrieve(event_json["id"]) 

     txt = 'OK' 
     handle_transaction(event) 
     else 
     txt = 'ERROR' 
     end 
     render plain: txt, layout: false, status: 200 
    rescue => e 
     Rails.logger.info "===================== ERROR ===================" 
     Rails.logger.info e.inspect 
     render plain: 'ERROR', layout: false, status: 500 
    end 
    end 

    #rest of the actions and private methods 
    #(...) 

end 

Любая идея, почему это происходит?

ответ

0

Оказалось, что проблема была на уровне хостинг-провайдера, им пришлось переименовывать IP-адреса из полосы.

В случае, если кому-то это понадобится, IP-адреса могут быть найдены https://stripe.com/files/ips/ips_webhooks.txt.