У меня возникла странная проблема с моим сайтом, встроенным в 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
Любая идея, почему это происходит?