Fastcgi on nginx » History » Version 14
Wim Dumon, 05/18/2011 11:43 PM
| 1 | 13 | Peter Mortensen | h1. FastCGI on nginx |
|---|---|---|---|
| 2 | 1 | Pieter Libin | |
| 3 | {{toc}} |
||
| 4 | |||
| 5 | |||
| 6 | h3. About nginx |
||
| 7 | |||
| 8 | 3 | Koen Deforche | On paper, nginx is an excellent choice for use as a reverse proxy (together with wthttpd), or for deploying Wt applications using FastCGI, especially if you are using server-initiated updates (server push). |
| 9 | 1 | Pieter Libin | |
| 10 | 13 | Peter Mortensen | The reason is that nginx, like wthttpd, is completely based on asynchronous I/O, and therefore scales easily to many open connections (unlike other web servers such as Apache, lighttpd, etc.). Server-initiated updates use an open connection for every web client. |
| 11 | 1 | Pieter Libin | |
| 12 | We have tested nginx succesfully for both its use as a reverse proxy or for FastCGI deployment of Wt applications. Its FastCGI implementation is a bit clumsy, but newer versions of nginx (>= 0.7.31) than the version currently available in ubuntu should improve on that. |
||
| 13 | |||
| 14 | |||
| 15 | 13 | Peter Mortensen | h3. Ubuntu configuration |
| 16 | 1 | Pieter Libin | |
| 17 | * Installing nginx and spawn-fcgi (which comes with lighttpd): |
||
| 18 | |||
| 19 | <pre> |
||
| 20 | $ sudo apt-get install nginx lighttpd |
||
| 21 | </pre> |
||
| 22 | |||
| 23 | * Start your application (linked against wtfcgi) using spawn-fcgi. Spawn-fcgi wraps the FastCGI application to listen to a socket or network connection. |
||
| 24 | |||
| 25 | <pre> |
||
| 26 | $ spawn-fcgi -n -f ../../build/examples/hello/hello.wt -a 0.0.0.0 -p 9091 |
||
| 27 | </pre> |
||
| 28 | |||
| 29 | 13 | Peter Mortensen | * Edit your nginx configuration to redirect a particular URL to your application (replace all occurences of /hello.wt with the path for your application!): |
| 30 | 1 | Pieter Libin | |
| 31 | <pre> |
||
| 32 | location /hello.wt { |
||
| 33 | fastcgi_pass 127.0.0.1:9091; |
||
| 34 | |||
| 35 | fastcgi_param QUERY_STRING $query_string; |
||
| 36 | fastcgi_param REQUEST_METHOD $request_method; |
||
| 37 | fastcgi_param CONTENT_TYPE $content_type; |
||
| 38 | fastcgi_param CONTENT_LENGTH $content_length; |
||
| 39 | |||
| 40 | if ($document_uri ~ "^/hello.wt/(.*)") { |
||
| 41 | set $apache_path_info /$1; |
||
| 42 | } |
||
| 43 | |||
| 44 | fastcgi_param SCRIPT_NAME /hello.wt; |
||
| 45 | fastcgi_param PATH_INFO $apache_path_info; |
||
| 46 | fastcgi_param REQUEST_URI $request_uri; |
||
| 47 | fastcgi_param DOCUMENT_URI $document_uri; |
||
| 48 | fastcgi_param DOCUMENT_ROOT $document_root; |
||
| 49 | fastcgi_param SERVER_PROTOCOL $server_protocol; |
||
| 50 | |||
| 51 | fastcgi_param GATEWAY_INTERFACE CGI/1.1; |
||
| 52 | fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; |
||
| 53 | |||
| 54 | fastcgi_param REMOTE_ADDR $remote_addr; |
||
| 55 | fastcgi_param REMOTE_PORT $remote_port; |
||
| 56 | fastcgi_param SERVER_ADDR $server_addr; |
||
| 57 | fastcgi_param SERVER_PORT $server_port; |
||
| 58 | fastcgi_param SERVER_NAME $server_name; |
||
| 59 | } |
||
| 60 | </pre> |
||
| 61 | |||
| 62 | 3 | Koen Deforche | * Reload (or restart) your nginx server and you are ready to go: |
| 63 | 1 | Pieter Libin | |
| 64 | $ sudo /etc/init.d/nginx restart |