Index.
18-Jan-2012: Initial release. 25-Nov-2012: adjusted for Slackware. 04-Jan-2013: improved some nginx.conf settings. 31-Oct-2013: small fix to nginx.conf
Introduction.
For maintenance of our Home Server we need an internal web server. On this server we can install things for example like phpMyAdmin to have easy access to our MySQL server. We could also create a Intra-net server, but in a Home environment that is not so useful.
Slackware’s standard web server is Apache, but I have seen that nginx (engine-X) performs better and uses less memory. The performance issue is not so important for a maintenance web server, but nginx is more flexible to configure compared with Apache. Each virtual server can have it’s own special setup, and using several virtual servers for a maintenance server is a good plan. For this article I start with just one virtual server.
To use php with nginx you need to have php-fpm. This is the Fast Process Manager that takes a php request from nginx and hands it over to php, and then returns the processed results back to nginx. Since Slackware 14.0 the php package is build with php-fpm support so you can use the shipped package. If you use an older Slackware, you must build php yourself to include php-fpm support.
[important]This server is not intended to be your external web server, but it is possible to do that. The setup below is NOT suited for external use! You need to make several changes to let it function as an and external server. My advice is use a separate virtual server.[/important]
Installation.
Install all the software that we need to run nginx on our Home Server: From the standard Slackware distribution we need the following packages:
Series l: aspell-0.60.6-i486-1 aspell-en-6.0_0-noarch-4 enchant-1.5.0-i486-1 icu4c-49.1.2-i486-1 libmcrypt-2.5.8-i486-1 libxml2-2.8.0-i486-1 libxslt-1.1.26-i486-2 t1lib-5.1.2-i486-3 Series n: php-5.4.7-i486-1 Series x: libX11-1.5.0-i486-1 libXau-1.0.7-i486-1 libXdmcp-1.1.1-i486-1 libXpm-3.5.10-i486-1 libxcb-1.8.1-i486-1
Using the buildscripts build the following packages:
nginx-1.2.5 fcgi-2.4.0 fcgiwrap-1.0.3 spawn-fcgi-1.6.3
The PHP package needs some configuration, here is the diff output of /etc/httpd/php.ini:
--- php.ini-production 2012-09-14 21:41:46.000000000 +0200 +++ php.ini 2012-11-22 14:08:37.797256284 +0100 @@ -583,7 +583,7 @@ ; Example: ;error_log = php_errors.log ; Log errors to syslog (Event Log on NT, not valid in Windows 95). -;error_log = syslog +error_log = syslog ;windows.show_crt_warning ; Default value: 0 @@ -669,7 +669,7 @@ ; Its value may be 0 to disable the limit. It is ignored if POST data reading ; is disabled through enable_post_data_reading. ; http://php.net/post-max-size -post_max_size = 8M +post_max_size = 32M ; Automatically add files before PHP document. ; http://php.net/auto-prepend-file @@ -797,7 +797,7 @@ ; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize -upload_max_filesize = 2M +upload_max_filesize = 32M ; Maximum number of files that can be uploaded via a single request max_file_uploads = 20 @@ -956,7 +956,7 @@ [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone -;date.timezone = +date.timezone = Europe/Amsterdam ; http://php.net/date.default-latitude ;date.default_latitude = 31.7667
Then the changes in /etc/php-fpm.conf:
--- php-fpm.conf.default 2012-09-14 21:44:11.000000000 +0200 +++ php-fpm.conf 2012-11-21 14:32:23.198834635 +0100 @@ -148,7 +148,8 @@ ; specific port; ; '/path/to/unix/socket' - to listen on a unix socket. ; Note: This value is mandatory. -listen = 127.0.0.1:9000 +;listen = 127.0.0.1:9000 +listen = /var/run/php-fpm.sock ; Set listen(2) backlog. ; Default Value: 128 (-1 on FreeBSD and OpenBSD) @@ -159,9 +160,9 @@ ; BSD-derived systems allow connections regardless of permissions. ; Default Values: user and group are set as the running user ; mode is set to 0666 -;listen.owner = apache -;listen.group = apache -;listen.mode = 0666 +listen.owner = apache +listen.group = apache +listen.mode = 0660 ; List of ipv4 addresses of FastCGI clients which are allowed to connect. ; Equivalent to the FCGI_WEB_SERVER_ADDRS environment variable in the original
The configuration file /etc/nginx/nginx.xonf:
# /etc/nginx/nginx.conf at homsrv.wpl.ym worker_processes 1; error_log /var/log/nginx/error.log; events { worker_connections 64; accept_mutex_delay 50ms; } http { include mime.types; default_type application/octet-stream; charset utf-8; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; sendfile on; keepalive_timeout 300 300; gzip on; gzip_comp_level 1; gzip_min_length 100; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; gzip_disable "MSIE [1-6]\."; # Upstream to abstract backend connection(s) for PHP. upstream php { server unix:/var/run/php-fpm.sock; } upstream cgi { server 127.0.0.1:9001; } server { listen 10.126.160.253:80; listen [2001:1af8:fecf:7ea0::fd]:80; listen 10.126.161.2:80; listen [2001:1af8:fecf:7ea1::2]:80; server_name homsrv.wpl.ym; root /srv/http/htdocs; access_log /var/log/nginx/access.log main; error_log /var/log/nginx/error.log; index index.html index.php; location ~ \.php$ { include fastcgi.conf; fastcgi_pass php; } } include sites.d/*; }
Now, for the first time start the server like this:
root@homsrv:~# chmod 755 /etc/rc.d/rc.php-fpm root@homsrv:~# /etc/rc.d/rc.php-fpm start Starting php-fpm done root@homsrv:~# /etc/rc.d/init.d/fcgiwrap start Starting fcgiwrap for user: apache dspam root@homsrv:~# chmod 755 /etc/rc.d/rc.httpd root@homsrv:~# mkdir -p /srv/http/htdocs/ root@homsrv:~# /etc/rc.d/rc.httpd start Starting Nginx server daemon... root@homsrv:~#
Use pkgtool to activate fcgiwrap to start at boot.
That’s it. In the support archive is a sample home page with some links to existing and feature utilities.
Download.
See the download page for the script and configuration files.