Однажды мне понадоблось организовать мультидоменный веб-сервер на 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;
}
}
}

Следи за своими финансами легко прямо в Telegram — начни вести учёт доходов и расходов уже сейчас!