Однажды мне понадоблось организовать мультидоменный веб-сервер на Nginx. Сервер в то время у меня был на CentOS 6.5, поэтому недолго погуглив, я нашел решение. Немного подредактировав конфиг, я получил то, что хотел.
Однако, позже, когда я сравнил производительность CentOS и FreeBSD и решил окончательно перейти на FreeBSD, оказалось конфиг от Linux уже не подходил к UNIX. И стала задача по заточке конфига конкретно под FreeBSD. В случае с ней, достаточно было только одного nginx.conf. Делюсь готовым решением.
user www; worker_processes 4; error_log /var/log/nginx/error.log info; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; sendfile on; keepalive_timeout 65; gzip on; server { listen 80 default; server_name _; set $sathost $host; if ( $host ~ ^(www\.)?(.+)$ ) { set $sathost $2; } root /usr/local/www/$sathost; index index.php index.html index.htm; # access_log /var/log/nginx/all/$sathost_access.log; (к сожалению, так пока не работает) location / { if (!-d /usr/local/www/$sathost) { set $sathost undefined; rewrite ^ /index.php last; } set $rflag 1; if (-e $request_filename) { set $rflag 0; } if (!-f /usr/local/www/$sathost/index.php) { set $rflag 0; } if ($rflag = 1) { rewrite ^ /index.php last; } if (-f $request_filename) { expires 1h; break; } } location ~ \.php$ { root /usr/local/www/$sathost; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/local/www/$sathost/$fastcgi_script_name; include fastcgi_params; break; } location ~ \.htm(l?)$ { fastcgi_param SCRIPT_FILENAME /usr/local/www/$sathost/$fastcgi_script_name; include fastcgi_params; if (!-f $request_filename) { rewrite ^ /index.php last; } if (-f /usr/local/www/$sathost/.parse_html) { fastcgi_pass 127.0.0.1:9000; } break; } location ~ /\.ht { deny all; } } }