presently 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (215) hide show
  1. checksums.yaml +7 -0
  2. data/bin/presently +13 -0
  3. data/lib/presently/application.rb +104 -0
  4. data/lib/presently/clock.rb +77 -0
  5. data/lib/presently/display_view.rb +73 -0
  6. data/lib/presently/environment/application.rb +62 -0
  7. data/lib/presently/page.rb +38 -0
  8. data/lib/presently/page.xrb +31 -0
  9. data/lib/presently/presentation.rb +72 -0
  10. data/lib/presently/presentation_controller.rb +181 -0
  11. data/lib/presently/presenter_view.rb +264 -0
  12. data/lib/presently/slide.rb +148 -0
  13. data/lib/presently/slide_view.rb +92 -0
  14. data/lib/presently/state.rb +66 -0
  15. data/lib/presently/version.rb +9 -0
  16. data/lib/presently.rb +9 -0
  17. data/license.md +21 -0
  18. data/public/_components/@socketry/syntax/Syntax/CodeElement.js +337 -0
  19. data/public/_components/@socketry/syntax/Syntax/Errors.js +52 -0
  20. data/public/_components/@socketry/syntax/Syntax/Language/apache.js +49 -0
  21. data/public/_components/@socketry/syntax/Syntax/Language/applescript.js +157 -0
  22. data/public/_components/@socketry/syntax/Syntax/Language/assembly.js +42 -0
  23. data/public/_components/@socketry/syntax/Syntax/Language/bash-script.js +108 -0
  24. data/public/_components/@socketry/syntax/Syntax/Language/bash.js +32 -0
  25. data/public/_components/@socketry/syntax/Syntax/Language/basic.js +232 -0
  26. data/public/_components/@socketry/syntax/Syntax/Language/c++.js +1 -0
  27. data/public/_components/@socketry/syntax/Syntax/Language/c.js +1 -0
  28. data/public/_components/@socketry/syntax/Syntax/Language/clang.js +201 -0
  29. data/public/_components/@socketry/syntax/Syntax/Language/cpp.js +1 -0
  30. data/public/_components/@socketry/syntax/Syntax/Language/csharp.js +166 -0
  31. data/public/_components/@socketry/syntax/Syntax/Language/css.js +244 -0
  32. data/public/_components/@socketry/syntax/Syntax/Language/diff.js +24 -0
  33. data/public/_components/@socketry/syntax/Syntax/Language/go.js +135 -0
  34. data/public/_components/@socketry/syntax/Syntax/Language/haskell.js +110 -0
  35. data/public/_components/@socketry/syntax/Syntax/Language/html.js +69 -0
  36. data/public/_components/@socketry/syntax/Syntax/Language/io.js +68 -0
  37. data/public/_components/@socketry/syntax/Syntax/Language/java.js +134 -0
  38. data/public/_components/@socketry/syntax/Syntax/Language/javascript.js +89 -0
  39. data/public/_components/@socketry/syntax/Syntax/Language/json.js +36 -0
  40. data/public/_components/@socketry/syntax/Syntax/Language/lisp.js +38 -0
  41. data/public/_components/@socketry/syntax/Syntax/Language/lua.js +87 -0
  42. data/public/_components/@socketry/syntax/Syntax/Language/markdown.js +112 -0
  43. data/public/_components/@socketry/syntax/Syntax/Language/nginx.js +37 -0
  44. data/public/_components/@socketry/syntax/Syntax/Language/objective-c.js +1 -0
  45. data/public/_components/@socketry/syntax/Syntax/Language/ocaml.js +225 -0
  46. data/public/_components/@socketry/syntax/Syntax/Language/pascal.js +166 -0
  47. data/public/_components/@socketry/syntax/Syntax/Language/patch.js +2 -0
  48. data/public/_components/@socketry/syntax/Syntax/Language/perl5.js +317 -0
  49. data/public/_components/@socketry/syntax/Syntax/Language/php-script.js +112 -0
  50. data/public/_components/@socketry/syntax/Syntax/Language/php.js +18 -0
  51. data/public/_components/@socketry/syntax/Syntax/Language/plain.js +20 -0
  52. data/public/_components/@socketry/syntax/Syntax/Language/protobuf.js +77 -0
  53. data/public/_components/@socketry/syntax/Syntax/Language/python.js +208 -0
  54. data/public/_components/@socketry/syntax/Syntax/Language/ruby.js +124 -0
  55. data/public/_components/@socketry/syntax/Syntax/Language/scala.js +81 -0
  56. data/public/_components/@socketry/syntax/Syntax/Language/smalltalk.js +30 -0
  57. data/public/_components/@socketry/syntax/Syntax/Language/sql.js +865 -0
  58. data/public/_components/@socketry/syntax/Syntax/Language/super-collider.js +70 -0
  59. data/public/_components/@socketry/syntax/Syntax/Language/swift.js +176 -0
  60. data/public/_components/@socketry/syntax/Syntax/Language/xml.js +76 -0
  61. data/public/_components/@socketry/syntax/Syntax/Language/xrb.js +33 -0
  62. data/public/_components/@socketry/syntax/Syntax/Language/yaml.js +29 -0
  63. data/public/_components/@socketry/syntax/Syntax/Language.js +276 -0
  64. data/public/_components/@socketry/syntax/Syntax/Loader.js +78 -0
  65. data/public/_components/@socketry/syntax/Syntax/Match.js +546 -0
  66. data/public/_components/@socketry/syntax/Syntax/Rule.js +306 -0
  67. data/public/_components/@socketry/syntax/Syntax.js +356 -0
  68. data/public/_components/@socketry/syntax/bin/syntax-ast.js +42 -0
  69. data/public/_components/@socketry/syntax/examples/_template.html +53 -0
  70. data/public/_components/@socketry/syntax/examples/apache.html +72 -0
  71. data/public/_components/@socketry/syntax/examples/applescript.html +72 -0
  72. data/public/_components/@socketry/syntax/examples/assembly.html +74 -0
  73. data/public/_components/@socketry/syntax/examples/bash.html +90 -0
  74. data/public/_components/@socketry/syntax/examples/basic.html +87 -0
  75. data/public/_components/@socketry/syntax/examples/c.html +141 -0
  76. data/public/_components/@socketry/syntax/examples/clang.html +202 -0
  77. data/public/_components/@socketry/syntax/examples/csharp.html +110 -0
  78. data/public/_components/@socketry/syntax/examples/css-colors.html +179 -0
  79. data/public/_components/@socketry/syntax/examples/custom-theme.html +155 -0
  80. data/public/_components/@socketry/syntax/examples/diff.html +142 -0
  81. data/public/_components/@socketry/syntax/examples/examples.css +216 -0
  82. data/public/_components/@socketry/syntax/examples/go.html +413 -0
  83. data/public/_components/@socketry/syntax/examples/haskell.html +373 -0
  84. data/public/_components/@socketry/syntax/examples/html.html +316 -0
  85. data/public/_components/@socketry/syntax/examples/index.html +97 -0
  86. data/public/_components/@socketry/syntax/examples/io.html +552 -0
  87. data/public/_components/@socketry/syntax/examples/java.html +786 -0
  88. data/public/_components/@socketry/syntax/examples/javascript.html +199 -0
  89. data/public/_components/@socketry/syntax/examples/json.html +150 -0
  90. data/public/_components/@socketry/syntax/examples/lisp.html +476 -0
  91. data/public/_components/@socketry/syntax/examples/lua.html +737 -0
  92. data/public/_components/@socketry/syntax/examples/markdown.html +121 -0
  93. data/public/_components/@socketry/syntax/examples/mixed.html +306 -0
  94. data/public/_components/@socketry/syntax/examples/nginx.html +554 -0
  95. data/public/_components/@socketry/syntax/examples/ocaml.html +596 -0
  96. data/public/_components/@socketry/syntax/examples/pascal.html +762 -0
  97. data/public/_components/@socketry/syntax/examples/perl5.html +488 -0
  98. data/public/_components/@socketry/syntax/examples/php-script.html +142 -0
  99. data/public/_components/@socketry/syntax/examples/php.html +95 -0
  100. data/public/_components/@socketry/syntax/examples/plain.html +222 -0
  101. data/public/_components/@socketry/syntax/examples/protobuf.html +405 -0
  102. data/public/_components/@socketry/syntax/examples/python.html +82 -0
  103. data/public/_components/@socketry/syntax/examples/readme.md +79 -0
  104. data/public/_components/@socketry/syntax/examples/ruby.html +58 -0
  105. data/public/_components/@socketry/syntax/examples/scala.html +41 -0
  106. data/public/_components/@socketry/syntax/examples/smalltalk.html +436 -0
  107. data/public/_components/@socketry/syntax/examples/sql.html +373 -0
  108. data/public/_components/@socketry/syntax/examples/super-collider.html +55 -0
  109. data/public/_components/@socketry/syntax/examples/swift.html +176 -0
  110. data/public/_components/@socketry/syntax/examples/wrap-demo.html +103 -0
  111. data/public/_components/@socketry/syntax/examples/xml.html +112 -0
  112. data/public/_components/@socketry/syntax/examples/xrb.html +37 -0
  113. data/public/_components/@socketry/syntax/examples/yaml.html +72 -0
  114. data/public/_components/@socketry/syntax/license.md +21 -0
  115. data/public/_components/@socketry/syntax/package-lock.json +834 -0
  116. data/public/_components/@socketry/syntax/package.json +43 -0
  117. data/public/_components/@socketry/syntax/readme.md +162 -0
  118. data/public/_components/@socketry/syntax/test/Syntax/CodeElement.js +306 -0
  119. data/public/_components/@socketry/syntax/test/Syntax/ErrorHandling.js +85 -0
  120. data/public/_components/@socketry/syntax/test/Syntax/Language/apache.js +153 -0
  121. data/public/_components/@socketry/syntax/test/Syntax/Language/applescript.js +198 -0
  122. data/public/_components/@socketry/syntax/test/Syntax/Language/assembly.js +209 -0
  123. data/public/_components/@socketry/syntax/test/Syntax/Language/bash-script.js +225 -0
  124. data/public/_components/@socketry/syntax/test/Syntax/Language/bash.js +162 -0
  125. data/public/_components/@socketry/syntax/test/Syntax/Language/basic.js +265 -0
  126. data/public/_components/@socketry/syntax/test/Syntax/Language/clang.js +390 -0
  127. data/public/_components/@socketry/syntax/test/Syntax/Language/csharp.js +436 -0
  128. data/public/_components/@socketry/syntax/test/Syntax/Language/css.js +431 -0
  129. data/public/_components/@socketry/syntax/test/Syntax/Language/diff.js +206 -0
  130. data/public/_components/@socketry/syntax/test/Syntax/Language/go.js +386 -0
  131. data/public/_components/@socketry/syntax/test/Syntax/Language/haskell.js +454 -0
  132. data/public/_components/@socketry/syntax/test/Syntax/Language/html.js +111 -0
  133. data/public/_components/@socketry/syntax/test/Syntax/Language/io.js +229 -0
  134. data/public/_components/@socketry/syntax/test/Syntax/Language/java.js +362 -0
  135. data/public/_components/@socketry/syntax/test/Syntax/Language/javascript.js +101 -0
  136. data/public/_components/@socketry/syntax/test/Syntax/Language/json.js +101 -0
  137. data/public/_components/@socketry/syntax/test/Syntax/Language/lisp.js +224 -0
  138. data/public/_components/@socketry/syntax/test/Syntax/Language/lua.js +307 -0
  139. data/public/_components/@socketry/syntax/test/Syntax/Language/markdown.js +163 -0
  140. data/public/_components/@socketry/syntax/test/Syntax/Language/nginx.js +267 -0
  141. data/public/_components/@socketry/syntax/test/Syntax/Language/ocaml.js +299 -0
  142. data/public/_components/@socketry/syntax/test/Syntax/Language/pascal.js +311 -0
  143. data/public/_components/@socketry/syntax/test/Syntax/Language/perl5.js +333 -0
  144. data/public/_components/@socketry/syntax/test/Syntax/Language/php-script.js +197 -0
  145. data/public/_components/@socketry/syntax/test/Syntax/Language/php.js +92 -0
  146. data/public/_components/@socketry/syntax/test/Syntax/Language/plain.js +327 -0
  147. data/public/_components/@socketry/syntax/test/Syntax/Language/protobuf.js +294 -0
  148. data/public/_components/@socketry/syntax/test/Syntax/Language/python.js +213 -0
  149. data/public/_components/@socketry/syntax/test/Syntax/Language/ruby.js +70 -0
  150. data/public/_components/@socketry/syntax/test/Syntax/Language/scala.js +75 -0
  151. data/public/_components/@socketry/syntax/test/Syntax/Language/smalltalk.js +223 -0
  152. data/public/_components/@socketry/syntax/test/Syntax/Language/sql.js +281 -0
  153. data/public/_components/@socketry/syntax/test/Syntax/Language/super-collider.js +66 -0
  154. data/public/_components/@socketry/syntax/test/Syntax/Language/swift.js +71 -0
  155. data/public/_components/@socketry/syntax/test/Syntax/Language/xml.js +170 -0
  156. data/public/_components/@socketry/syntax/test/Syntax/Language/xrb.js +57 -0
  157. data/public/_components/@socketry/syntax/test/Syntax/Language/yaml.js +123 -0
  158. data/public/_components/@socketry/syntax/test/Syntax/Language.js +62 -0
  159. data/public/_components/@socketry/syntax/test/Syntax/Match.js +40 -0
  160. data/public/_components/@socketry/syntax/test/Syntax/Rule.js +251 -0
  161. data/public/_components/@socketry/syntax/test/Syntax.js +38 -0
  162. data/public/_components/@socketry/syntax/test/helpers/ast-matcher.js +90 -0
  163. data/public/_components/@socketry/syntax/themes/base/apache.css +1 -0
  164. data/public/_components/@socketry/syntax/themes/base/applescript.css +1 -0
  165. data/public/_components/@socketry/syntax/themes/base/assembly.css +1 -0
  166. data/public/_components/@socketry/syntax/themes/base/bash.css +1 -0
  167. data/public/_components/@socketry/syntax/themes/base/basic.css +1 -0
  168. data/public/_components/@socketry/syntax/themes/base/c.css +1 -0
  169. data/public/_components/@socketry/syntax/themes/base/clang.css +0 -0
  170. data/public/_components/@socketry/syntax/themes/base/csharp.css +1 -0
  171. data/public/_components/@socketry/syntax/themes/base/css.css +22 -0
  172. data/public/_components/@socketry/syntax/themes/base/diff.css +48 -0
  173. data/public/_components/@socketry/syntax/themes/base/go.css +1 -0
  174. data/public/_components/@socketry/syntax/themes/base/haskell.css +1 -0
  175. data/public/_components/@socketry/syntax/themes/base/html.css +1 -0
  176. data/public/_components/@socketry/syntax/themes/base/io.css +1 -0
  177. data/public/_components/@socketry/syntax/themes/base/java.css +1 -0
  178. data/public/_components/@socketry/syntax/themes/base/javascript.css +1 -0
  179. data/public/_components/@socketry/syntax/themes/base/json.css +41 -0
  180. data/public/_components/@socketry/syntax/themes/base/lisp.css +1 -0
  181. data/public/_components/@socketry/syntax/themes/base/lua.css +1 -0
  182. data/public/_components/@socketry/syntax/themes/base/markdown.css +16 -0
  183. data/public/_components/@socketry/syntax/themes/base/nginx.css +1 -0
  184. data/public/_components/@socketry/syntax/themes/base/ocaml.css +1 -0
  185. data/public/_components/@socketry/syntax/themes/base/pascal.css +1 -0
  186. data/public/_components/@socketry/syntax/themes/base/perl5.css +1 -0
  187. data/public/_components/@socketry/syntax/themes/base/php-script.css +1 -0
  188. data/public/_components/@socketry/syntax/themes/base/php.css +1 -0
  189. data/public/_components/@socketry/syntax/themes/base/plain.css +1 -0
  190. data/public/_components/@socketry/syntax/themes/base/protobuf.css +1 -0
  191. data/public/_components/@socketry/syntax/themes/base/python.css +1 -0
  192. data/public/_components/@socketry/syntax/themes/base/ruby.css +23 -0
  193. data/public/_components/@socketry/syntax/themes/base/scala.css +3 -0
  194. data/public/_components/@socketry/syntax/themes/base/smalltalk.css +1 -0
  195. data/public/_components/@socketry/syntax/themes/base/sql.css +1 -0
  196. data/public/_components/@socketry/syntax/themes/base/super-collider.css +33 -0
  197. data/public/_components/@socketry/syntax/themes/base/swift.css +1 -0
  198. data/public/_components/@socketry/syntax/themes/base/syntax.css +63 -0
  199. data/public/_components/@socketry/syntax/themes/base/xml.css +1 -0
  200. data/public/_components/@socketry/syntax/themes/base/xrb.css +29 -0
  201. data/public/_components/@socketry/syntax/themes/base/yaml.css +1 -0
  202. data/public/_components/@socketry/syntax/themes/theming.md +233 -0
  203. data/public/_components/@socketry/syntax/update-examples.js +135 -0
  204. data/public/_static/index.css +593 -0
  205. data/public/application.js +147 -0
  206. data/readme.md +69 -0
  207. data/releases.md +3 -0
  208. data/templates/code.xrb +12 -0
  209. data/templates/default.xrb +5 -0
  210. data/templates/image.xrb +8 -0
  211. data/templates/section.xrb +5 -0
  212. data/templates/title.xrb +8 -0
  213. data/templates/translation.xrb +8 -0
  214. data/templates/two_column.xrb +8 -0
  215. metadata +280 -0
