close
Warning:
Can't synchronize with repository "(default)" (The repository directory has changed, you should resynchronize the repository with: trac-admin $ENV repository resync '(default)'). Look in the Trac log for more information.
- Timestamp:
-
2015-05-25T08:23:07-07:00 (10 years ago)
- Author:
-
trac
- Comment:
-
--
Legend:
- Unmodified
- Added
- Removed
- Modified
-
v2
|
v3
|
|
| 1 | [[PageOutline]] |
| 2 | |
1 | 3 | = Trac with FastCGI = |
2 | 4 | |
3 | | [http://www.fastcgi.com/ FastCGI] interface allows Trac to remain resident much like with [wiki:TracModPython mod_python]. It is faster than external CGI interfaces which must start a new process for each request. However, unlike mod_python, FastCGI supports [http://httpd.apache.org/docs/suexec.html Apache SuEXEC], i.e. run with different permissions than web server. Additionally, it is supported by much wider variety of web servers. |
4 | | |
5 | | '''Note for Windows:''' Trac's FastCGI does not run under Windows, as Windows does not implement `Socket.fromfd`, which is used by `_fcgi.py`. If you want to connect to IIS, you may want to try [trac:TracOnWindowsIisAjp AJP]. |
| 5 | [http://www.fastcgi.com/ FastCGI] interface allows Trac to remain resident much like with [wiki:TracModPython mod_python] or [wiki:TracModWSGI mod_wsgi]. It is faster than external CGI interfaces which must start a new process for each request. Additionally, it is supported by much wider variety of web servers. |
| 6 | |
| 7 | Note that unlike mod_python, FastCGI supports [http://httpd.apache.org/docs/suexec.html Apache SuEXEC], i.e. run with different permissions than web server running with (`mod_wsgi` supports the `WSGIDaemonProcess` with user / group parameters to achieve the same effect). |
| 8 | |
| 9 | '''Note for Windows:''' Trac's FastCGI does not run under Windows, as Windows does not implement `Socket.fromfd`, which is used by `_fcgi.py`. If you want to connect to IIS, you may want to try [trac:TracOnWindowsIisAjp AJP]/[trac:TracOnWindowsIisAjp ISAPI]. |
| 10 | |
| 11 | [[PageOutline(2-3,Overview,inline)]] |
| 12 | |
6 | 13 | |
7 | 14 | == Simple Apache configuration == |
… |
… |
|
10 | 17 | `mod_fcgid` (preferred). The latter is more up-to-date. |
11 | 18 | |
12 | | ==== setup with `mod_fastcgi` ==== |
| 19 | The following sections focus on the FCGI specific setup, see also [wiki:TracModWSGI#ConfiguringAuthentication] for configuring the authentication in Apache. |
| 20 | |
| 21 | Regardless of which cgi module is used, be sure the web server has executable permissions on the cgi-bin folder. While FastCGI will throw specific permissions errors, mod_fcgid will throw an ambiguous error if this has not been done. (Connection reset by peer: mod_fcgid: error reading data from FastCGI server) |
| 22 | |
| 23 | === Set up with `mod_fastcgi` === |
13 | 24 | `mod_fastcgi` uses `FastCgiIpcDir` and `FastCgiConfig` directives that should be added to an appropriate Apache configuration file: |
14 | 25 | {{{ |
… |
… |
|
27 | 38 | calling `trac.fcgi` instead of `trac.cgi`. |
28 | 39 | |
29 | | You can set up the `TRAC_ENV` as an overall default: |
| 40 | Add the following to the Apache configuration file (below the `FastCgiIpcDir` line) if you intend to set up the `TRAC_ENV` as an overall default: |
30 | 41 | {{{ |
31 | 42 | FastCgiConfig -initial-env TRAC_ENV=/path/to/env/trac |
32 | 43 | }}} |
33 | 44 | |
34 | | Or you can serve multiple Trac projects in a directory like: |
| 45 | Alternatively, you can serve multiple Trac projects in a directory by adding this: |
35 | 46 | {{{ |
36 | 47 | FastCgiConfig -initial-env TRAC_ENV_PARENT_DIR=/parent/dir/of/projects |
37 | 48 | }}} |
38 | 49 | |
39 | | ==== setup with `mod_fcgid` ==== |
| 50 | === Set up with `mod_fcgid` === |
40 | 51 | Configure `ScriptAlias` (see TracCgi for details), but call `trac.fcgi` |
41 | 52 | instead of `trac.cgi`. Note that slash at the end - it is important. |
… |
… |
|
44 | 55 | }}} |
45 | 56 | |
46 | | To setup Trac environment for `mod_fcgid` it is necessary to use |
| 57 | To set up Trac environment for `mod_fcgid` it is necessary to use |
47 | 58 | `DefaultInitEnv` directive. It cannot be used in `Directory` or |
48 | 59 | `Location` context, so if you need to support multiple projects, try |
… |
… |
|
53 | 64 | }}} |
54 | 65 | |
55 | | ==== alternative environment setup ==== |
56 | | A better method to specify path to Trac environment it to embed the path |
| 66 | === alternative environment setup === |
| 67 | A better method to specify path to Trac environment is to embed the path |
57 | 68 | into `trac.fcgi` script itself. That doesn't require configuration of server |
58 | 69 | environment variables, works for both FastCgi modules |
… |
… |
|
93 | 104 | |
94 | 105 | After doing this, we will just have to create a new rule managed by the SCGI handler to access Trac. It can be created in a new virtual server, trac.example.net for instance, and will only need two rules. The '''default''' one will use the SCGI handler associated to the previously created information source. |
95 | | The second rule will be there to serve the few static files needed to correctly display the Trac interface. Create it as ''Directory rule'' for ''/chrome/common'' and just set it to the ''Static files'' handler and with a ''Document root'' that points to the appropriate files: ''/usr/share/trac/htdocs/'' |
| 106 | The second rule will be there to serve the few static files needed to correctly display the Trac interface. Create it as ''Directory rule'' for ''/common'' and just set it to the ''Static files'' handler and with a ''Document root'' that points to the appropriate files: ''$TRAC_LOCAL/htdocs/'' (where $TRAC_LOCAL is a directory defined by the user or the system administrator to place local trac resources). |
96 | 107 | |
97 | 108 | Note:\\ |
… |
… |
|
101 | 112 | sudo apt-get install python-flup |
102 | 113 | }}} |
| 114 | |
103 | 115 | |
104 | 116 | == Simple Lighttpd Configuration == |
… |
… |
|
130 | 142 | using `bin-environment` (as in the section above on Apache configuration). |
131 | 143 | |
132 | | Note that lighttpd has a bug related to 'SCRIPT_NAME' and 'PATH_INFO' when the uri of fastcgi.server is '/' instead of '/trac' in this example, see #Trac2418. This should be fixed since lighttpd 1.4.23, and you may need to add `"fix-root-scriptname" => "enable"` as parameter of fastcgi.server. |
| 144 | Note that lighttpd has a bug related to 'SCRIPT_NAME' and 'PATH_INFO' when the uri of fastcgi.server is '/' instead of '/trac' in this example (see [trac:#2418]). This is fixed in lighttpd 1.5, and under lighttpd 1.4.23 or later the workaround is to add `"fix-root-scriptname" => "enable"` as a parameter of fastcgi.server. |
133 | 145 | |
134 | 146 | For using two projects with lighttpd add the following to your `lighttpd.conf`: |
… |
… |
|
159 | 171 | Note that the above will result in different processes in any event, even |
160 | 172 | if both are running from the same `trac.fcgi` script. |
| 173 | |
161 | 174 | {{{ |
162 | 175 | #!div class=important |
163 | 176 | '''Note''' It's very important the order on which server.modules are loaded, if mod_auth is not loaded '''BEFORE''' mod_fastcgi, then the server will fail to authenticate the user. |
164 | 177 | }}} |
| 178 | |
165 | 179 | For authentication you should enable mod_auth in lighttpd.conf 'server.modules', select auth.backend and auth rules: |
166 | 180 | {{{ |
… |
… |
|
210 | 224 | server.modules += ("mod_alias") |
211 | 225 | |
212 | | # Setup an alias for the static resources |
| 226 | # Set up an alias for the static resources |
213 | 227 | alias.url = ("/trac/chrome/common" => "/usr/share/trac/htdocs") |
214 | 228 | |
… |
… |
|
276 | 290 | For details about languages specification see [trac:TracFaq TracFaq] question 2.13. |
277 | 291 | |
278 | | Other important information like [http://trac.lighttpd.net/trac/wiki/TracInstall this updated TracInstall page], [wiki:TracCgi#MappingStaticResources and this] are useful for non-fastcgi specific installation aspects. |
279 | | |
280 | | If you use trac-0.9, read [http://lists.edgewall.com/archive/trac/2005-November/005311.html about small bug] |
| 292 | Other important information like the [wiki:TracInstall#MappingStaticResources mapping static resources advices] are useful for non-fastcgi specific installation aspects. |
| 293 | ] |
281 | 294 | |
282 | 295 | Relaunch lighttpd, and browse to `http://yourhost.example.org/trac` to access Trac. |
… |
… |
|
284 | 297 | Note about running lighttpd with reduced permissions: |
285 | 298 | |
286 | | If nothing else helps and trac.fcgi doesn't start with lighttpd settings `server.username = "www-data"`, `server.groupname = "www-data"`, then in the `bin-environment` section set `PYTHON_EGG_CACHE` to the home directory of `www-data` or some other directory accessible to this account for writing. |
| 299 | If nothing else helps and trac.fcgi doesn't start with lighttpd settings `server.username = "www-data"`, `server.groupname = "www-data"`, then in the `bin-environment` section set `PYTHON_EGG_CACHE` to the home directory of `www-data` or some other directory accessible to this account for writing. |
287 | 300 | |
288 | 301 | |
… |
… |
|
292 | 305 | |
293 | 306 | !LiteSpeed web server is an event-driven asynchronous Apache replacement designed from the ground-up to be secure, scalable, and operate with minimal resources. !LiteSpeed can operate directly from an Apache config file and is targeted for business-critical environments. |
294 | | |
295 | | === Setup === |
296 | 307 | |
297 | 308 | 1. Please make sure you have first have a working install of a Trac project. Test install with “tracd” first. |
… |
… |
|
354 | 365 | }}} |
355 | 366 | |
| 367 | |
356 | 368 | == Simple Nginx Configuration == |
357 | 369 | |
358 | | 1. Nginx configuration snippet - confirmed to work on 0.6.32 |
359 | | {{{ |
| 370 | Nginx is able to communicate with FastCGI processes, but can not spawn them. So you need to start FastCGI server for Trac separately. |
| 371 | |
| 372 | 1. Nginx configuration with basic authentication handled by Nginx - confirmed to work on 0.6.32 |
| 373 | {{{ |
360 | 374 | server { |
361 | 375 | listen 10.9.8.7:443; |
… |
… |
|
375 | 389 | if ($uri ~ ^/(.*)) { |
376 | 390 | set $path_info /$1; |
| 391 | } |
| 392 | |
| 393 | # it makes sense to serve static resources through Nginx |
| 394 | location /chrome/ { |
| 395 | alias /home/trac/instance/static/htdocs/; |
377 | 396 | } |
378 | 397 | |
… |
… |
|
396 | 415 | # (Or ``fastcgi_param SCRIPT_NAME /some/prefix``.) |
397 | 416 | fastcgi_param SCRIPT_NAME ""; |
398 | | fastcgi_param PATH_INFO $path_info; |
| 417 | fastcgi_param PATH_INFO $fastcgi_script_name; |
399 | 418 | |
400 | 419 | ## WSGI NEEDED VARIABLES - trac warns about them |
… |
… |
|
403 | 422 | fastcgi_param SERVER_PORT $server_port; |
404 | 423 | fastcgi_param SERVER_PROTOCOL $server_protocol; |
405 | | fastcgi_param QUERY_STRING $query_string; |
406 | | |
407 | | # for authentication to work |
| 424 | fastcgi_param QUERY_STRING $query_string; |
| 425 | |
| 426 | # For Nginx authentication to work - do not forget to comment these |
| 427 | # lines if not using Nginx for authentication |
408 | 428 | fastcgi_param AUTH_USER $remote_user; |
409 | 429 | fastcgi_param REMOTE_USER $remote_user; |
| 430 | |
| 431 | # for ip to work |
| 432 | fastcgi_param REMOTE_ADDR $remote_addr; |
| 433 | |
| 434 | # For attchments to work |
| 435 | fastcgi_param CONTENT_TYPE $content_type; |
| 436 | fastcgi_param CONTENT_LENGTH $content_length; |
410 | 437 | } |
411 | 438 | } |
412 | 439 | }}} |
413 | | |
414 | | 2. Modified trac.fcgi: |
415 | | |
416 | | {{{ |
| 440 | 1. Modified trac.fcgi: |
| 441 | {{{ |
417 | 442 | #!/usr/bin/env python |
418 | 443 | import os |
… |
… |
|
445 | 470 | |
446 | 471 | }}} |
447 | | |
448 | | 3. reload nginx and launch trac.fcgi like that: |
449 | | |
450 | | {{{ |
| 472 | 1. reload nginx and launch trac.fcgi like that: |
| 473 | {{{#!sh |
451 | 474 | trac@trac.example ~ $ ./trac-standalone-fcgi.py |
452 | 475 | }}} |