Nginx
Nginx - свободный высокопроизводительный веб-сервер и обратный прокси-сервер с открытым исходным кодом, а также IMAP/POP3 прокси-сервер. Игорь Сысоев начал разработку Nginx в 2002 году, первый публичный релиз был выпущен в 2004 году. Nginx в настоящее время используют около 7,65% всех доменов по всему миру по рейтингу Netcraft.
Nginx известен своей высокой производительностью, стабильностью, богатым набором функций, простой конфигурацией, и низким потреблением ресурсов. В отличие от традиционных серверов, Nginx не зависит от потоков для обработки запросов. Вместо этого он использует гораздо более масштабируемую управляемую событиями (асинхронную) архитектуру. Эта архитектура использует небольшие, но что более важно, предсказуемые объемы памяти под нагрузкой.
Содержание |
Установка Nginx
Установка Nginx в CentOS
Из-под привелегированного пользователя вам нужно отдать сл. команду:
yum install nginx
После установки вам нужно его запустить
/etc/init.d/nginx start
или
service nginx start
Так же рекомендуется включить этот сервис в автозагрузку
chkconfig nginx on
Установка Nginx в Ubuntu
От привелегированного пользователяч вам нужно отдать сл. команду:
apt-get install nginx
Как только сервис будет установлен в вашу систему, его можно включить
/etc/init.d/nginx start
Установка Nginx в FreeBSD
Установка из портов:
# cd /usr/ports/www/nginx # make install clean
После этого возникнет окно с выбором модулей, среди которых вам нужно будет выбрать необходимые
- Продолжение темы на этой странице: Установка NGINX и PHP в FreeBSD
Установка Nginx в Solaris из исходников
./configure \ --with-libatomic \ --with-md5-asm \ --with-pcre \ --with-http_ssl_module \ --with-http_realip_module \ --with-http_addition_module \ --with-http_xslt_module \ --with-http_image_filter_module \ --with-http_geoip_module \ --with-http_sub_module \ --with-http_dav_module \ --with-http_flv_module \ --with-http_gzip_static_module \ --with-http_random_index_module \ --with-http_secure_link_module \ --with-http_degradation_module \ --with-http_stub_status_module \ gmake gmake install
Установка Nginx в Windows
Необходимо скачать zip-архив. Он доступен на этой странице. Далее в командной строке нужно перейти в место го сохранения, например, в корень диска C:
cd c:\
Разархивировать полученный файл
unzip nginx.zip
Перейти внутрь каталога
cd nginx
Запустить сервер
start nginx
Если nginx не запустился, нужно смотреть причины в error_log. Если же error_log не создался, то об этом сообщается в Event Log. В настоящее время данное ПО не работает в Windows как сервис.
Настройка Nginx
Настройка Nginx для работы с Apache
Для того, чтобы Nginx мог работать с другими веб-сервисами, достаточно прописать одну строку в конфигурацию.
proxy_pass IP сервера:PORT
Например, у нас есть сайт wikiadmin.net, на нем apache, отдающий контент на порт 8080. Надо, чтобы nginx отдавал контент wikiadmin.net на 80 порту:
server {
listen 62.75.179.139:80;
location / {
proxy_pass http://62.75.179.139:8080;
}
}
В apache можно отключить keep alive, так как nginx с ним общается через http/1.0 и keepalive не поддерживается. При отключении может сильно уменьшиться кол-во процессов и снизиться нагрузка на сервер.
Настройка Nginx для phpBB
Столкнулся с тем, что даже после начала работы форума невозможно было подгрузить аватарки, заполнить личную информацию, не работало удаление.... В конечном итоге все заработало, вот рабочий конфиг:
server {
listen IP:80;
server_name forum.ДОМЕН;
access_log /ПУТЬ/access.log;
error_log /ПУТЬ/error.log warn;
location = / {
root /ПУТЬ/forum/;
index index.php;
}
location / {
root /ПУТЬ/forum/;
index index.php index.html;
if (!-e $request_filename) {
rewrite ^/(.*)$ /index.php?q=$1 last;
break;
}
}
error_page 404 /index.php;
error_page 403 /index.php;
error_page 500 502 503 504 /index.php;
# статические картинки
location ~* ^.+\.(jpg|jpeg|gif|css|png|js|ico)$ {
access_log off; #стоит ли засорять этим логи - решайте сами
expires 30d;
root /ПУТЬ/forum/;
break;
}
# прячем нужное
location ~* \.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)$|^(code-style\.pl|Entries.*|Repository|Root|Tag|Template)$ {
deny all;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /ПУТЬ/forum/$fastcgi_script_name;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
}
}
Настройка Nginx для Mediawiki
Конфигурация нгинкс для вики ресурсов. Эта конфигурация проверена и в данный момент работает для wikiadmin.net
server {
listen IP:80; #IP сервера
server_name domain www.domain; #имя домена без www и с www
root /var/www/html; #корень сайта
charset utf-8;
client_max_body_size 5m;
client_body_timeout 60;
index index.php index.html index.htm default.html default.htm; #обязательная строка, иначе nginx будет искать index.html
location / { rewrite ^/(.*)$ /index.php?title=$1 last; } #строка убирает index.php в url
location ~ .*.php$ {
include /etc/nginx/fastcgi.conf;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
}
location = /robots.txt { break; } #эти данные статичны и могут сразу отдаваться клиенту
location /skins/ { break; } #эти данные статичны и могут сразу отдаваться клиенту
location /images/ { break; } #эти данные статичны и могут сразу отдаваться клиенту
location /images/deleted/ { return 404; }
location ~ ^/extensions/.*\.css$ { break; } #эти данные статичны и могут сразу отдаваться клиенту
gzip on; #включаем сжатие gzip для ускорения отдачи страниц
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain application/xml;
}
Настройка Nginx для Wordpress
Это рабочая конфигурация для вордпресс, проверено на нескольких серверах
server {
listen IP:80; #IP сервера
server_name domain www.domain; #имя домена без www и с www
root /var/www/html; #корень сайта
access_log /var/www/logs/access_log; #логи вашего сайта
error_log /var/www/logs/error_log; #логи вашего сайта
charset utf-8;
client_max_body_size 5m;
client_body_timeout 60;
index index.php index.html; #обязательная строка, иначе nginx будет искать index.html
if (!-e $request_filename) {rewrite ^/(.*)$ /index.php?q=$1 last; #строка убирает index.php в url
}
try_files $uri $uri/ /index.php;
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ (/wp-content/cache/(wp-cache-.*\.html|meta)|\.htaccess) {
deny all;
}
включаем сжатие GZIP
Для этого достаточно добавить в конфиг сайта следующее:
gzip on;
gzip_static on;
gzip_http_version 1.1;
gzip_vary on;
gzip_comp_level 6;
gzip_proxied any;
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
gzip_buffers 16 8k;
gzip_disable “MSIE [1-6].(?!.*SV1)”;
gzip_static on подразумевает, что у вас могут быть сжатые копии некоторых файлов. Например, CSS, JS, GIF и так далее. Сделать их можно следующим образом:
for i in `find /var/www/site* -type f -name '*.css'`; do echo $i; gzip -c -9 $i > $i.gz; done; for i in `find /var/www/site* -type f -name '*.js'`; do echo $i; gzip -c -9 $i > $i.gz; done; for i in `find /var/www/site* -type f -name '*.gif'`; do echo $i; gzip -c -9 $i > $i.gz; done;
То есть меняется только расширение. GIF, PNG тоже можно сжать, если это элементы верстки страницы и редко изменяются.
Показать содержимое директории (или папки)
location / {
autoindex on;
}
Установка spawn-fcgi для работы php в CentOS
Для начала нужно установить spawn-fcgi, который доступен в хранилищах:
yum install spawn-fcgi
Далее загрузите init-скрипт. Он доступен на странице bash.cyberciti.biz. Вот листинг скрипта самого скрипта, если он будет недоступен на странице:
#!/bin/sh # # php-cgi - php-fastcgi swaping via spawn-fcgi # # chkconfig: - 85 15 # description: Run php-cgi as app server # processname: php-cgi # config: /etc/sysconfig/phpfastcgi (defaults RH style) # pidfile: /var/run/php_cgi.pid # Note: See how to use this script : # http://www.cyberciti.biz/faq/rhel-fedora-install-configure-nginx-php5/ # Source function library. . /etc/rc.d/init.d/functions # Source networking configuration. . /etc/sysconfig/network # Check that networking is up. [ "$NETWORKING" = "no" ] && exit 0 spawnfcgi="/usr/bin/spawn-fcgi" php_cgi="/usr/bin/php-cgi" prog=$(basename $php_cgi) server_ip=127.0.0.1 server_port=9000 server_user=nginx server_group=nginx server_childs=5 pidfile="/var/run/php_cgi.pid" # do not edit, put changes in /etc/sysconfig/phpfastcgi [ -f /etc/sysconfig/phpfastcgi ] && . /etc/sysconfig/phpfastcgi start() { [ -x $php_cgi ] || exit 1 [ -x $spawnfcgi ] || exit 2 echo -n $"Starting $prog: " daemon $spawnfcgi -a ${server_ip} -p ${server_port} -u ${server_user} -g ${server_group} -P ${pidfile} -C ${server_childs} -f ${php_cgi} retval=$? echo return $retval } stop() { echo -n $"Stopping $prog: " killproc -p ${pidfile} $prog -QUIT retval=$? echo [ -f ${pidfile} ] && /bin/rm -f ${pidfile} return $retval } restart(){ stop sleep 2 start } rh_status(){ status -p ${pidfile} $prog } case "$1" in start) start;; stop) stop;; restart) restart;; status) rh_status;; *) echo $"Usage: $0 {start|stop|restart|status}" exit 3 esac
Сохраните его как /etc/init.d/php_cgi и сделайте исполняемым. После этого запустите скрипт:
/etc/init.d/php_cgi start
И проверьте, работает ли он:
netstat -tulpn | grep :9000
Вы должны будете увидеть такой ответ:
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN
Скрипт готов к работе...
spawn-fcgi падает
Замечено, что этот процесс иногда падает. Я решил этот вопрос следующим образом.... У меня раз в минуту один скрипт проверяет наличие открытого 9000 порта (как это написано на этой странице). Я просто добавил строчку запуска процесса и получилось нечто подобное:
host=127.0.0.1 for port in 9000 do if nc -w 20 -z $host $port then echo port $port is up else echo port $port is down | mail -s "port result" admin@example.com spawn-fcgi -p 9000 -u apache -g apache -S -M 0600 -C 8 -F 1 -P /var/run/spawn-fcgi.pid -- /usr/bin/php-cgi fi done
Пробовал убить процесс вручную, в течении минуты получал сообщение, что порт down и процесс снова появлялся. Конечно же, это не есть хорошо, т.к. непонятно, почему spawn падает. Но этот вариант может спасти вас на некоторое время.