Nginx-Clojure — это модуль Nginx для встраивания программ Clojure или Java, обычно это обработчики на основе Ring . Это проект с открытым исходным кодом, размещенный на Github, URL сайта — ЗДЕСЬ . С его помощью мы можем разрабатывать высокопроизводительные веб-приложения Clojure / Java на Nginx без какого-либо веб-сервера Java и с рядом преимуществ:
- Статические файлы, управляемые Clojure / Java, получат почти такую же производительность со статической файловой службой Nginx.
- Мы просто развернем один сервер Nginx (скомпилированный с модулем Nginx-Clojure) вместо Nginx + некоторый веб-сервер Java, например. Tomcat, Jetty и т. Д.
- Ring Handler очень прост по сравнению с сервлетом Java
- Мы можем использовать модули Nginx, такие как GZip, Image Filter и т. Д., С нашим статическим и динамическим контентом на лету без каких-либо затрат на уровень Proxy.
- Мы можем использовать обработчик перезаписи Java + proxy_pass для очень быстрой реализации динамического прокси / балансировщика.
Существует три типичных примера написания конфигурации для обработчиков кольца:
1. Чистый обработчик Java
package my;
import static nginx.clojure.MiniConstants.CONTENT_TYPE;
import static nginx.clojure.MiniConstants.NGX_HTTP_OK;
import java.io.IOException;
import java.util.Map;
import nginx.clojure.java.ArrayMap;
import nginx.clojure.java.NginxJavaRingHandler;
public class HelloHandler implements NginxJavaRingHandler {
@Override
public Object[] invoke(Map<String, Object> request) throws IOException {
return new Object[] {
NGX_HTTP_OK, //http status 200
ArrayMap.create(CONTENT_TYPE, "text/plain"), //headers map
"Hello, Java & Nginx!" //response body can be string, File or Array/Collection of string or File
};
}
}
В nginx.conf, например.
location /java {
content_handler_type java;
content_handler_name my.HelloHandler;
}
2. Встроенный обработчик Clojure
location /clojure {
content_handler_code '
(fn[req]
{
:status 200,
:headers {"content-type" "text/plain"},
:body "Hello Clojure & Nginx!"
})
';
}
3. Внешний обработчик Clojure
(ns my.hello)
(defn hello-world [request]
{:status 200
:headers {"Content-Type" "text/plain"}
:body "Hello World"})
Вы должны установить для ваших файлов JAR clojure путь к классу, см. Путь JVM и путь к классу на веб-сайте Nginx-Clojure.
location /myClojure {
content_handler_name 'my.hello/hello-world';
}
Для получения более подробной информации о функциях nginx-clojure, пожалуйста, посетите веб-сайт https://nginx-clojure.github.io/ .
Более подробную информацию и полезные примеры для Compojure, которая представляет собой небольшую библиотеку маршрутизации для Ring, которая позволяет веб-приложениям состоять из небольших независимых частей, см. По адресу https://github.com/weavejester/compojure.
Кстати, результат простого теста производительности с Nginx-Clojure вдохновляет, более подробную информацию можно получить ЗДЕСЬ . Вот простые результаты тестирования, Nginx-Clojure почти в 6 раз быстрее, чем Nginx-Php5