Here’s how I did it. And this one is actually work (on 0.7.41, that is). With PHP support no less.
Still need some cleanup though.
What it do: enables Apache-like mod_userdir with PHP support and per-user rewrite rules.
UPDATE: here’s the better version.
server { listen 80; server_name domain.tld; index index.php; #change /usr/local/etc/nginx/ to default nginx root path if ($request_filename ~ ^/usr/local/etc/nginx//~([a-zA-Z0-9]*)(.*[^/]|)(/*)$) { #$org_uri is old, unused variable but might have some use for improvement (or deletion) set $org_uri $request_uri; set $is_userdir 1; set $newroot /home/$1/public_html; set $homedir $1; set $filedir $2; set $slashes $3; rewrite ^/~.* f~/; } if ($is_userdir != 1) { set $newroot /usr/local/www/data; #set to random string if not userdir (see above). set $org_uri zxzz123; } root $newroot; location f~/ { #$is_ok: check wheter to apply rewrite or not at this and next location set $is_ok 1; if (-d /home/$homedir/public_html$filedir) { set $is_ok 2; rewrite ^f~/$ d~/; } if ($is_ok = 1) { rewrite ^f~/$ finaldest~/; } } location d~/ { #add slash for directory (if there's none yet - to avoid unwanted rewrite by nginx) if ($slashes = "") {rewrite ^d~/$ /~$homedir$filedir/ redirect; set $is_ok 1; } if ($is_ok = 2) {rewrite ^d~/$ finaldest~/; set $is_ok 1; } } location finaldest~/ { #extra: user-specific rewrite if ($homedir = sampleuser) {rewrite ^finaldest~/$ sampleuser~/;} #final destination (if there's no user-specific rewrite) rewrite ^finaldest~/$ $filedir$slashes; } #user-specific rewrite block location sampleuser~/ { #or sampleuser~/$filedir$slashes; to get subfolder location ruling rewrite ^sampleuser~/$ $filedir$slashes; #wordpress. haven't able to make use of try_files or other modern mechanics yet if (!-e $request_filename) { rewrite ^(.*)$ /blog/index.php?q=$1 last; break; } } #just a standard php block. location ~ .php$ { if (!-f $document_root$fastcgi_script_name) { return 404; break; } fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }
Pingback: animeBSD · nginx/mod_userdir: take 2
Pingback: animeBSD · nginx/mod_userdir: take 3
Pingback: nginx/mod_userdir: take 3 | animeBSD
Pingback: nginx/mod_userdir: take 2 | animeBSD