X-Git-Url: http://git.vanrenterghem.biz/git.ikiwiki.info.git/blobdiff_plain/756197f30fb735f92a44527fce2689a9c0ab058e..47c9a8c3e1c38f21054219e530daa6117c759b87:/doc/tips/dot_cgi.mdwn diff --git a/doc/tips/dot_cgi.mdwn b/doc/tips/dot_cgi.mdwn index fbc3d8bbc..b66406f66 100644 --- a/doc/tips/dot_cgi.mdwn +++ b/doc/tips/dot_cgi.mdwn @@ -1,3 +1,5 @@ +[[!meta date="2009-01-12 20:01:03 -0500"]] + It's common to name the [[cgi]] "ikiwiki.cgi", and put it somewhere like `~/public_html/ikiwiki.cgi`, or `/var/www/wiki/ikiwiki.cgi`. @@ -13,9 +15,15 @@ run `.cgi` programs from anywhere. These instructions are for Debian systems, but the basic configuration changes should work anywhere. +[[!toc]] + ## apache 2 -* Edit /etc/apache2/apache2.conf and add a line like this: +* Make sure the cgi module is loaded. (Ie, `a2enmod cgi`). + Note that the cgid module will not work. + +* Edit /etc/apache2/apache2.conf (or /etc/apache2/mods-available/mime.conf) + and add a line like this: AddHandler cgi-script .cgi @@ -26,6 +34,19 @@ configuration changes should work anywhere. Or, if you've put it in a `~/public_html`, edit `/etc/apache2/mods-available/userdir.conf`. +* If your wiki is in `~/public_html` and does not appear when you enter the URL given by the installer, check that you have + the userdir mod enabled (there should be simlinks to userdir.load and userdir.conf in /etc/apache2/modes-enabled). If not, + run `a2enmod userdir` and reload apache2. + +* You may also want to enable the [[plugins/404]] plugin. + To make apache use it, the apache config file will need a further + modification to make it use ikiwiki's CGI as the apache 404 handler. + Something like this, with the path adjusted to where you've put the CGI: + + ErrorDocument 404 /cgi-bin/ikiwiki.cgi + +* On Fedora (and RHEL, CentOS, and derivatives) you may need to change CGI mode from `06755` to `755` as suid/sgid bit is prohibited by `suexec`. ([Bug 1341568](https://bugzilla.redhat.com/show_bug.cgi?id=1341658)) + ## lighttpd Here is how to enable cgi on [lighttpd](http://www.lighttpd.net/) and @@ -45,6 +66,97 @@ Note that the first part enables cgi server wide but depending on default configuration, it may be not enough. The second part creates a specific rule that allow `ikiwiki.cgi` to be executed. -**Warning:** I only use this on my development server (offline). I am not -sure of how secure this approach is. If you have any thought about it, feel -free to let me know. +**Warning:** I only use this lighttpd configuration on my development +server (offline). I am not sure of how secure this approach is. +If you have any thought about it, feel free to let me know. + +## nginx + +To run CGI under nginx, you need to use a FastCGI wrapper. The wrapper must be started somehow just like any other FastCGI program. You can use launchd on OSX. + +In Linux, you will need the spawn-fcgi and fcgiwrap packages and start +them with: + + spawn-fcgi -s /tmp/fcgi.socket -n -- /usr/sbin/fcgiwrap + +This needs to be ran as your user. It can be added to `inittab` or +made into a startup script in `init.d`. You may also need to make this file writable by the webserver, if that's running as a different user, e.g.: + + chmod a+w /tmp/fcgi.socket + +If you have [systemd](https://en.wikipedia.org/wiki/Systemd), you may use a service file like so: + +Edit/create a service file (in Debian it would be: `sudo vim /lib/systemd/system/ikiwiki.service` + +Content of `ikiwiki.service`: + + [Unit] + Description=Ikiwiki fcgi socket wrap + After=network.target + + [Service] + Type=simple + User=www-data + Group=www-data + ExecStart=/usr/bin/spawn-fcgi -s /tmp/fcgi.socket -n -- /usr/sbin/fcgiwrap + + [Install] + WantedBy=multi-user.target + +Then run: + + # This enables the service at startup + sudo systemctl enable ikiwiki.service + # This attempts to start the service + sudo systemctl start ikiwiki.service + +Then you need an nginx config plugged in that wrapper. Here's an +example virtual host configuration: + + server { + #listen 80; ## listen for ipv4; this line is default and implied + #listen [::]:80 default_server ipv6only=on; ## listen for ipv6 + + root /home/anarcat/public_html/wiki.reseaulibre.ca/; + index index.html index.htm; + + # Make site accessible from http://localhost/ + server_name wiki.reseaulibre.ca; + + location / { + try_files $uri $uri/ /index.html; + } + location /ikiwiki.cgi { + fastcgi_pass unix:/tmp/fcgi.socket; + fastcgi_index ikiwiki.cgi; + fastcgi_param SCRIPT_FILENAME /home/anarcat/public_html/ikiwiki.cgi; + fastcgi_param DOCUMENT_ROOT /home/anarcat/public_html/wiki.reseaulibre.ca; + include /etc/nginx/fastcgi_params; + } + } + +Also, note that the `/tmp/fcgi.socket` file needs to be writable by the webserver. I am also unsure as to the security of this setup, as I am using this only on my dev server. Needless to say that [[real fastcgi support|todo/fastcgi_or_modperl_installation_instructions]] would be great. ;) --[[anarcat]] + +2016-09-23 [[alexjj]]: On Debian Jessie creating the fcgi ikiwiki.service is not necessary. Install fcgiwrap, it'll auto start the fcgiwrap systemd service and then add the parameters in the virtual host: + + location / { + try_files $uri $uri/ =404; + } + + # Max size of file upload + client_max_body_size 10m; + + location ~ .cgi { + #gzip off is recommended in /usr/share/doc/fcgiwrap/README.Debian + gzip off; + fastcgi_pass unix:/var/run/fcgiwrap.socket; + include /etc/nginx/fastcgi_params; + } + +Here's a [[complete site.conf|tips/nginx]] for nginx if that helps. + +## boa + +Edit /etc/boa/boa.conf and make sure the following line is not commented: + + AddType application/x-httpd-cgi cgi