Nginx

Материал из WikiAdmin
Перейти к: навигация, поиск

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 в 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 падает. Но этот вариант может спасти вас на некоторое время.


Источник — «http://wikiadmin.net/Nginx»
Если эта страница оказалась для вас полезной, нажмите на кнопку. :)
Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты