Downloads & Release History

  1. Binaries of Releases
  2. Sources of Releases

0.6.0 (2023-03-18)

  1. New Feature: #270 All handlers can be used at http & server context
  2. New Feature: #272 Support Nginx 1.23.X where some internals have been changed
  3. New Feature: #250 Support to use jdk19 built-in coroutine viz. Continuation
  4. Binaries Distribution: Built with Nginx v1.23.3
  5. Documents: Add build notes for nginx-clojure-embed

0.5.3 (2022-03-10)

  1. Bug Fix: #256 NginxClojureAsynSocket isClosed is not return correct result
  2. Binaries Distribution: Built with Nginx v1.20.2

0.5.2 (2020-12-23)

  1. Bug Fix: #234 Try to fix no response when NGX_AGAIN return at next header filter
  2. Bug Fix: #233 Fix compiler warnings when there's no zlib found
  3. Enhancement: Delayed update to improve setVariable/set-ngx-var! performance at thread-pool mode
  4. Example Project: Add an example project for Jersey & Spring DI
  5. Example Project: Add example for integration with Spring framework
  6. Binaries Distribution: Built with Nginx v1.18.0

0.5.1 (2019-11-23)

  1. Bug Fix: Connection hangs with header filter at thread-pool mode #209 #153
  2. Bug Fix: Body filter hangs when body size is larger than the value specified in proxy_buffers #219
  3. Bug Fix: Segment fault caused by request is marked as closed too late #222
  4. Code Style: Fix generic warnings in java code code-style #223 (Thanks to Michael @mgoblin)
  5. Bug Fix: NPE caused by damaged memory because unsafe modify response headers #198
  6. Bug Fix: Wrong response for uncompressed message with PMCE enabled
  7. CI: both auto-triggered unit test and integration test use travis-ci

0.5.0 (2019-10-26)

  1. New Feature: Java 9, 10, 11, 12 support. But Java 6 and Java 7 are deprecated now.
  2. New Feature: Log handler
  3. New Feature: HTTP V2 support (thanks to Nginx v1.14.2)
  4. Bug Fix: Memory leak with file handler #180
  5. Bug Fix: Zero buffer error when hijack_send empty string #181
  6. Bug Fix: Mysql driver issue about jdbc4 flag
  7. Bug Fix: ContainsKey of nginx shared map
  8. Bug Fix: NginxRequest.setVariable in a rewrite handler will hang
  9. Bug Fix: Segmentation fault on shutdown
  10. Bug Fix: Make clojure request map immutable for compojure
  11. Enhancement: API for discarding request body (request.discardRequestBody())
  12. Enhancement: Coroutine support for cascade constructor invoking
  13. Enhancement: Configurable headers/variables prefetch for more safety in multithreaded mode
  14. Binaries Distribution: built with Nginx v1.14.2

0.4.5 (2017-05-28)

  1. New Feature: Support to be compiled as Nginx dynamic module, thanks to Andrew Hutchings
  2. Bug Fix: Cannot add multiple Cookies in a response
  3. Bug Fix: Too many empty chunks are passed to Body filter & some body data lost
  4. Enhancement: [Nginx-Jersey] Support jersey application sub class
  5. Enhancement: Try to use enviroment variable JAVA_HOME to detect jvm when jvm_path is auto
  6. Enhancement: NginxSharedHashMap.keySet/values/entrySet for debug/test usage.
  7. Bug Fix: Can not use more than two shared maps.
  8. Bug Fix: NullPointerExecption will happen when multiple rewrite handlers are invoked for one request
  9. Bug Fix: Can't access ring request data in Sente handler. (content_handler_property fore-prefetch-all-properties true;)
  10. Enhancement: Compile against Nginx 1.11 & Nginx 1.12
  11. Bug Fix: Nginx reload will cause connection reset without response
  12. Bug Fix: Header filter can not change response status from upstream
  13. Bug Fix: body filters sometimes crash under thread pool mode
  14. Binaries Distribution: built with the latest stable Nginx v1.12.0 & openssl v1.1.0e