@@ -0,0 +1,554 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <meta charset="UTF-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
+ <title>Nginx Examples - @socketry/syntax</title>
7
+ <link rel="stylesheet" href="examples.css">
8
+ </head>
9
+ <body>
10
+ <header>
11
+ <h1>Nginx Examples</h1>
12
+ <p class="subtitle">Nginx syntax highlighting</p>
13
+ </header>
14
+
15
+ <nav>
16
+ <a href="index.html">Back to Examples</a>
17
+ </nav>
18
+
19
+ <h1>Nginx Configuration Example</h1>
20
+
21
+ <p>Nginx is a high-performance web server and reverse proxy. These examples demonstrate common nginx configuration patterns.</p>
22
+
23
+ <div class="example">
24
+ <h2>Basic Server Block</h2>
25
+ <p class="description">Example:</p>
26
+
27
+ <pre><code class="language-nginx"># Basic HTTP server
28
+ server {
29
+ listen 80;
30
+ listen [::]:80;
31
+
32
+ server_name example.com www.example.com;
33
+
34
+ root /var/www/example.com;
35
+ index index.html index.htm;
36
+
37
+ # Access and error logs
38
+ access_log /var/log/nginx/example.access.log;
39
+ error_log /var/log/nginx/example.error.log;
40
+
41
+ # Serve static files
42
+ location / {
43
+ try_files $uri $uri/ =404;
44
+ }
45
+ }
46
+ </code></pre>
47
+
48
+ <div class="example">
49
+ <h2>HTTPS/SSL Configuration</h2>
50
+ <p class="description">Example:</p>
51
+
52
+ <pre><code class="language-nginx"># HTTPS server with SSL
53
+ server {
54
+ listen 443 ssl http2;
55
+ listen [::]:443 ssl http2;
56
+
57
+ server_name example.com;
58
+
59
+ # SSL certificates
60
+ ssl_certificate /etc/nginx/ssl/example.com.crt;
61
+ ssl_certificate_key /etc/nginx/ssl/example.com.key;
62
+
63
+ # SSL protocols and ciphers
64
+ ssl_protocols TLSv1.2 TLSv1.3;
65
+ ssl_ciphers HIGH:!aNULL:!MD5;
66
+ ssl_prefer_server_ciphers on;
67
+
68
+ # SSL session cache
69
+ ssl_session_cache shared:SSL:10m;
70
+ ssl_session_timeout 10m;
71
+
72
+ # HSTS (HTTP Strict Transport Security)
73
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
74
+
75
+ root /var/www/example.com;
76
+ index index.html;
77
+
78
+ location / {
79
+ try_files $uri $uri/ =404;
80
+ }
81
+ }
82
+
83
+ # Redirect HTTP to HTTPS
84
+ server {
85
+ listen 80;
86
+ listen [::]:80;
87
+
88
+ server_name example.com www.example.com;
89
+
90
+ # Redirect all HTTP requests to HTTPS
91
+ return 301 https://$host$request_uri;
92
+ }
93
+ </code></pre>
94
+
95
+ <div class="example">
96
+ <h2>Reverse Proxy</h2>
97
+ <p class="description">Example:</p>
98
+
99
+ <pre><code class="language-nginx"># Reverse proxy to backend application
100
+ upstream backend {
101
+ server 127.0.0.1:8080;
102
+ server 127.0.0.1:8081;
103
+ server 127.0.0.1:8082;
104
+
105
+ # Load balancing method
106
+ least_conn;
107
+
108
+ # Health check
109
+ keepalive 32;
110
+ }
111
+
112
+ server {
113
+ listen 80;
114
+ server_name api.example.com;
115
+
116
+ location / {
117
+ # Proxy headers
118
+ proxy_set_header Host $host;
119
+ proxy_set_header X-Real-IP $remote_addr;
120
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
121
+ proxy_set_header X-Forwarded-Proto $scheme;
122
+
123
+ # Proxy pass to upstream
124
+ proxy_pass http://backend;
125
+
126
+ # Timeouts
127
+ proxy_connect_timeout 60s;
128
+ proxy_send_timeout 60s;
129
+ proxy_read_timeout 60s;
130
+
131
+ # Buffering
132
+ proxy_buffering on;
133
+ proxy_buffer_size 4k;
134
+ proxy_buffers 8 4k;
135
+ }
136
+ }
137
+ </code></pre>
138
+
139
+ <div class="example">
140
+ <h2>Static File Serving with Caching</h2>
141
+ <p class="description">Example:</p>
142
+
143
+ <pre><code class="language-nginx">server {
144
+ listen 80;
145
+ server_name static.example.com;
146
+
147
+ root /var/www/static;
148
+
149
+ # Gzip compression
150
+ gzip on;
151
+ gzip_vary on;
152
+ gzip_proxied any;
153
+ gzip_comp_level 6;
154
+ gzip_types text/plain text/css text/xml text/javascript
155
+ application/json application/javascript application/xml+rss
156
+ application/rss+xml font/truetype font/opentype
157
+ application/vnd.ms-fontobject image/svg+xml;
158
+
159
+ # Cache static assets
160
+ location ~* \.(jpg|jpeg|png|gif|ico|css|js|svg|woff|woff2|ttf|eot)$ {
161
+ expires 1y;
162
+ add_header Cache-Control "public, immutable";
163
+ access_log off;
164
+ }
165
+
166
+ # Disable access to hidden files
167
+ location ~ /\. {
168
+ deny all;
169
+ access_log off;
170
+ log_not_found off;
171
+ }
172
+ }
173
+ </code></pre>
174
+
175
+ <div class="example">
176
+ <h2>PHP-FPM Configuration</h2>
177
+ <p class="description">Example:</p>
178
+
179
+ <pre><code class="language-nginx">server {
180
+ listen 80;
181
+ server_name php.example.com;
182
+
183
+ root /var/www/php-app;
184
+ index index.php index.html;
185
+
186
+ # PHP files
187
+ location ~ \.php$ {
188
+ include snippets/fastcgi-php.conf;
189
+ fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
190
+ fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
191
+ include fastcgi_params;
192
+ }
193
+
194
+ # Deny access to .htaccess files
195
+ location ~ /\.ht {
196
+ deny all;
197
+ }
198
+
199
+ # Try files or pass to index.php
200
+ location / {
201
+ try_files $uri $uri/ /index.php?$query_string;
202
+ }
203
+ }
204
+ </code></pre>
205
+
206
+ <div class="example">
207
+ <h2>WebSocket Proxy</h2>
208
+ <p class="description">Example:</p>
209
+
210
+ <pre><code class="language-nginx">server {
211
+ listen 80;
212
+ server_name ws.example.com;
213
+
214
+ location /ws {
215
+ proxy_pass http://localhost:3000;
216
+
217
+ # WebSocket headers
218
+ proxy_http_version 1.1;
219
+ proxy_set_header Upgrade $http_upgrade;
220
+ proxy_set_header Connection "upgrade";
221
+
222
+ # Standard proxy headers
223
+ proxy_set_header Host $host;
224
+ proxy_set_header X-Real-IP $remote_addr;
225
+ proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
226
+
227
+ # Disable buffering for WebSocket
228
+ proxy_buffering off;
229
+
230
+ # Timeouts for long-lived connections
231
+ proxy_read_timeout 86400;
232
+ }
233
+ }
234
+ </code></pre>
235
+
236
+ <div class="example">
237
+ <h2>Rate Limiting</h2>
238
+ <p class="description">Example:</p>
239
+
240
+ <pre><code class="language-nginx"># Define rate limit zones (in http context)
241
+ # This would typically go in nginx.conf
242
+ # limit_req_zone $binary_remote_addr zone=api_limit:10m rate=10r/s;
243
+ # limit_req_zone $binary_remote_addr zone=login_limit:10m rate=5r/m;
244
+
245
+ server {
246
+ listen 80;
247
+ server_name api.example.com;
248
+
249
+ # API rate limiting
250
+ location /api/ {
251
+ limit_req zone=api_limit burst=20 nodelay;
252
+ limit_req_status 429;
253
+
254
+ proxy_pass http://backend;
255
+ proxy_set_header Host $host;
256
+ }
257
+
258
+ # Login rate limiting
259
+ location /login {
260
+ limit_req zone=login_limit burst=5 nodelay;
261
+
262
+ proxy_pass http://backend;
263
+ proxy_set_header Host $host;
264
+ }
265
+ }
266
+ </code></pre>
267
+
268
+ <div class="example">
269
+ <h2>URL Rewriting and Redirects</h2>
270
+ <p class="description">Example:</p>
271
+
272
+ <pre><code class="language-nginx">server {
273
+ listen 80;
274
+ server_name example.com;
275
+
276
+ # Redirect old URLs to new ones
277
+ rewrite ^/old-path(.*)$ /new-path$1 permanent;
278
+
279
+ # Redirect blog section
280
+ rewrite ^/blog/(.*)$ https://blog.example.com/$1 permanent;
281
+
282
+ # Remove trailing slash
283
+ rewrite ^/(.*)/$ /$1 permanent;
284
+
285
+ # Conditional redirect
286
+ if ($request_uri ~* "^/admin") {
287
+ return 301 https://$host$request_uri;
288
+ }
289
+
290
+ # Named location for error pages
291
+ location / {
292
+ try_files $uri $uri/ @backend;
293
+ }
294
+
295
+ location @backend {
296
+ proxy_pass http://backend;
297
+ }
298
+ }
299
+ </code></pre>
300
+
301
+ <div class="example">
302
+ <h2>Security Headers</h2>
303
+ <p class="description">Example:</p>
304
+
305
+ <pre><code class="language-nginx">server {
306
+ listen 443 ssl http2;
307
+ server_name secure.example.com;
308
+
309
+ # SSL configuration (certificates omitted for brevity)
310
+ ssl_certificate /etc/nginx/ssl/cert.pem;
311
+ ssl_certificate_key /etc/nginx/ssl/key.pem;
312
+
313
+ # Security headers
314
+ add_header X-Frame-Options "SAMEORIGIN" always;
315
+ add_header X-Content-Type-Options "nosniff" always;
316
+ add_header X-XSS-Protection "1; mode=block" always;
317
+ add_header Referrer-Policy "no-referrer-when-downgrade" always;
318
+ add_header Content-Security-Policy "default-src 'self' https:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';" always;
319
+
320
+ # HSTS
321
+ add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
322
+
323
+ root /var/www/secure;
324
+ index index.html;
325
+
326
+ location / {
327
+ try_files $uri $uri/ =404;
328
+ }
329
+ }
330
+ </code></pre>
331
+
332
+ <div class="example">
333
+ <h2>Load Balancing Strategies</h2>
334
+ <p class="description">Example:</p>
335
+
336
+ <pre><code class="language-nginx"># Round-robin (default)
337
+ upstream backend_roundrobin {
338
+ server backend1.example.com;
339
+ server backend2.example.com;
340
+ server backend3.example.com;
341
+ }
342
+
343
+ # Least connections
344
+ upstream backend_leastconn {
345
+ least_conn;
346
+
347
+ server backend1.example.com;
348
+ server backend2.example.com;
349
+ server backend3.example.com;
350
+ }
351
+
352
+ # IP hash (session persistence)
353
+ upstream backend_iphash {
354
+ ip_hash;
355
+
356
+ server backend1.example.com;
357
+ server backend2.example.com;
358
+ server backend3.example.com;
359
+ }
360
+
361
+ # Weighted load balancing
362
+ upstream backend_weighted {
363
+ server backend1.example.com weight=3;
364
+ server backend2.example.com weight=2;
365
+ server backend3.example.com weight=1;
366
+ }
367
+
368
+ # With backup and health checks
369
+ upstream backend_advanced {
370
+ server backend1.example.com max_fails=3 fail_timeout=30s;
371
+ server backend2.example.com max_fails=3 fail_timeout=30s;
372
+ server backup.example.com backup;
373
+
374
+ keepalive 32;
375
+ }
376
+ </code></pre>
377
+
378
+ <div class="example">
379
+ <h2>Caching Proxy</h2>
380
+ <p class="description">Example:</p>
381
+
382
+ <pre><code class="language-nginx"># Cache configuration (in http context)
383
+ # This would typically go in nginx.conf
384
+ # proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=my_cache:10m max_size=1g inactive=60m use_temp_path=off;
385
+
386
+ server {
387
+ listen 80;
388
+ server_name cache.example.com;
389
+
390
+ location / {
391
+ proxy_cache my_cache;
392
+ proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
393
+ proxy_cache_background_update on;
394
+ proxy_cache_lock on;
395
+
396
+ # Cache control
397
+ proxy_cache_valid 200 60m;
398
+ proxy_cache_valid 404 10m;
399
+
400
+ # Cache bypass
401
+ proxy_cache_bypass $http_pragma $http_authorization;
402
+ proxy_no_cache $http_pragma $http_authorization;
403
+
404
+ # Cache key
405
+ proxy_cache_key "$scheme$request_method$host$request_uri";
406
+
407
+ # Add cache status header
408
+ add_header X-Cache-Status $upstream_cache_status;
409
+
410
+ proxy_pass http://backend;
411
+ proxy_set_header Host $host;
412
+ }
413
+
414
+ # Cache purge endpoint
415
+ location ~ /purge(/.*) {
416
+ allow 127.0.0.1;
417
+ deny all;
418
+ proxy_cache_purge my_cache "$scheme$request_method$host$1";
419
+ }
420
+ }
421
+ </code></pre>
422
+
423
+ <div class="example">
424
+ <h2>Virtual Host with Multiple Domains</h2>
425
+ <p class="description">Example:</p>
426
+
427
+ <pre><code class="language-nginx">server {
428
+ listen 80;
429
+
430
+ # Multiple server names
431
+ server_name example.com www.example.com example.net www.example.net;
432
+
433
+ root /var/www/example;
434
+ index index.html index.htm;
435
+
436
+ # Custom error pages
437
+ error_page 404 /404.html;
438
+ error_page 500 502 503 504 /50x.html;
439
+
440
+ location = /404.html {
441
+ internal;
442
+ root /var/www/errors;
443
+ }
444
+
445
+ location = /50x.html {
446
+ internal;
447
+ root /var/www/errors;
448
+ }
449
+
450
+ # Favicon and robots.txt
451
+ location = /favicon.ico {
452
+ log_not_found off;
453
+ access_log off;
454
+ }
455
+
456
+ location = /robots.txt {
457
+ allow all;
458
+ log_not_found off;
459
+ access_log off;
460
+ }
461
+
462
+ location / {
463
+ try_files $uri $uri/ =404;
464
+ }
465
+ }
466
+ </code></pre>
467
+
468
+ <div class="example">
469
+ <h2>Geo-blocking and Access Control</h2>
470
+ <p class="description">Example:</p>
471
+
472
+ <pre><code class="language-nginx">server {
473
+ listen 80;
474
+ server_name restricted.example.com;
475
+
476
+ # Allow specific IPs
477
+ allow 192.168.1.0/24;
478
+ allow 10.0.0.0/8;
479
+ deny all;
480
+
481
+ # Basic authentication
482
+ location /admin {
483
+ auth_basic "Restricted Area";
484
+ auth_basic_user_file /etc/nginx/.htpasswd;
485
+
486
+ proxy_pass http://backend;
487
+ }
488
+
489
+ # IP-based restrictions
490
+ location /api {
491
+ # Allow internal network
492
+ allow 192.168.1.0/24;
493
+ # Allow specific IPs
494
+ allow 203.0.113.0/24;
495
+ # Deny all others
496
+ deny all;
497
+
498
+ proxy_pass http://backend;
499
+ }
500
+ }
501
+ </code></pre>
502
+
503
+ <div class="example">
504
+ <h2>Variables and Conditionals</h2>
505
+ <p class="description">Example:</p>
506
+
507
+ <pre><code class="language-nginx">server {
508
+ listen 80;
509
+ server_name example.com;
510
+
511
+ # Custom variables
512
+ set $mobile_rewrite do_not_perform;
513
+
514
+ # Check for mobile user agents
515
+ if ($http_user_agent ~* "(android|iphone|ipad|mobile)") {
516
+ set $mobile_rewrite perform;
517
+ }
518
+
519
+ # Check for specific paths
520
+ if ($uri ~ ^/mobile/) {
521
+ set $mobile_rewrite do_not_perform;
522
+ }
523
+
524
+ # Redirect to mobile site
525
+ if ($mobile_rewrite = perform) {
526
+ return 301 https://m.example.com$request_uri;
527
+ }
528
+
529
+ # Common nginx variables
530
+ location /debug {
531
+ # Request variables
532
+ add_header X-Request-URI $request_uri;
533
+ add_header X-Request-Method $request_method;
534
+ add_header X-Query-String $query_string;
535
+ add_header X-Remote-Addr $remote_addr;
536
+ add_header X-Remote-User $remote_user;
537
+
538
+ # Server variables
539
+ add_header X-Server-Name $server_name;
540
+ add_header X-Server-Port $server_port;
541
+ add_header X-Server-Protocol $server_protocol;
542
+
543
+ # HTTP headers
544
+ add_header X-Host $host;
545
+ add_header X-User-Agent $http_user_agent;
546
+ add_header X-Referer $http_referer;
547
+
548
+ return 200 "Debug information in headers\n";
549
+ }
550
+ }
551
+ </code></pre>
552
+
553
+ </body>
554
+ </html>