Настройка nginx для хостинга
В последнее время замечаю большой интерес к nginx, и организации веб-сервера на его основе.
UP 20.11.2011
Если раньше строили двухзвенную систему (фронтэнд – Nginx, бекэнд – Apache), то сейчас постепенно переходят только на Nginx, полностью отказываясь от Apache. Для таких случаев можно использовать следующий конфиг:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# PHP-FPM (backend) upstream php-fpm { server 127.0.0.1:9000; } # Сервера кэширования upstream memcaches { server 127.0.0.1:11211; } # Конфиг Nginx (frontend) server { # Защита от бага http://forum.nginx.org/read.php?2,154025,154036 server_name_in_redirect off; # Порт, принимаемые HOST и путь к сайту listen 80; server_name site1.ru *.site1.ru site2.ru *.site2.ru; set $www_folder '/home/webuser'; set $root_path '$www_folder/$host/html'; root $root_path; index index.htm index.html index.php; # Запросы непосредственно .php-файлов, например index.php (не кэшируются) location ~ \.php$ { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $root_path/$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $root_path; # этот параметр нужен несмотря на root в секции server fastcgi_pass php-fpm; } # Копия предыдущего для internal переадресации location @phpscripts { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $root_path/$fastcgi_script_name; fastcgi_param DOCUMENT_ROOT $root_path; # этот параметр нужен несмотря на root в секции server fastcgi_pass php-fpm; } # Запросы отдельных php-файлов (кэшируются) location /utils { default_type text/html; root $root_path; set $memcached_key 'nginx_$host$uri?$args'; memcached_pass memcaches; error_page 404 502 504 405 = @phpscripts; } # Остальные запросы также идут на PHP-FPM, если $uri не существует (через memcache) location / { default_type text/html; root $root_path; if (!-e $request_filename) { return 404; } error_page 404 502 504 403 405 = @php; } # Веб-приложение location @php { include /etc/nginx/fastcgi_params; fastcgi_param SCRIPT_FILENAME $root_path/index.php; fastcgi_pass php-fpm; } # Переопеределение 502 ошибки error_page 502 = /502.htm; location = /502.htm { root $www_folder; } # Для js, css, swf, ico и т.д. location ~* \.(css|js|swf|ico|png|jpg|gif|jpeg)$ { root $root_path; access_log off; expires 30d; } # Защита от просмотра .htaccess и .htpasswd файлов location ~ /\.ht { deny all; } # Защита от просмотра svn-файлов location ~ /.svn/ { deny all; } # Статус запросы (/status) и пинг(/ping) запросы от системы мониторинга location ~ ^/(status|ping)$ { include fastcgi_params; fastcgi_pass 127.0.0.1:9000; fastcgi_param SCRIPT_FILENAME $fastcgi_script_name; allow 127.0.0.1; deny all; } } |
Если будут вопросы, пишите в комментах.