passenger 4.0.24 → 4.0.25

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (37) hide show
  1. data.tar.gz.asc +7 -7
  2. data/INSTALL.md +2 -2
  3. data/NEWS +12 -0
  4. data/README.md +14 -6
  5. data/build/packaging.rb +3 -1
  6. data/doc/Users guide Apache.idmap.txt +19 -17
  7. data/doc/Users guide Apache.txt +146 -95
  8. data/doc/Users guide Nginx.txt +6 -6
  9. data/doc/Users guide Standalone.idmap.txt +19 -15
  10. data/doc/Users guide Standalone.txt +26 -1
  11. data/doc/Users guide.txt +9 -0
  12. data/doc/images/passenger_nodejs_architecture.svg +558 -0
  13. data/doc/users_guide_snippets/installation.txt +19 -16
  14. data/ext/common/AgentsStarter.h +1 -11
  15. data/ext/common/ApplicationPool2/AppTypes.cpp +5 -0
  16. data/ext/common/ApplicationPool2/AppTypes.h +1 -0
  17. data/ext/common/ApplicationPool2/Options.h +8 -4
  18. data/ext/common/ApplicationPool2/Spawner.h +1 -0
  19. data/ext/common/Constants.h +2 -2
  20. data/ext/common/ServerInstanceDir.h +9 -24
  21. data/ext/common/agents/HelperAgent/RequestHandler.h +1 -0
  22. data/ext/nginx/CacheLocationConfig.c +40 -0
  23. data/ext/nginx/ConfigurationCommands.c +30 -0
  24. data/ext/nginx/ConfigurationFields.h +6 -0
  25. data/ext/nginx/ContentHandler.c +40 -32
  26. data/ext/nginx/CreateLocationConfig.c +15 -0
  27. data/ext/nginx/MergeLocationConfig.c +18 -0
  28. data/helper-scripts/node-loader.js +2 -1
  29. data/lib/phusion_passenger.rb +3 -3
  30. data/lib/phusion_passenger/constants.rb +1 -1
  31. data/lib/phusion_passenger/nginx/config_options.rb +13 -0
  32. data/lib/phusion_passenger/standalone/start_command.rb +19 -2
  33. data/lib/phusion_passenger/utils/tmpdir.rb +0 -1
  34. data/resources/templates/standalone/config.erb +8 -1
  35. data/test/integration_tests/native_packaging_spec.rb +14 -4
  36. metadata +3 -2
  37. metadata.gz.asc +7 -7
@@ -89,7 +89,7 @@ And you want your Rails application, located in `/websites/rails`, to be accessi
89
89
 
90
90
  To do this, you need to perform the following:
91
91
 
92
- 1. Create a `location <SUBURI>` block.
92
+ 1. Create a `location` with parameter `^/<SUBURI>(/|$)`. This is a regular expression that says: "match everything that is exactly <SUBURI>, or starts with <SUBDURI>/".
93
93
  2. Inside the location block, set `passenger_base_uri <SUBURI>`.
94
94
  3. Inside the location block, set `alias <PATH TO YOUR APPLICATION'S PUBLIC DIRECTORY>`.
95
95
  4. Inside the location block, set `passenger_app_root <PATH TO YOUR APPLICATION ROOT>`.
