Skip to content

Commit 22126ef

Browse files
committed
update examples for v0.3.0
1 parent ca5409f commit 22126ef

17 files changed

+597
-335
lines changed

.settings/ccw.repl.cmdhistory.prefs

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
1-
cmdhistory=["(render-md-file \\"/home/who/git/nginx-clojure.github.io/HISTORY.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\" )" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\" )" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\" )" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/HISTORY.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/HISTORY.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/QuickStart.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/CoreFeatures.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/Installation.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/More.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/QuickStart.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/UserfullLinks.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/More.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/QuickStart.md\\")" "(render-md-file \\"/home/who/git/workflow-server/README.md\\")" " (render-md-file \\"/home/who/git/workflow-server/README.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/CoreFeatures.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/CoreFeatures.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/HISTORY.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/CoreFeatures.md\\")"]
1+
cmdhistory=["(render-md-file \\"/home/who/git/nginx-clojure.github.io/HISTORY.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\" )" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\" )" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\" )" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/HISTORY.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/HISTORY.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/QuickStart.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/CoreFeatures.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/Installation.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/More.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/QuickStart.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/UserfullLinks.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/More.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/QuickStart.md\\")" "(render-md-file \\"/home/who/git/workflow-server/README.md\\")" " (render-md-file \\"/home/who/git/workflow-server/README.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/CoreFeatures.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/CoreFeatures.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/HISTORY.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\")" " (render-md-file \\"/home/who/git/nginx-clojure.github.io/Configuration.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/CoreFeatures.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/Installation.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/QuickStart.md\\")" "(render-md-file \\"/home/who/git/nginx-clojure.github.io/More.md\\")" "(render-md-file \\"Configuration.md\\")" " (render-md-file \\"HISTORY.md\\")" "(render-md-file \\"CoreFeatures.md\\")" "(render-md-file \\"Installation.md\\")" "(render-md-file \\"More.md\\")" "(render-md-file \\"QuickStart.md\\")" "(render-md-file \\"Installation.md\\")" " (render-md-file \\"Installation.md\\")" "(doseq [f (file-seq \\".\\")]\\n (println f))" " (doseq [f (file-seq (clojure.java.io/file \\".\\"))]\\n (println f))" "( render-all-updated \\".\\")"]
22
eclipse.preferences.version=1

Configuration.md

+110
Original file line numberDiff line numberDiff line change
@@ -637,6 +637,116 @@ We also added an example(for unit testing) about this, in nginx.conf
637637

638638
The example java rewrite handler code can be found from https://github.com/nginx-clojure/nginx-clojure/blob/master/test/java/nginx/clojure/java/RewriteHandlerTestSet4NginxJavaRingHandler.java#L35
639639

640+
641+
2.6 Nginx Access Handler
642+
-----------------
643+
644+
Although we can do similar things within a rewrite handler but using Nginx Access Handler will further define roles of all kind of handlers.
645+
Nginx Access Handler will run after Rewrite Handler and before Content Handler (e.g. general content ring handler , proxy_pass, etc.).
646+
Access Handler has the same form with Rewrite Handler. When it returns `PHASE_DONE`, nginx will continue the next phase otherwise nginx will response
647+
directly typically with some error information , e.g. `401 Unauthorized`, `403 Forbidden` .
648+
e.g.
649+
650+
```nginx
651+
652+
location /basicAuth {
653+
handler_type 'java';
654+
access_handler_name 'my.BasicAuthHandler';
655+
....
656+
}
657+
```
658+
659+
```java
660+
661+
/**
662+
* This is an example of HTTP basic Authentication.
663+
* It will require visitor to input a user name (xfeep) and password (hello!)
664+
* otherwise it will return 401 Unauthorized or BAD USER & PASSWORD
665+
*/
666+
public class BasicAuthHandler implements NginxJavaRingHandler {
667+
668+
@Override
669+
public Object[] invoke(Map<String, Object> request) {
670+
String auth = (String) ((Map)request.get(HEADERS)).get("authorization");
671+
if (auth == null) {
672+
return new Object[] { 401, ArrayMap.create("www-authenticate", "Basic realm=\"Secure Area\""),
673+
"<HTML><BODY><H1>401 Unauthorized.</H1></BODY></HTML>" };
674+
}
675+
String[] up = new String(DatatypeConverter.parseBase64Binary(auth.substring("Basic ".length())), DEFAULT_ENCODING).split(":");
676+
if (up[0].equals("xfeep") && up[1].equals("hello!")) {
677+
return PHASE_DONE;
678+
}
679+
return new Object[] { 401, ArrayMap.create("www-authenticate", "Basic realm=\"Secure Area\""),
680+
"<HTML><BODY><H1>401 Unauthorized BAD USER & PASSWORD.</H1></BODY></HTML>" };
681+
}
682+
}
683+
```
684+
685+
2.7 Niginx Header Filter
686+
-----------------
687+
688+
We can use Nginx Header Filter written by Java/Clojure/Groovy to do some useful things, e.g.
689+
690+
1. monitor the time cost of requests processed
691+
1. modify the response header dynamically
692+
1. write user defined log
693+
694+
Header Filter Access Handler has the same return form with Rewrite Handler/ Access Handler.
695+
When it returns `PHASE_DONE`, nginx will continue the next phase otherwise nginx will response
696+
directly typically with some error information a.
697+
698+
For Java/Groovy
699+
700+
```nginx
701+
location /javafilter {
702+
handler_type 'java';
703+
header_filter_name 'my.AddMoreHeaders';
704+
..................
705+
}
706+
```
707+
708+
```java
709+
package my;
710+
711+
import nginx.clojure.java.NginxJavaRingHandler;
712+
import nginx.clojure.java.Constants;
713+
714+
public class RemoveAndAddMoreHeaders implements NginxJavaHeaderFilter {
715+
@Override
716+
public Object[] doFilter(int status, Map<String, Object> request, Map<String, Object> responseHeaders) {
717+
responseHeaders.remove("Content-Type");
718+
responseHeaders.put("Content-Type", "text/html");
719+
responseHeaders.put("Xfeep-Header", "Hello2!");
720+
responseHeaders.put("Server", "My-Test-Server");
721+
return Constants.PHASE_DONE;
722+
}
723+
}
724+
```
725+
726+
For Clojure
727+
728+
```nginx
729+
location /javafilter {
730+
handler_type 'clojure';
731+
header_filter_name 'my/remove-and-add-more-headers';
732+
..................
733+
}
734+
```
735+
736+
```clojure
737+
(ns my
738+
(:use [nginx.clojure.core])
739+
(:require [clj-http.client :as client]))
740+
741+
(defn remove-and-add-more-headers
742+
[status request response-headers]
743+
(dissoc! response-headers "Content-Type")
744+
(assoc! response-headers "Content-Type" "text/html")
745+
(assoc! response-headers "Xfeep-Header" "Hello2!")
746+
(assoc! response-headers "Server" "My-Test-Server")
747+
phase-done)
748+
```
749+
640750
[nginx-clojure broadcast API]: https://github.com/nginx-clojure/nginx-clojure/issues/38
641751
[SharedHashMap/Chronicle-Map]: https://github.com/OpenHFT/Chronicle-Map
642752
[Asynchronous Socket/Channel]: more.html#user-content-36-asynchronous-channel

0 commit comments

Comments
 (0)