0.4.4 (2016-03-04)

  1. New Feature: experimental nginx body filter by Java/Clojure/Groovy (issue #107)
  2. New Feature: read request body by event callback (issue #109)
  3. Bug Fix: 500 (internal server error) returns when committing 2000+ files to nginx as a proxy for apache mod_dav_svn (issue #106)

0.4.3 (2015-10-25)

  1. New Feature: Add directive jvm_classpath which supports wildcard character * (issue #95)
  2. New Feature: Add directive jvm_classpath_check which is enabled by default and when it is enabled access permission about classpaths will be checked.
  3. New Feature: Add NginxPubSubTopic(Java)/PubSubTopic(Clojure) to simplify handling messages among Nginx worker processes. (issue #97)
  4. New Feature: Shared Map based on shared memory (issue #96) and it has two implementations : tinymap & hashmap.
  5. New Feature: Shared Map based Ring session store (issue #98)
  6. Enhancement: on-broadcast-event-decode!/on-broadcast! returns a removal function which can be used to remove the registered decoder/listener
  7. Enhancement: embedded nginx-clojure becomes friendly to mock tests and also fix issue #101
  8. Bug Fix: After stopping an embedded Nginx-Clojure server keep-alived connections become CLOSE_WAIT.
  9. Bug Fix: HackUtil.decode decodes unnecessary chars when several strings share one char[] generally on JDK 6
  10. Bug Fix: jvm crashes with thread pool mode when open_file_cache is enabled.
  11. Bug Fix: Fix compile errors when no sha1-implementation/zlib can be found (issue #99)
  12. Example Project: Add an example project about clojure web dev to show how to develop & deploy with Nginx-Clojure. Thanks to Peter Taoussanis without whose comments there would not be such example project. (issue #91)
  13. Documents: Add Directives Reference

0.4.2 (2015-08-31)

  1. New Feature: Support Sente (issue #87, see this PR)
  2. New Feature: Per-message Compression Extensions (PMCEs) for WebSocket (issue #88)
  3. New Feature: Add add-aggregated-listener! in HttpServerChannel to makes handling small but fragmented websocket messages easier by clojure.
  4. Enhancement: Support to build on a Linux ARM machine
  5. Bug Fix: WebSocket and Server Channel do not Work with Some Ring Middlewares (issue #89)
  6. Bug Fix: Autodetect jvm_path doesn't work sometimes

0.4.1 (2015-08-12)

  1. New Feature: Coroutine based socket supports unix domain socket
  2. New Feature: APIs for Embedding Nginx-Clojure into a standard Clojure/Java/Groovy App (issue #86)
  3. New Feature: Autodetect jvm_path (issue #85)
  4. New Feature: Support to use annotation to mark a class or method to be suspenable in coroutine context (issue #84)
  5. Enhancement: Auto send error when meets a non websocket request with auto_upgrade_ws is on
  6. Enhancement: Add websocket-upgrade! to server channel API
  7. Enhancement: Add WholeMessageAdapter to make handling small websocket messages easier.
  8. Bug Fix: NginxHttpServerChannel.write(ByteBuffer buf) does not reset the buffer's position (issue #83)
  9. Bug Fix: No access to tomcat server 8.24 from nginx-clojure (issue #82)
  10. Binaries Distribution: Including some java sources for easy debug.
  11. Build Script: Autodetect JNI header files

0.4.0 (2015-07-06)

  1. New Feature: Server Side Websocket (issue #73)
  2. New Feature: A build-in Jersey container to support java standard RESTful web services (JAX-RS 2.0) (issue #74)
  3. New Feature: Tomcat 8 embedding support (so servlet 3.1/jsp/sendfile/JSR-356 websocket work within nginx!) (issue #67)
  4. New Feature: Coroutined Based Client Socket Supports to Bind to Specified IP Address (issue #69)
  5. New Feature: Handler's Property Configuration (issue #66)
  6. Enhancement: NginxHttpServerChannel can work with Rewrite Handler or Access Handler (issue #79)
  7. Enhancement: Configurable Write Buffer Size for SSE or Websocket (issue #76)
  8. Bug Fix: When we do not configure jvm_path proxy_pass will not work (issue #72)
  9. Bug Fix: nginx worker restart when get the value of header X-Forwarded-For (issue #70)
  10. Bug Fix: proxy_cache_path causes crash (issue #64)
  11. Bug Fix: send_timeout does not take effect with NginxHttpServerChannel (issue #78)
  12. Bug Fix: Waving tool generates wrong wave information of fuzzing classes (issue #80)
  13. Documents : Release History link in README (issue #68)
  14. Binaries Distribution: built with The latest stable Nginx v1.8.0 which released at 2015-04-21.

0.3.0 (2014-12-11)

  1. Discard: Directive clojure, clojure_code are no longer supported, use handler_type/content_handler_type, handler_name/content_handler_name, handler_code/content_handler_code instead.
  2. Discard: Now handler_*** can not be used to declare a nginx worker initialization handler, use `jvm_init_handler_*** instead.
  3. New Feature: Supports writing nginx access handler by java/clojure/groovy (issue #53)
  4. New Feature: Supports writing nginx header filter by java/clojure/groovy (issue #55)
  5. New Feature: Add new directive max_balanced_tcp_connections to make nginx auto set worker_connections.
  6. Enhancement: For Java We can use r.setVariable, r.getVariable now if r is an instance of NginxJavaRequest.
  7. Deprecated Directives: handler_type, handler_name, handler_code are deprecated and maybe will be removed in the next version, add new directive content_handler_type, content_handler_code, content_handler_code
  8. New Directives: rewrite_handler_type, access_handler_type, header_filter_type, body_filter_type
  9. New Feature: Supports nested locations (issue #56)
  10. Bug Fix : uppercase letters in nginx variable name can not work (issue #54)
  11. Bug Fix: The first registered handler will not work if there's a asynchronous reading of request body (issue #51)
  12. Enhancement: handlers_lazy_init can be used to make handler initialized lazily or eagerly (issue #52)

0.2.7 (2014-11-11)

  1. New Feature: Compiling option for disabling all functions silently when JVM_PATH not configured. (issue #47)
  2. New Feature: Access request BODY in rewrite handler (issue #49)
  3. Enhancement : Optimization of encoding String to Nginx temp buffer chain to reduce Java heap memory usage and improve the performance.

0.2.6 (2014-10-10)

  1. Fix Bug: rewrite handler does not handle write event correctly with thread pool mode or coroutine mode (issue #43)
  2. Fix Bug: built-in jvm variable #{pno} doesn't work (issue #44)
  3. Fix Bug: rewrite_handler_name does not work without content handler (issue #45). Thanks Eric Kubacki for finding this bug.
  4. Fix Bug: rewrite handler does not handle write event correctly with thread pool mode or coroutine mode (issue #43)
  5. Documents : Correct some inaccuracies and add section about logging in Chapter More about Nginx-Clojure
  6. Binaries: built with The latest stable Nginx v1.6.2 which released at 2014-09-16.

0.2.5 (2014-09-07)

  1. New Feature: Reference variables in jvm_options & different jvm debug ports for jvm processes (issue #42)
  2. New Feature: Server Sent Events(SSE) & Long polling (issue #41, issue #36)
  3. New Feature: Supports 64-bit JDK on 64-bit Windows (issue #40)
  4. New Feature: Coroutine based socket supports JDK8 (issue #39)
  5. New Feature: More easier to archive Sub/Pub services with Broadcast Events to all Nginx workers (issue #39)
  6. New Feature: Asynchronous Channel a wrapper of asynchronous socket to make the usage easier (issue #37)
  7. Enhancement: Fix--On Windows a little many write events happen and these events seem useless (issue #35)

0.2.4 (2014-07-25)

  1. New Feature: Support Groovy - another dynamic jvm language (issue #34)
  2. Fix bug: Slow Memory Leak for Coroutine based Socket bug (issue #32 )
  3. Fix bug: Should Clone ThreadLocals for Coroutines (issue #31)
  4. New Feature: More friendly to java users who maybe know nothing about clojure feature (issue #29)
  5. Five new nginx directives handler_type, handler_name, handler_code, rewrite_handler_name, rewrite_handler_code. Make Clojure/Java/Groovy handler configurations have the same form. e.g. The old pair of nginx directives clojure, clojure_code is equivalent to handler_type='clojure' + handler_code.

0.2.3 (2014-07-05)

  1. Fix issue After invoking on coroutine based socket nginx worker will exit and be recreated when network is disabled (issue #26)
  2. Fix issue PATCH loses the data payload (issue #27)
  3. Support user defined http request method (issue #28 )
  4. Fix issue Nginx worker crashes when to fetch http header "authorization" from request (issue #30)

0.2.2 (2014-05-31)

  1. Fix bug of with Compojure 1.1.5 + Apache Solrj 4.3.0 + httpclient 4.3.2 NPE happens first time then everything is OK (issue #22)
  2. Verifying option for auto generated waving configurations needed by coroutine based socket (issue #23)

0.2.1 (2014-05-17)

  1. Support to close coroutine based socket from non-main thread (issue #19)
  2. Auto generated waving class configurations about Proxy InvocationHandler instance (issue #17 )
  3. Supports auto turn on thread pool mode when turning on Run Tool Mode feature (issue #16 )
  4. Fix bug of reading from coroutine based socket inputstream returns 0 when eof, should return -1 (issue #15)
  5. Handle multiple sockets parallel in sub coroutines, e.g. we can invoke two remote services at the same time feature (issue #14)
  6. Support nginx rewrite handler to set var before proxy pass (issue #3)

0.2.0 (2014-04-25)

  1. non-blocking socket based on coroutine and compatible with largely existing java library such as apache http client, mysql jdbc drivers
  2. asynchronous callback API of socket for some advanced usage
  3. run initialization clojure code when nginx worker starting
  4. provide a build-in tool to make setting of coroutine based socket easier
  5. support Linux 32bit x86 now
  6. publish binary release compiled with lastes stable nginx 1.6.0 about Linux x64, Linux i586, Win32 & MacOS X

0.1.2 (2014-02-03)

  1. fix #2 Problems with HTTP Redirect 302
  2. header names are case-insensitive now.
  3. publish binary release about Linux x64, Win32 & MacOS X

0.1.1 (2014-01-20)

  1. Supports InputStream, ISeq & recursive ISeq in Response Body.
  2. Auto maintains HTTP last-modified header for multiple files in Response Body

0.1.0 (2014-01-09)

  1. Compitiable with Ring Spec (1.1)
  2. Supports Java Thread Pool for handle request
  3. Fast Static File Service