// All source is stored in /usr/local/src
// Source tarballs are in /usr/local/src/tarballs
// nginx web server install on FreeBSD 6.2
// Links:
// http://wiki.codemongers.com/Nginx
// http://blog.kovyrin.net/category/web-tech/nginx/
// http://blog.kovyrin.net/2006/05/30/nginx-php-fastcgi-howto/
// http://blog.kovyrin.net/files/nginx-conf/php-fcgi.nginx.conf
// http://sysoev.ru/nginx/download.html
su cd /usr/local/src/tarballs fetch http://sysoev.ru/nginx/nginx-0.5.20.tar.gz cd .. tar zxvf tarballs/nginx-0.5.20.tar.gz cd tarballs/nginx-0.5.20 less README The English documentation is available at http://nginx.net # Some configuration options: PREFIX: Let -prefix= default to /usr/local/nginx --with-cc-opt="-I /usr/local/include" # from http://wiki.codemongers.com/NginxInstall: # --with-cc-opt=OPTIONS - Additional parameters which will be added to the variable CFLAGS. # With the use of the system library PCRE in FreeBSD, it is necessary to indicate # --with-cc-opt="-I /usr/local/include". If we are using select() and it is necessary # to increase the number of file descriptors, then this also can be assigned here: # --with-cc-opt="-D FD_SETSIZE=2048". # Look for configuration options: ./configure --help # Make directory for log files (my preferences!) mkdir /var/log/nginx mkdir /var/log/nginx/drupal chmod -R 777 /var/log/nginx mkdir /usr/local/etc/nginx chown www /usr/local/etc/nginx chmod 775 /usr/local/etc/nginx # I tell it where to put the nginx binary. Specifically not in the path. Scripts will start it. # I like to put conf files in /usr/local/etc/ # I like to put pid files in /var/run # I have PCRE in /usr/local/include (look for pcre.h) ./configure \ --sbin-path=/usr/local/nginx/nginx \ --conf-path=/usr/local/etc/nginx/nginx.conf \ --pid-path=/var/run/nginx.pid --with-cc-opt="-I /usr/local/include/pcre" Configuration summary + threads are not used + using system PCRE library + OpenSSL library is not used + md5 library is not used + sha1 library is not used + using system zlib library nginx path prefix: "/usr/local/nginx" nginx binary file: "/usr/local/nginx/nginx" nginx configuration file: "/usr/local/etc/nginx/nginx.conf" nginx pid file: "/var/run/nginx.pid" nginx error log file: "/usr/local/nginx/logs/error.log" nginx http access log file: "/usr/local/nginx/logs/access.log" nginx http client request body temporary files: "/usr/local/nginx/client_body_temp" nginx http proxy temporary files: "/usr/local/nginx/proxy_temp" nginx http fastcgi temporary files: "/usr/local/nginx/fastcgi_temp" make make install cd /usr/local/nginx total 1492 drwxr-xr-x 2 root wheel 512 May 16 15:56 html drwxr-xr-x 2 root wheel 512 May 16 15:56 logs -rwxr-xr-x 1 root wheel 1495320 May 16 15:56 nginx v4# ls -l /usr/local/etc/nginx total 28 -rw-r--r-- 1 root wheel 2837 May 16 15:56 koi-utf -rw-r--r-- 1 root wheel 2223 May 16 15:56 koi-win -rw-r--r-- 1 root wheel 2944 May 16 15:56 mime.types -rw-r--r-- 1 root wheel 2944 May 16 15:56 mime.types.default -rw-r--r-- 1 root wheel 2702 May 16 15:40 nginx.conf -rw-r--r-- 1 root wheel 2702 May 16 15:56 nginx.conf.default -rw-r--r-- 1 root wheel 3610 May 16 15:56 win-utf # Here's my nginx.conf file # Note that I serve Drupal (drupal.org) with it. # I use PHP5 and fastcgi (with spawn-fcgi from the lighttpd installation) ############################################## user www; worker_processes 1; error_log /var/log/nginx/error.log debug; pid /var/log/nginx/nginx.pid; events { worker_connections 1024; } http { include /usr/local/etc/nginx/mime.types; default_type application/octet-stream; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { # Test operations on port 81. #listen 81; # Normal operations on port 80. listen 80; server_name domain.com alias1.domain.com alias2.domain.com; access_log /var/log/nginx/drupal/access.log; location / { index index.php; root /var/www/drupal; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { include /usr/local/etc/nginx/fastcgi.conf; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } } } ################################################## # Here's my fastcgi.conf file: ################################################## #fastcgi.conf fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_FILENAME /var/www/drupal$fastcgi_script_name; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; ################################################## # Test nginx configuration /usr/local/nginx/nginx -t -c /usr/local/etc/nginx/nginx.conf 2007/05/16 16:10:37 [info] 6369#0: the configuration file /usr/local/etc/nginx/nginx.conf syntax is ok 2007/05/16 16:10:37 [info] 6369#0: the configuration file /usr/local/etc/nginx/nginx.conf was tested successfully # Run it on port 81. Note that conf file was modified. Change it back for production use. # First spawn an FCGI process to pass PHP scripts to. # php was compiled like this: # ./configure --enable-cgi --enable-fastcgi --enable-force-redirect (plus more flags) # so PHP resides in /usr/local/bin/ # Note I specified port 9000 in the nginx.conf file. Must match here: /usr/local/bin/spawn-fcgi -f /usr/local/bin/php -a 127.0.0.1 -p 9000 -u www // output: spawn-fcgi.c.190: child spawned successfully: PID: 6414 # Then start the nginx. /usr/local/nginx/nginx -c /usr/local/etc/nginx/nginx.conf ps ax | grep nginx // output: // 6425 ?? Ss 0:00.00 nginx: master process /usr/local/nginx/nginx -c /usr/local/etc/nginx/nginx.conf (nginx) // 6426 ?? S 0:00.00 nginx: worker process (nginx) # Now we have to try it on port 80 to see if Drupal works # Graceful shutdown of server kill -15 6425 # Edit .conf file, restart: /usr/local/nginx/nginx -c /usr/local/etc/nginx/nginx.conf ps ax | grep nginx // output: // 6447 ?? Ss 0:00.00 nginx: master process /usr/local/nginx/nginx -c /usr/local/etc/nginx/nginx.conf (nginx) // 6448 ?? S 0:00.00 nginx: worker process (nginx) # restart the server gracefully if necessary. Just need pid. kill -HUP 6447