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.
- checksums.yaml +7 -0
- data/bin/presently +13 -0
- data/lib/presently/application.rb +104 -0
- data/lib/presently/clock.rb +77 -0
- data/lib/presently/display_view.rb +73 -0
- data/lib/presently/environment/application.rb +62 -0
- data/lib/presently/page.rb +38 -0
- data/lib/presently/page.xrb +31 -0
- data/lib/presently/presentation.rb +72 -0
- data/lib/presently/presentation_controller.rb +181 -0
- data/lib/presently/presenter_view.rb +264 -0
- data/lib/presently/slide.rb +148 -0
- data/lib/presently/slide_view.rb +92 -0
- data/lib/presently/state.rb +66 -0
- data/lib/presently/version.rb +9 -0
- data/lib/presently.rb +9 -0
- data/license.md +21 -0
- data/public/_components/@socketry/syntax/Syntax/CodeElement.js +337 -0
- data/public/_components/@socketry/syntax/Syntax/Errors.js +52 -0
- data/public/_components/@socketry/syntax/Syntax/Language/apache.js +49 -0
- data/public/_components/@socketry/syntax/Syntax/Language/applescript.js +157 -0
- data/public/_components/@socketry/syntax/Syntax/Language/assembly.js +42 -0
- data/public/_components/@socketry/syntax/Syntax/Language/bash-script.js +108 -0
- data/public/_components/@socketry/syntax/Syntax/Language/bash.js +32 -0
- data/public/_components/@socketry/syntax/Syntax/Language/basic.js +232 -0
- data/public/_components/@socketry/syntax/Syntax/Language/c++.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/c.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/clang.js +201 -0
- data/public/_components/@socketry/syntax/Syntax/Language/cpp.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/csharp.js +166 -0
- data/public/_components/@socketry/syntax/Syntax/Language/css.js +244 -0
- data/public/_components/@socketry/syntax/Syntax/Language/diff.js +24 -0
- data/public/_components/@socketry/syntax/Syntax/Language/go.js +135 -0
- data/public/_components/@socketry/syntax/Syntax/Language/haskell.js +110 -0
- data/public/_components/@socketry/syntax/Syntax/Language/html.js +69 -0
- data/public/_components/@socketry/syntax/Syntax/Language/io.js +68 -0
- data/public/_components/@socketry/syntax/Syntax/Language/java.js +134 -0
- data/public/_components/@socketry/syntax/Syntax/Language/javascript.js +89 -0
- data/public/_components/@socketry/syntax/Syntax/Language/json.js +36 -0
- data/public/_components/@socketry/syntax/Syntax/Language/lisp.js +38 -0
- data/public/_components/@socketry/syntax/Syntax/Language/lua.js +87 -0
- data/public/_components/@socketry/syntax/Syntax/Language/markdown.js +112 -0
- data/public/_components/@socketry/syntax/Syntax/Language/nginx.js +37 -0
- data/public/_components/@socketry/syntax/Syntax/Language/objective-c.js +1 -0
- data/public/_components/@socketry/syntax/Syntax/Language/ocaml.js +225 -0
- data/public/_components/@socketry/syntax/Syntax/Language/pascal.js +166 -0
- data/public/_components/@socketry/syntax/Syntax/Language/patch.js +2 -0
- data/public/_components/@socketry/syntax/Syntax/Language/perl5.js +317 -0
- data/public/_components/@socketry/syntax/Syntax/Language/php-script.js +112 -0
- data/public/_components/@socketry/syntax/Syntax/Language/php.js +18 -0
- data/public/_components/@socketry/syntax/Syntax/Language/plain.js +20 -0
- data/public/_components/@socketry/syntax/Syntax/Language/protobuf.js +77 -0
- data/public/_components/@socketry/syntax/Syntax/Language/python.js +208 -0
- data/public/_components/@socketry/syntax/Syntax/Language/ruby.js +124 -0
- data/public/_components/@socketry/syntax/Syntax/Language/scala.js +81 -0
- data/public/_components/@socketry/syntax/Syntax/Language/smalltalk.js +30 -0
- data/public/_components/@socketry/syntax/Syntax/Language/sql.js +865 -0
- data/public/_components/@socketry/syntax/Syntax/Language/super-collider.js +70 -0
- data/public/_components/@socketry/syntax/Syntax/Language/swift.js +176 -0
- data/public/_components/@socketry/syntax/Syntax/Language/xml.js +76 -0
- data/public/_components/@socketry/syntax/Syntax/Language/xrb.js +33 -0
- data/public/_components/@socketry/syntax/Syntax/Language/yaml.js +29 -0
- data/public/_components/@socketry/syntax/Syntax/Language.js +276 -0
- data/public/_components/@socketry/syntax/Syntax/Loader.js +78 -0
- data/public/_components/@socketry/syntax/Syntax/Match.js +546 -0
- data/public/_components/@socketry/syntax/Syntax/Rule.js +306 -0
- data/public/_components/@socketry/syntax/Syntax.js +356 -0
- data/public/_components/@socketry/syntax/bin/syntax-ast.js +42 -0
- data/public/_components/@socketry/syntax/examples/_template.html +53 -0
- data/public/_components/@socketry/syntax/examples/apache.html +72 -0
- data/public/_components/@socketry/syntax/examples/applescript.html +72 -0
- data/public/_components/@socketry/syntax/examples/assembly.html +74 -0
- data/public/_components/@socketry/syntax/examples/bash.html +90 -0
- data/public/_components/@socketry/syntax/examples/basic.html +87 -0
- data/public/_components/@socketry/syntax/examples/c.html +141 -0
- data/public/_components/@socketry/syntax/examples/clang.html +202 -0
- data/public/_components/@socketry/syntax/examples/csharp.html +110 -0
- data/public/_components/@socketry/syntax/examples/css-colors.html +179 -0
- data/public/_components/@socketry/syntax/examples/custom-theme.html +155 -0
- data/public/_components/@socketry/syntax/examples/diff.html +142 -0
- data/public/_components/@socketry/syntax/examples/examples.css +216 -0
- data/public/_components/@socketry/syntax/examples/go.html +413 -0
- data/public/_components/@socketry/syntax/examples/haskell.html +373 -0
- data/public/_components/@socketry/syntax/examples/html.html +316 -0
- data/public/_components/@socketry/syntax/examples/index.html +97 -0
- data/public/_components/@socketry/syntax/examples/io.html +552 -0
- data/public/_components/@socketry/syntax/examples/java.html +786 -0
- data/public/_components/@socketry/syntax/examples/javascript.html +199 -0
- data/public/_components/@socketry/syntax/examples/json.html +150 -0
- data/public/_components/@socketry/syntax/examples/lisp.html +476 -0
- data/public/_components/@socketry/syntax/examples/lua.html +737 -0
- data/public/_components/@socketry/syntax/examples/markdown.html +121 -0
- data/public/_components/@socketry/syntax/examples/mixed.html +306 -0
- data/public/_components/@socketry/syntax/examples/nginx.html +554 -0
- data/public/_components/@socketry/syntax/examples/ocaml.html +596 -0
- data/public/_components/@socketry/syntax/examples/pascal.html +762 -0
- data/public/_components/@socketry/syntax/examples/perl5.html +488 -0
- data/public/_components/@socketry/syntax/examples/php-script.html +142 -0
- data/public/_components/@socketry/syntax/examples/php.html +95 -0
- data/public/_components/@socketry/syntax/examples/plain.html +222 -0
- data/public/_components/@socketry/syntax/examples/protobuf.html +405 -0
- data/public/_components/@socketry/syntax/examples/python.html +82 -0
- data/public/_components/@socketry/syntax/examples/readme.md +79 -0
- data/public/_components/@socketry/syntax/examples/ruby.html +58 -0
- data/public/_components/@socketry/syntax/examples/scala.html +41 -0
- data/public/_components/@socketry/syntax/examples/smalltalk.html +436 -0
- data/public/_components/@socketry/syntax/examples/sql.html +373 -0
- data/public/_components/@socketry/syntax/examples/super-collider.html +55 -0
- data/public/_components/@socketry/syntax/examples/swift.html +176 -0
- data/public/_components/@socketry/syntax/examples/wrap-demo.html +103 -0
- data/public/_components/@socketry/syntax/examples/xml.html +112 -0
- data/public/_components/@socketry/syntax/examples/xrb.html +37 -0
- data/public/_components/@socketry/syntax/examples/yaml.html +72 -0
- data/public/_components/@socketry/syntax/license.md +21 -0
- data/public/_components/@socketry/syntax/package-lock.json +834 -0
- data/public/_components/@socketry/syntax/package.json +43 -0
- data/public/_components/@socketry/syntax/readme.md +162 -0
- data/public/_components/@socketry/syntax/test/Syntax/CodeElement.js +306 -0
- data/public/_components/@socketry/syntax/test/Syntax/ErrorHandling.js +85 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/apache.js +153 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/applescript.js +198 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/assembly.js +209 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/bash-script.js +225 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/bash.js +162 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/basic.js +265 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/clang.js +390 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/csharp.js +436 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/css.js +431 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/diff.js +206 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/go.js +386 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/haskell.js +454 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/html.js +111 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/io.js +229 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/java.js +362 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/javascript.js +101 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/json.js +101 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/lisp.js +224 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/lua.js +307 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/markdown.js +163 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/nginx.js +267 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/ocaml.js +299 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/pascal.js +311 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/perl5.js +333 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/php-script.js +197 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/php.js +92 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/plain.js +327 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/protobuf.js +294 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/python.js +213 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/ruby.js +70 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/scala.js +75 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/smalltalk.js +223 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/sql.js +281 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/super-collider.js +66 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/swift.js +71 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/xml.js +170 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/xrb.js +57 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language/yaml.js +123 -0
- data/public/_components/@socketry/syntax/test/Syntax/Language.js +62 -0
- data/public/_components/@socketry/syntax/test/Syntax/Match.js +40 -0
- data/public/_components/@socketry/syntax/test/Syntax/Rule.js +251 -0
- data/public/_components/@socketry/syntax/test/Syntax.js +38 -0
- data/public/_components/@socketry/syntax/test/helpers/ast-matcher.js +90 -0
- data/public/_components/@socketry/syntax/themes/base/apache.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/applescript.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/assembly.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/bash.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/basic.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/c.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/clang.css +0 -0
- data/public/_components/@socketry/syntax/themes/base/csharp.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/css.css +22 -0
- data/public/_components/@socketry/syntax/themes/base/diff.css +48 -0
- data/public/_components/@socketry/syntax/themes/base/go.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/haskell.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/html.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/io.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/java.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/javascript.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/json.css +41 -0
- data/public/_components/@socketry/syntax/themes/base/lisp.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/lua.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/markdown.css +16 -0
- data/public/_components/@socketry/syntax/themes/base/nginx.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/ocaml.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/pascal.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/perl5.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/php-script.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/php.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/plain.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/protobuf.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/python.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/ruby.css +23 -0
- data/public/_components/@socketry/syntax/themes/base/scala.css +3 -0
- data/public/_components/@socketry/syntax/themes/base/smalltalk.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/sql.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/super-collider.css +33 -0
- data/public/_components/@socketry/syntax/themes/base/swift.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/syntax.css +63 -0
- data/public/_components/@socketry/syntax/themes/base/xml.css +1 -0
- data/public/_components/@socketry/syntax/themes/base/xrb.css +29 -0
- data/public/_components/@socketry/syntax/themes/base/yaml.css +1 -0
- data/public/_components/@socketry/syntax/themes/theming.md +233 -0
- data/public/_components/@socketry/syntax/update-examples.js +135 -0
- data/public/_static/index.css +593 -0
- data/public/application.js +147 -0
- data/readme.md +69 -0
- data/releases.md +3 -0
- data/templates/code.xrb +12 -0
- data/templates/default.xrb +5 -0
- data/templates/image.xrb +8 -0
- data/templates/section.xrb +5 -0
- data/templates/title.xrb +8 -0
- data/templates/translation.xrb +8 -0
- data/templates/two_column.xrb +8 -0
- 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>
|