Я разрабатываю приложение для интерфейса RESTful API.В настоящее время мне всегда приходится ждать примерно 2,5 секунды, пока мой локальный внутренний сервер вычислит ответ API.Это слишком долго, поэтому я начал использовать статические конечные точки с всегда одинаковым предварительно рассчитанным ответом.Время отклика снижается до 50 миллисекунд, что довольно здорово.
Но, тем не менее, у меня возникли проблемы с конфигурацией Apache 2.4 vhost.В настоящее время я использую ( только в разработке ):
Header always set Content-Type "application/json"
Header always set Access-Control-Allow-Headers "authorization, content-type"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Allow-Origin "http://domain.tld"
Header always set Access-Control-Allow-Methods "GET, POST, PUT, DELETE, OPTIONS, HEAD"
RewriteEngine on
# check if target exists on file system, if not redirect to fileNotFound.php.
# the PHP file adds some useful additional information like expected file path and name
RewriteCond %{DOCUMENT_ROOT}/$1/%{REQUEST_METHOD}_%{QUERY_STRING}.json !-f
RewriteRule ^(.*)$ http://%{SERVER_NAME}/fileNotFound.php [P,L]
# redirects requests to files if target exists on file system
# from GET www.domain.tld/api/v1.0.0/token?key=value
# to documentRoot/api/v1.0.0/token/GET_key=value.json
RewriteCond %{DOCUMENT_ROOT}/$1/%{REQUEST_METHOD}_%{QUERY_STRING}.json -f
RewriteRule ^(.*)$ http://%{SERVER_NAME}/$1/%{REQUEST_METHOD}_%{QUERY_STRING}.json [P,L]
Если я запрашиваю URI, например
GET www.domain.tld/api/v1.0.0/token?key=value
Apache должен переписать URI, чтобы использовать этот файлв файловой системе
documentRoot/api/v1.0.0/token/GET_key=value.json
проверьте, существует ли этот измененный ресурс URI и, если да, подайте его под исходным URI.Если не подать fileNotFound.php
под исходным URI.
Если я запрашиваю ресурс, который обычно существует, он работает как положено.
Проблемы с этим конфигом:
- Если я запрашиваю ресурс, который не существует, Apache через 10 минут отвечает с ошибкой прокси-сервера 502.
- Если браузер отправляет запрос OPTIONS на какой-либо ресурс, Apache отвечает с ошибкой прокси-сервера 502 после 10минут.
Я полагаю, что Apache застрял во внутреннем цикле перенаправления и через 10 минут произошел тайм-аут, что привело к ошибке 502 Proxy.