@@ -107,7 +107,7 @@ http {
107
107
  root /websites/phusion;
108
108
 
109
109
  # This block has been added.
110
- location /subapp {
110
+ location ^/subapp(/|$) {
111
111
  passenger_base_uri /subapp;
112
112
  alias /websites/rails/public; # <-- be sure to point to 'public'!
113
113
  passenger_app_root /websites/rails;
@@ -280,7 +280,7 @@ And you want your Rack application, located in `/websites/rack`, to be accessibl
280
280
 
281
281
  To do this, you need to perform the following:
282
282
 
283
- 1. Create a `location <SUBURI>` block.
283
+ 1. Create a `location` with parameter `^/<SUBURI>(/|$)`. This is a regular expression that says: "match everything that is exactly <SUBURI>, or starts with <SUBDURI>/".
284
284
  2. Inside the location block, set `passenger_base_uri <SUBURI>`.
285
285
  3. Inside the location block, set `alias <PATH TO YOUR APPLICATION'S PUBLIC DIRECTORY>`.
286
286
  4. Inside the location block, set `passenger_app_root <PATH TO YOUR APPLICATION ROOT>`.
@@ -298,7 +298,7 @@ http {
298
298
  root /websites/phusion;
299
299
 
300
300
  # This block has been added.
301
- location /subapp {
301
+ location ^/subapp(/|$) {
302
302
  passenger_base_uri /subapp;
303
303
  alias /websites/rack/public; # <-- be sure to point to 'public'!
304
304
  passenger_app_root /websites/rack;
@@ -440,7 +440,7 @@ And you want your WSGI application, located in `/websites/wsgi`, to be accessibl
440
440
 
441
441
  To do this, you need to perform the following:
442
442
 
443
- 1. Create a `location <SUBURI>` block.
443
+ 1. Create a `location` with parameter `^/<SUBURI>(/|$)`. This is a regular expression that says: "match everything that is exactly <SUBURI>, or starts with <SUBDURI>/".
444
444
  2. Inside the location block, set `passenger_base_uri <SUBURI>`.
445
445
  3. Inside the location block, set `alias <PATH TO YOUR APPLICATION'S PUBLIC DIRECTORY>`.
446
446
  4. Inside the location block, set `passenger_app_root <PATH TO YOUR APPLICATION ROOT>`.
@@ -458,7 +458,7 @@ http {
458
458
  root /websites/phusion;
459
459
 
460
460
  # This block has been added.
461
- location /subapp {
461
+ location ^/subapp(/|$) {
462
462
  passenger_base_uri /subapp;
463
463
  alias /websites/wsgi/public; # <-- be sure to point to 'public'!
464
464
  passenger_app_root /websites/wsgi;
@@ -76,33 +76,37 @@
76
76
 
77
77
  4.3. Advanced configuration => advanced-configuration-e3v4pk
78
78
 
79
- 5. Mass deployment => mass-deployment-1xqriy4
79
+ 5. Using Passenger Standalone in production => using-passenger-standalone-in-production-1i7yjcz
80
80
 
81
- 6. Troubleshooting => troubleshooting-o7g75o
81
+ 5.1. Starting Passenger Standalone at system boot => starting-passenger-standalone-at-system-boot-jpem2b
82
82
 
83
- 6.1. Generic troubleshooting tips => generic-troubleshooting-tips-2vokcr
83
+ 6. Mass deployment => mass-deployment-1xqriy4
84
84
 
85
- 6.2. Upon uploading a file, Phusion Passenger reports "client_body_temp/00000000xx failed (2: No such file or directory)" => upon-uploading-a-file-phusion-passenger-reports-client-body-temp-00000000xx-failed-2-no-such-file-or-directory--d01goe
85
+ 7. Troubleshooting => troubleshooting-o7g75o
86
86
 
87
- 7. Appendix: About environment variables => appendix-about-environment-variables-1ct91x3
87
+ 7.1. Generic troubleshooting tips => generic-troubleshooting-tips-2vokcr
88
88
 
89
- 7.1. Working with environment variables => working-with-environment-variables-11cmwlv
89
+ 7.2. Upon uploading a file, Phusion Passenger reports "client_body_temp/00000000xx failed (2: No such file or directory)" => upon-uploading-a-file-phusion-passenger-reports-client-body-temp-00000000xx-failed-2-no-such-file-or-directory--d01goe
90
90
 
91
- 7.2. The PATH environment variable => the-path-environment-variable-yzfn3k
91
+ 8. Appendix: About environment variables => appendix-about-environment-variables-1ct91x3
92
92
 
93
- 7.2.1. Adding Phusion Passenger’s administration tools to PATH => adding-phusion-passenger-s-administration-tools-to-path-d7k5mh
93
+ 8.1. Working with environment variables => working-with-environment-variables-11cmwlv
94
94
 
95
- 7.3. Making environment variables permanent => making-environment-variables-permanent-mkq46d
95
+ 8.2. The PATH environment variable => the-path-environment-variable-yzfn3k
96
96
 
97
- 7.3.1. bash => bash-hmcscc
97
+ 8.2.1. Adding Phusion Passenger’s administration tools to PATH => adding-phusion-passenger-s-administration-tools-to-path-d7k5mh
98
98
 
99
- 7.3.2. Apache => apache-15y3bm0
99
+ 8.3. Making environment variables permanent => making-environment-variables-permanent-mkq46d
100
100
 
101
- 7.3.3. Nginx => nginx-uarf27
101
+ 8.3.1. bash => bash-hmcscc
102
102
 
103
- 7.3.4. cron => cron-6272ar
103
+ 8.3.2. Apache => apache-15y3bm0
104
104
 
105
- 7.3.5. Phusion Passenger-served apps => phusion-passenger-served-apps-127wbl2
105
+ 8.3.3. Nginx => nginx-uarf27
106
106
 
107
- 7.4. Environment variables and sudo => environment-variables-and-sudo-znzmif
107
+ 8.3.4. cron => cron-6272ar
108
+
109
+ 8.3.5. Phusion Passenger-served apps => phusion-passenger-served-apps-127wbl2
110
+
111
+ 8.4. Environment variables and sudo => environment-variables-and-sudo-znzmif
108
112
 
@@ -38,7 +38,7 @@ Most configuration is done by customizing the arguments passed to the `passenger
38
38
  `--port NUMBER`::
39
39
  The port number that Phusion Passenger should listen on. Defaults to 3000.
40
40
  `--environment NAME`::
41
- Customizes the value of the `RAILS_ENV`, `RACK_ENV` and `PASSENGER_ENV` environment variable. The default is "development".
41
+ Customizes the value of the `RAILS_ENV`, `RACK_ENV`, `WSGI_ENV`, `NODE_ENV` and `PASSENGER_ENV` environment variables. Some web frameworks, for example Rails and Connect.js, adjust their behavior according to the environment. The default value is 'development'.
42
42
  `--max-pool-size NUMBER`::
43
43
  The maximum number of application processes to run. The maximum number that you can run depends on the amount of memory your server has. The article link:http://blog.phusion.nl/2013/03/12/tuning-phusion-passengers-concurrency-settings/[Tuning Phusion Passenger's concurrency settings] explains how you can infer a good number for this option.
44
44
  `--min-instances NUMBER`::
@@ -110,6 +110,31 @@ NOTE: If you installed Phusion Passenger using the Debian or Ubuntu packages, th
110
110
  Please note that changes to this file only last until you reinstall or upgrade Phusion Passenger. We are currently working on a mechanism for permanently editing the configuration file.
111
111
 
112
112
 
113
+ == Using Passenger Standalone in production
114
+
115
+ [[starting_at_system_boot]]
116
+ === Starting Passenger Standalone at system boot
117
+
118
+ The easiest way to have Passenger Standalone started during system boot is add it to the file `/etc/rc.local`. This script is called during system boot.
119
+
120
+ Here's an example of what you may want to add to `/etc/rc.local`. If there is an `exit` command in `rc.local`, make sure you add these _before_ the `exit` command.
121
+
122
+ [source,sh]
123
+ ------------------------------------------
124
+ # If you installed Phusion Passenger from tarball, add its `bin` directory to PATH.
125
+ #export PATH=/path-to-passenger/bin:$PATH
126
+
127
+ # Change working directory to your webapp.
128
+ cd /path-to-your-webapp
129
+
130
+ # Start Passenger Standalone in daemonized mode. Passenger will be started as
131
+ # root when run from this file, so we also tell it to drop its privileges to a
132
+ # normal user. Replace 'someusername' with the user you want to run your
133
+ # application under.
134
+ passenger start --daemonize --port 80 --user someusername
135
+ ------------------------------------------
136
+
137
+
113
138
  [[mass_deployment]]
114
139
  == Mass deployment
115
140
  :version: 3.0.0
@@ -43,6 +43,15 @@ Please refer to:
43
43
  * link:Users%20guide%20Apache.html#installation[**Apache** mode installation & upgrade]
44
44
  * link:Users%20guide%20Standalone.html#installation[**Standalone** mode installation & upgrade]
45
45
 
46
+ [[troubleshooting]]
47
+ == Troubleshooting
48
+
49
+ Please refer to:
50
+
51
+ * link:Users%20guide%20Nginx.html#troubleshooting[**Nginx** mode troubleshooting]
52
+ * link:Users%20guide%20Apache.html#troubleshooting[**Apache** mode troubleshooting]
53
+ * link:Users%20guide%20Standalone.html#troubleshooting[**Standalone** mode troubleshooting]
54
+
46
55
  [[support]]
47
56
  == Where to get support
48
57
 
@@ -0,0 +1,558 @@
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:xlink="http://www.w3.org/1999/xlink"
11
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
12
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
13
+ width="850"
14
+ height="1052.3622"
15
+ id="svg2"
16
+ version="1.1"
17
+ inkscape:version="0.48.2 r9819"
18
+ inkscape:export-filename="/Users/hongli/Desktop/passenger_node.png"
19
+ inkscape:export-xdpi="80.629997"
20
+ inkscape:export-ydpi="80.629997"
21
+ sodipodi:docname="passenger_nodejs_architecture.svg">
22
+ <defs
23
+ id="defs4">
24
+ <linearGradient
25
+ id="linearGradient3873">
26
+ <stop
27
+ style="stop-color:#636363;stop-opacity:1;"
28
+ offset="0"
29
+ id="stop3875" />
30
+ <stop
31
+ style="stop-color:#b1b1b1;stop-opacity:1;"
32
+ offset="1"
33
+ id="stop3877" />
34
+ </linearGradient>
35
+ <linearGradient
36
+ id="linearGradient3863">
37
+ <stop
38
+ style="stop-color:#eeeeee;stop-opacity:1;"
39
+ offset="0"
40
+ id="stop3865" />
41
+ <stop
42
+ style="stop-color:#ffffff;stop-opacity:1;"
43
+ offset="1"
44
+ id="stop3867" />
45
+ </linearGradient>
46
+ <marker
47
+ inkscape:stockid="Arrow1Mstart"
48
+ orient="auto"
49
+ refY="0.0"
50
+ refX="0.0"
51
+ id="Arrow1Mstart"
52
+ style="overflow:visible">
53
+ <path
54
+ id="path4005"
55
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
56
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
57
+ transform="scale(0.4) translate(10,0)" />
58
+ </marker>
59
+ <marker
60
+ inkscape:stockid="Arrow2Send"
61
+ orient="auto"
62
+ refY="0"
63
+ refX="0"
64
+ id="Arrow2Send"
65
+ style="overflow:visible">
66
+ <path
67
+ id="path4032"
68
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
69
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
70
+ transform="matrix(-0.3,0,0,-0.3,0.69,0)"
71
+ inkscape:connector-curvature="0" />
72
+ </marker>
73
+ <marker
74
+ inkscape:stockid="Arrow2Sstart"
75
+ orient="auto"
76
+ refY="0"
77
+ refX="0"
78
+ id="Arrow2Sstart"
79
+ style="overflow:visible">
80
+ <path
81
+ id="path4029"
82
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
83
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
84
+ transform="matrix(0.3,0,0,0.3,-0.69,0)"
85
+ inkscape:connector-curvature="0" />
86
+ </marker>
87
+ <marker
88
+ inkscape:stockid="Arrow2Mend"
89
+ orient="auto"
90
+ refY="0"
91
+ refX="0"
92
+ id="Arrow2Mend"
93
+ style="overflow:visible">
94
+ <path
95
+ id="path4026"
96
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
97
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
98
+ transform="scale(-0.6,-0.6)"
99
+ inkscape:connector-curvature="0" />
100
+ </marker>
101
+ <marker
102
+ inkscape:stockid="Arrow2Mstart"
103
+ orient="auto"
104
+ refY="0"
105
+ refX="0"
106
+ id="Arrow2Mstart"
107
+ style="overflow:visible">
108
+ <path
109
+ id="path4023"
110
+ style="font-size:12px;fill-rule:evenodd;stroke-width:0.625;stroke-linejoin:round"
111
+ d="M 8.7185878,4.0337352 -2.2072895,0.01601326 8.7185884,-4.0017078 c -1.7454984,2.3720609 -1.7354408,5.6174519 -6e-7,8.035443 z"
112
+ transform="scale(0.6,0.6)"
113
+ inkscape:connector-curvature="0" />
114
+ </marker>
115
+ <radialGradient
116
+ inkscape:collect="always"
117
+ xlink:href="#linearGradient3863"
118
+ id="radialGradient3871"
119
+ cx="399.86142"
120
+ cy="173.65393"
121
+ fx="399.86142"
122
+ fy="173.65393"
123
+ r="124.21188"
124
+ gradientTransform="matrix(0.08359871,-0.53730252,1.4968758,0.23289847,152.10997,303.41193)"
125
+ gradientUnits="userSpaceOnUse" />
126
+ <radialGradient
127
+ inkscape:collect="always"
128
+ xlink:href="#linearGradient3873"
129
+ id="radialGradient3881"
130
+ cx="420.47626"
131
+ cy="176.68454"
132
+ fx="420.47626"
133
+ fy="176.68454"
134
+ r="124.21188"
135
+ gradientTransform="matrix(0.19105948,-0.65672497,1.4449036,0.42036247,84.848158,325.87482)"
136
+ gradientUnits="userSpaceOnUse" />
137
+ </defs>
138
+ <sodipodi:namedview
139
+ id="base"
140
+ pagecolor="#ffffff"
141
+ bordercolor="#666666"
142
+ borderopacity="1.0"
143
+ inkscape:pageopacity="0.0"
144
+ inkscape:pageshadow="2"
145
+ inkscape:zoom="1"
146
+ inkscape:cx="170.25044"
147
+ inkscape:cy="740"
148
+ inkscape:document-units="px"
149
+ inkscape:current-layer="layer1"
150
+ showgrid="false"
151
+ inkscape:snap-bbox="false"
152
+ inkscape:snap-bbox-midpoints="false"
153
+ inkscape:window-width="1333"
154
+ inkscape:window-height="856"
155
+ inkscape:window-x="0"
156
+ inkscape:window-y="0"
157
+ inkscape:window-maximized="0">
158
+ <inkscape:grid
159
+ type="xygrid"
160
+ id="grid3901"
161
+ empspacing="5"
162
+ visible="true"
163
+ enabled="true"
164
+ snapvisiblegridlinesonly="true" />
165
+ </sodipodi:namedview>
166
+ <metadata
167
+ id="metadata7">
168
+ <rdf:RDF>
169
+ <cc:Work
170
+ rdf:about="">
171
+ <dc:format>image/svg+xml</dc:format>
172
+ <dc:type
173
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
174
+ <dc:title></dc:title>
175
+ </cc:Work>
176
+ </rdf:RDF>
177
+ </metadata>
178
+ <g
179
+ inkscape:label="Layer 1"
180
+ inkscape:groupmode="layer"
181
+ id="layer1">
182
+ <g
183
+ id="g3963"
184
+ transform="matrix(0.63975588,0,0,0.63975588,121.89997,153.53014)">
185
+ <rect
186
+ ry="15"
187
+ rx="15"
188
+ y="96.362183"
189
+ x="403"
190
+ height="134"
191
+ width="187.5"
192
+ id="rect3958"
193
+ style="fill:#106bce;fill-opacity:1;stroke:none" />
194
+ <rect
195
+ ry="15"
196
+ rx="15"
197
+ y="96.362183"
198
+ x="206"
199
+ height="134"
200
+ width="200"
201
+ id="rect3917"
202
+ style="fill:#3d93f0;fill-opacity:1;stroke:none" />
203
+ <text
204
+ xml:space="preserve"
205
+ style="font-size:25.53247833px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
206
+ x="306.66592"
207
+ y="136.18573"
208
+ id="text3923"
209
+ sodipodi:linespacing="125%"><tspan
210
+ style="font-size:25.53247833px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Medium Condensed"
211
+ sodipodi:role="line"
212
+ id="tspan3925"
213
+ x="306.66592"
214
+ y="136.18573">Passenger</tspan><tspan
215
+ style="font-size:25.53247833px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Medium Condensed"
216
+ id="tspan3927"
217
+ sodipodi:role="line"
218
+ x="306.66592"
219
+ y="168.10133">+</tspan><tspan
220
+ id="tspan3929"
221
+ style="font-size:25.53247833px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Medium Condensed"
222
+ sodipodi:role="line"
223
+ x="306.66592"
224
+ y="200.01692">Nginx</tspan></text>
225
+ <rect
226
+ style="fill:#106bce;fill-opacity:1;stroke:none"
227
+ id="rect3931"
228
+ width="187.5"
229
+ height="134"
230
+ x="385"
231
+ y="96.362183" />
232
+ <text
233
+ sodipodi:linespacing="125%"
234
+ id="text3933"
235
+ y="137.68573"
236
+ x="486.66595"
237
+ style="font-size:25.53247833px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
238
+ xml:space="preserve"><tspan
239
+ id="tspan3946"
240
+ y="137.68573"
241
+ x="486.66595"
242
+ sodipodi:role="line"
243
+ style="font-size:25.53247833px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed">Management</tspan></text>
244
+ <path
245
+ sodipodi:nodetypes="scssssss"
246
+ inkscape:connector-curvature="0"
247
+ id="rect3960"
248
+ d="m 418,163.86218 172.5,0 0,51.5 c 0,8.31 -6.69,15 -15,15 l -157.5,0 c -8.31,0 -15,-6.69 -15,-15 l 0,-36.5 c 0,-8.31 6.69857,-15.37734 15,-15 z"
249
+ style="fill:#137bed;fill-opacity:1;stroke:none" />
250
+ <rect
251
+ y="163.86218"
252
+ x="385"
253
+ height="66.5"
254
+ width="187.5"
255
+ id="rect3950"
256
+ style="fill:#137bed;fill-opacity:1;stroke:none" />
257
+ <text
258
+ xml:space="preserve"
259
+ style="font-size:25.53247833px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
260
+ x="485.16595"
261
+ y="203.68573"
262
+ id="text3952"
263
+ sodipodi:linespacing="125%"><tspan
264
+ style="font-size:25.53247833px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed"
265
+ sodipodi:role="line"
266
+ x="485.16595"
267
+ y="203.68573"
268
+ id="tspan3954">Inspection</tspan></text>
269
+ </g>
270
+ <g
271
+ id="g3805"
272
+ transform="matrix(0.96875643,0,0,0.96875643,54.85768,351.22217)">
273
+ <rect
274
+ ry="10"
275
+ rx="10"
276
+ y="96.362183"
277
+ x="28"
278
+ height="77"
279
+ width="170"
280
+ id="rect2985"
281
+ style="fill:#5dc737;fill-opacity:1;stroke:none" />
282
+ <text
283
+ sodipodi:linespacing="125%"
284
+ id="text2987"
285
+ y="145.36218"
286
+ x="52"
287
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
288
+ xml:space="preserve"><tspan
289
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Bold"
290
+ y="145.36218"
291
+ x="52"
292
+ id="tspan2989"
293
+ sodipodi:role="line">Node.js</tspan></text>
294
+ </g>
295
+ <g
296
+ transform="matrix(0.96875643,0,0,0.96875643,246.56886,351.22217)"
297
+ id="g3986">
298
+ <rect
299
+ style="fill:#5dc737;fill-opacity:1;stroke:none"
300
+ id="rect3988"
301
+ width="170"
302
+ height="77"
303
+ x="28"
304
+ y="96.362183"
305
+ rx="10"
306
+ ry="10" />
307
+ <text
308
+ xml:space="preserve"
309
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
310
+ x="52"
311
+ y="145.36218"
312
+ id="text3990"
313
+ sodipodi:linespacing="125%"><tspan
314
+ sodipodi:role="line"
315
+ id="tspan3992"
316
+ x="52"
317
+ y="145.36218"
318
+ style="font-size:32px;font-style:normal;font-variant:normal;font-weight:bold;font-stretch:normal;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Bold">Node.js</tspan></text>
319
+ </g>
320
+ <path
321
+ style="fill:none;stroke:#000000;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Sstart);marker-end:url(#Arrow2Send)"
322
+ d="m 281.76628,316.63576 -68.6403,124.81129"
323
+ id="path3994"
324
+ inkscape:connector-curvature="0"
325
+ sodipodi:nodetypes="cc" />
326
+ <path
327
+ sodipodi:nodetypes="cc"
328
+ inkscape:connector-curvature="0"
329
+ id="path5004"
330
+ d="M 357.84638,444.47452 357.56679,316.65484"
331
+ style="fill:none;stroke:#000000;stroke-width:8;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Sstart);marker-end:url(#Arrow2Send)" />
332
+ <text
333
+ xml:space="preserve"
334
+ style="font-size:12.87560654px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
335
+ x="-216.75558"
336
+ y="369.31613"
337
+ id="text5006"
338
+ sodipodi:linespacing="125%"
339
+ transform="matrix(0.47513133,-0.87991489,0.87991489,0.47513133,0,0)"><tspan
340
+ sodipodi:role="line"
341
+ id="tspan5008"
342
+ x="-216.75558"
343
+ y="369.31613"
344
+ style="font-size:12.87560654px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed">High-performance</tspan><tspan
345
+ sodipodi:role="line"
346
+ x="-216.75558"
347
+ y="385.41064"
348
+ id="tspan5010"
349
+ style="font-size:12.87560654px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed">Unix channel</tspan></text>
350
+ <g
351
+ id="g5055"
352
+ transform="translate(31,183)">
353
+ <rect
354
+ ry="10"
355
+ rx="10"
356
+ y="111.36218"
357
+ x="-14"
358
+ height="57"
359
+ width="143"
360
+ id="rect5049"
361
+ style="fill:#92c61d;fill-opacity:1;stroke:none" />
362
+ <text
363
+ sodipodi:linespacing="125%"
364
+ id="text5051"
365
+ y="145.36218"
366
+ x="13"
367
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
368
+ xml:space="preserve"><tspan
369
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:condensed;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Medium Condensed"
370
+ y="145.36218"
371
+ x="13"
372
+ id="tspan5053"
373
+ sodipodi:role="line">Filesystem</tspan></text>
374
+ </g>
375
+ <path
376
+ style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Sstart);marker-end:url(#Arrow2Send)"
377
+ d="m 253,258.36218 -166,0 0,33.52872"
378
+ id="path5060"
379
+ inkscape:connector-curvature="0" />
380
+ <text
381
+ xml:space="preserve"
382
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
383
+ x="84"
384
+ y="248.36218"
385
+ id="text5444"
386
+ sodipodi:linespacing="125%"><tspan
387
+ sodipodi:role="line"
388
+ id="tspan5446"
389
+ x="84"
390
+ y="248.36218"
391
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed">Static file acceleration</tspan></text>
392
+ <g
393
+ id="g6238"
394
+ transform="translate(3,133)">
395
+ <g
396
+ transform="translate(38,-12)"
397
+ id="g5462">
398
+ <path
399
+ style="fill:#6fb6de;fill-opacity:1;stroke:none"
400
+ d="m 654,73.875 c -13.71265,0 -24.82895,11.116298 -24.82895,24.828947 0,9.155773 4.99343,17.101053 12.36883,21.405843 -14.03045,5.70434 -24.05304,20.7911 -24.05304,38.47574 0,10.01686 3.24256,19.1791 8.58059,26.28947 l 55.86514,0 c 5.33803,-7.11037 8.58059,-16.27261 8.58059,-26.28947 0,-17.68464 -10.02259,-32.7714 -24.05304,-38.47574 7.3754,-4.30479 12.36883,-12.25007 12.36883,-21.405843 C 678.82895,84.991298 667.71265,73.875 654,73.875 z"
401
+ id="path5448"
402
+ inkscape:connector-curvature="0" />
403
+ <path
404
+ style="fill:none;stroke:#3389ff;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
405
+ d="m 644,106.36218 c 0,0 9.5,12 20,0"
406
+ id="path5456"
407
+ inkscape:connector-curvature="0"
408
+ sodipodi:nodetypes="cc" />
409
+ <path
410
+ sodipodi:type="arc"
411
+ style="fill:#3389ff;fill-opacity:1;stroke:none"
412
+ id="path5458"
413
+ sodipodi:cx="572.5"
414
+ sodipodi:cy="103.86218"
415
+ sodipodi:rx="3"
416
+ sodipodi:ry="3"
417
+ d="m 575.5,103.86218 c 0,1.65686 -1.34315,3 -3,3 -1.65685,0 -3,-1.34314 -3,-3 0,-1.65685 1.34315,-3 3,-3 1.65685,0 3,1.34315 3,3 z"
418
+ transform="translate(72.5,-9.5)" />
419
+ <path
420
+ transform="translate(90.5,-9.5)"
421
+ d="m 575.5,103.86218 c 0,1.65686 -1.34315,3 -3,3 -1.65685,0 -3,-1.34314 -3,-3 0,-1.65685 1.34315,-3 3,-3 1.65685,0 3,1.34315 3,3 z"
422
+ sodipodi:ry="3"
423
+ sodipodi:rx="3"
424
+ sodipodi:cy="103.86218"
425
+ sodipodi:cx="572.5"
426
+ id="path5460"
427
+ style="fill:#3389ff;fill-opacity:1;stroke:none"
428
+ sodipodi:type="arc" />
429
+ </g>
430
+ <text
431
+ sodipodi:linespacing="125%"
432
+ id="text5468"
433
+ y="197.36218"
434
+ x="691.82397"
435
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
436
+ xml:space="preserve"><tspan
437
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans"
438
+ y="197.36218"
439
+ x="691.82397"
440
+ id="tspan5470"
441
+ sodipodi:role="line">You only deal with one</tspan><tspan
442
+ id="tspan5472"
443
+ style="font-size:18px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans"
444
+ y="219.86218"
445
+ x="691.82397"
446
+ sodipodi:role="line">thing. Much easier.</tspan></text>
447
+ </g>
448
+ <path
449
+ style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;marker-start:url(#Arrow2Mstart)"
450
+ d="m 525,256.36218 119,0"
451
+ id="path5474"
452
+ inkscape:connector-curvature="0" />
453
+ <path
454
+ style="fill:url(#radialGradient3871);fill-opacity:1;stroke:url(#radialGradient3881);stroke-width:3;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none"
455
+ d="m 365.31316,30.858157 c -31.87555,3.054126 -58.12241,15.226805 -67.31975,29.681083 -33.71321,4.861688 -58.83608,21.896149 -57.14883,39.5058 1.79097,18.69207 33.103,30.98397 69.93739,27.45472 9.48641,-0.90893 18.42234,-2.79353 26.41904,-5.38809 14.33469,10.45714 41.87556,15.92236 72.75561,12.96362 43.98136,-4.21403 78.07668,-23.89729 76.15403,-43.963782 -1.29771,-13.544074 -18.69292,-23.79842 -43.3747,-27.739499 0.21494,-1.421792 0.26078,-2.848192 0.12347,-4.281294 C 440.98944,39.573986 406.2708,26.93384 365.31316,30.858157 z"
456
+ id="path6248"
457
+ inkscape:connector-curvature="0" />
458
+ <text
459
+ xml:space="preserve"
460
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#464646;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
461
+ x="330"
462
+ y="96.362183"
463
+ id="text6276"
464
+ sodipodi:linespacing="125%"><tspan
465
+ sodipodi:role="line"
466
+ id="tspan6278"
467
+ x="330"
468
+ y="96.362183"
469
+ style="font-size:36px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:condensed;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Medium Condensed;fill:#464646;fill-opacity:1">Web</tspan></text>
470
+ <path
471
+ style="fill:none;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:15,15;stroke-dashoffset:0"
472
+ d="m 375,141.36218 0,70"
473
+ id="path6293"
474
+ inkscape:connector-curvature="0" />
475
+ <path
476
+ transform="matrix(18.915507,0,0,19.762923,-6593.8118,-7739.4215)"
477
+ d="m 383,416.36218 a 5,6 0 1 1 -10,0 5,6 0 1 1 10,0 z"
478
+ sodipodi:ry="6"
479
+ sodipodi:rx="5"
480
+ sodipodi:cy="416.36218"
481
+ sodipodi:cx="378"
482
+ id="path6507"
483
+ style="fill:#ffffff;stroke:#000000;stroke-width:0.17735070000000000;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0;fill-opacity:1"
484
+ sodipodi:type="arc" />
485
+ <text
486
+ xml:space="preserve"
487
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Arial;-inkscape-font-specification:Arial"
488
+ x="558.68427"
489
+ y="439.86218"
490
+ id="text6485"
491
+ sodipodi:linespacing="125%"><tspan
492
+ sodipodi:role="line"
493
+ id="tspan6487"
494
+ x="558.68427"
495
+ y="439.86218"
496
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:500;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Medium Condensed">Taken care for you:</tspan><tspan
497
+ sodipodi:role="line"
498
+ x="558.68427"
499
+ y="459.86218"
500
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed"
501
+ id="tspan6489">Process spawning</tspan><tspan
502
+ sodipodi:role="line"
503
+ x="558.68427"
504
+ y="479.86218"
505
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed"
506
+ id="tspan6491">Process scaling</tspan><tspan
507
+ sodipodi:role="line"
508
+ x="558.68427"
509
+ y="499.86218"
510
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed"
511
+ id="tspan6493">Load balancing</tspan><tspan
512
+ sodipodi:role="line"
513
+ x="558.68427"
514
+ y="519.86218"
515
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed"
516
+ id="tspan6495">Multi-core support</tspan><tspan
517
+ sodipodi:role="line"
518
+ x="558.68427"
519
+ y="539.86218"
520
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed"
521
+ id="tspan6497">Supervision</tspan><tspan
522
+ sodipodi:role="line"
523
+ x="558.68427"
524
+ y="559.86218"
525
+ style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:condensed;text-align:center;line-height:125%;writing-mode:lr-tb;text-anchor:middle;font-family:Pluto Sans;-inkscape-font-specification:Pluto Sans Condensed"
526
+ id="tspan6499">...and more!</tspan></text>
527
+ <path
528
+ sodipodi:type="arc"
529
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1.44975093;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
530
+ id="path6501"
531
+ sodipodi:cx="378"
532
+ sodipodi:cy="416.36218"
533
+ sodipodi:rx="5"
534
+ sodipodi:ry="6"
535
+ d="m 383,416.36218 a 5,6 0 1 1 -10,0 5,6 0 1 1 10,0 z"
536
+ transform="matrix(1.4620453,0,0,1.3017044,-170.15311,-155.1183)" />
537
+ <path
538
+ transform="matrix(2.095475,0,0,1.9962292,-379.08955,-432.29214)"
539
+ d="m 383,416.36218 a 5,6 0 1 1 -10,0 5,6 0 1 1 10,0 z"
540
+ sodipodi:ry="6"
541
+ sodipodi:rx="5"
542
+ sodipodi:cy="416.36218"
543
+ sodipodi:cx="378"
544
+ id="path6503"
545
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
546
+ sodipodi:type="arc" />
547
+ <path
548
+ sodipodi:type="arc"
549
+ style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:1;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
550
+ id="path6505"
551
+ sodipodi:cx="378"
552
+ sodipodi:cy="416.36218"
553
+ sodipodi:rx="5"
554
+ sodipodi:ry="6"
555
+ d="m 383,416.36218 a 5,6 0 1 1 -10,0 5,6 0 1 1 10,0 z"
556
+ transform="matrix(3,0,0,3,-682,-834.72437)" />
557
+ </g>
558
+ </svg>