Nginx – замечательная вещь. Намного больше возможностей можно получить, подняв на нем мультидоменный веб-сервер. Необходимость такая: при обращению к доменному имени, мы попадаем на сервер с nginx, а nginx читает имя домена, к которому мы обратились и посылает нас в одноименную директорию /www/имя_домена. Если домен неизвестен – нас посылают в директорию /www/undefined/
Получился такой код:
user nginx; worker_processes 4; worker_priority -5; worker_rlimit_nofile 51200; error_log /var/log/nginx/error.log crit; events { worker_connections 2000; multi_accept on; } http { include mime.types; default_type application/octet-stream; access_log /var/log/nginx/access.log; # Caches information about open FDs, freqently accessed files. open_file_cache max=200000 inactive=20s; open_file_cache_valid 30s; open_file_cache_min_uses 2; open_file_cache_errors on; sendfile on; tcp_nopush on; tcp_nodelay on; keepalive_timeout 30; keepalive_requests 1000; reset_timedout_connection on; client_body_timeout 10; send_timeout 2; gzip on; gzip_min_length 10240; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; gzip_disable "msie6"; server { listen 80 default; server_name _; set $sathost $host; if ( $host ~ ^(www\.)?(.+)$ ) { set $sathost $2; } root /www/$sathost; index index.php index.html index.htm; location / { if (!-d /www/$sathost) { set $sathost undefined; rewrite ^ /index.php last; } set $rflag 1; if (-e $request_filename) { set $rflag 0; } if (!-f /www/$sathost/index.php) { set $rflag 0; } if ($rflag = 1) { rewrite ^ /index.php last; } if (-f $request_filename) { expires 1h; break; } } location ~ \.php$ { root /www/$sathost; fastcgi_pass unix:/var/run/php-fpm.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /www/$sathost/$fastcgi_script_name; include fastcgi_params; break; } location ~ \.htm(l?)$ { fastcgi_param SCRIPT_FILENAME /www/$sathost/$fastcgi_script_name; include fastcgi_params; if (!-f $request_filename) { rewrite ^ /index.php last; } if (-f /www/$sathost/.parse_html) { fastcgi_pass unix:/var/run/php-fpm.sock; } break; } location ~ /\.ht { deny all; } } }
Конечно, его можно значительно уменьшить, убрав ненужные параметры. Но мне он нужен был именно в таком виде.