- Исходные данные
# uname -sr FreeBSD 10.0-RELEASE-p18 # pkg info | grep nginx nginx-1.6.2_1,2 Robust and small WWW server
- Установка
# cd /usr/ports/www/nginx # nake install clean
В настройках выбираем:[ ] DEBUG Build with debugging support [ ] DEBUGLOG Enable debug log (--with-debug) [x] FILE_AIO Enable file aio [x] IPV6 IPv6 protocol support [ ] GOOGLE_PERFTOOLS Enable google perftools module [x] HTTP Enable HTTP module [ ] HTTP_ADDITION Enable http_addition module [x] HTTP_CACHE Enable http_cache module [ ] HTTP_DAV Enable http_webdav module [ ] HTTP_FLV Enable http_flv module [x] HTTP_GEOIP Enable http_geoip module [x] HTTP_GZIP_STATIC Enable http_gzip_static module [ ] HTTP_GUNZIP_FILTER Enable http_gunzip_filter module [ ] HTTP_IMAGE_FILTER Enable http_image_filter module [ ] HTTP_PERL Enable http_perl module [ ] HTTP_RANDOM_INDEX Enable http_random_index module [ ] HTTP_REALIP Enable http_realip module [x] HTTP_REWRITE Enable http_rewrite module [ ] HTTP_SECURE_LINK Enable http_secure_link module [x] HTTP_SSL Enable http_ssl module [x] HTTP_STATUS Enable http_stub_status module [ ] HTTP_SUB Enable http_sub module [ ] HTTP_XSLT Enable http_xslt module [ ] MAIL Enable IMAP4/POP3/SMTP proxy module [ ] MAIL_IMAP Enable IMAP4 proxy module [ ] MAIL_POP3 Enable POP3 proxy module [ ] MAIL_SMTP Enable SMTP proxy module [ ] MAIL_SSL Enable mail_ssl module [ ] SPDY Enable SPDY protocol support (SSL req.) [ ] WWW Enable html sample files [ ] CACHE_PURGE 3rd party cache_purge module [ ] CTPP2 3rd party CT++ module [ ] ECHO 3rd party echo module [x] HEADERS_MORE 3rd party headers_more module [ ] HTTP_ACCEPT_LANGUAGE 3rd party accept_language module [ ] HTTP_ACCESSKEY 3rd party http_accesskey module [ ] HTTP_AUTH_DIGEST 3rd party http_authdigest module [ ] HTTP_AUTH_LDAP 3rd party http_auth_ldap module [ ] HTTP_AUTH_PAM 3rd party http_auth_pam module [ ] HTTP_AUTH_REQ 3rd party http_auth_request module [ ] HTTP_DAV_EXT 3rd party webdav_ext module [ ] HTTP_EVAL 3rd party eval module [ ] HTTP_FANCYINDEX 3rd party http_fancyindex module [ ] HTTP_FOOTER 3rd party http_footer module [ ] HTTP_MOGILEFS 3rd party mogilefs module [ ] HTTP_NOTICE 3rd party notice module [ ] HTTP_PUSH 3rd party push module [ ] HTTP_PUSH_STREAM 3rd party push stream module [ ] HTTP_REDIS 3rd party http_redis module [ ] HTTP_RESPONSE 3rd party http_response module [ ] HTTP_SUBS_FILTER 3rd party subs filter module [ ] HTTP_UPLOAD 3rd party upload module [ ] HTTP_UPLOAD_PROGRESS 3rd party uploadprogress module [ ] HTTP_UPSTREAM_FAIR 3rd party upstream fair module [ ] HTTP_UPSTREAM_HASH 3rd party upstream hash module [ ] HTTP_UPSTREAM_STICKY 3rd party upstream sticky module [ ] HTTP_ZIP 3rd party http_zip module [ ] ARRAYVAR 3rd party array_var module [ ] DRIZZLE 3rd party drizzlie module [ ] ENCRYPTSESSION 3rd party encrypted_session module [ ] FORMINPUT 3rd party form_input module [ ] GRIDFS 3rd party gridfs module [ ] ICONV 3rd party iconv module [ ] LET 3rd party let module [ ] LUA 3rd party lua module [ ] MEMC 3rd party memc (memcached) module [ ] MODSECURITY 3rd party mod_security module [ ] NAXSI 3rd party naxsi module [ ] PASSENGER 3rd party passenger module [ ] POSTGRES 3rd party postgresql module [ ] RDS_CSV 3rd party rds_csv module [ ] RDS_JSON 3rd party rds_json module [ ] REDIS2 3rd party redis2 module [ ] RTMP 3rd party rtmp module [ ] SET_MISC 3rd party set_misc module [ ] SFLOW 3rd party sflow module [ ] SLOWFS_CACHE 3rd party slowfs_cache module [ ] SRCACHE 3rd party srcache module [ ] SUPERVISORD 3rd party supervisord module [ ] SYSLOG_SUPPORT 3rd party syslog support [ ] TCP_PROXY 3rd party tcp_proxy module [ ] UDPLOG 3rd party udplog (syslog) module [ ] XRID_HEADER 3rd party x-rid header module [ ] XSS 3rd party xss module [ ] VIDEO Video module support ─────────────────────────── Video module support ───────────────────────── ( ) HTTP_MP4 Enable http_mp4 module ( ) HTTP_MP4_H264 3rd party mp4/h264 module
- /etc/rc.conf
nginx_enable="YES"
- Настройка
Конфигурационные файлы хранятся в /usr/local/etc/nginx
Основная настройка: /usr/local/etc/nginx/nginx.conf. Пишем с нуля:# запускаем пять процессов worker_processes 5; error_log /var/log/nginx/error.log; events { worker_connections 1024; use kqueue; } http { server_tokens off; include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 30; reset_timedout_connection on; client_body_timeout 10; send_timeout 2; gzip on; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; include /usr/local/etc/nginx/sites/*.conf; }
Замечания по конфигурации:
- Максимальное количество соединений, которые nginx может обслуживать одновременно определяются произведением двух параметров: worker_processes (в последних версиях nginx рекомендуется задавать значение auto) и worker_connections (значения от 1024 до 4096);
- use kqueue; - метод выбора соединений (epoll,kqueue). Для FreeBSD самый быстрый - kqueue;
- server_tokens off; - не показываем ничего в подписи
- sendfile on; - метод отправки данных (наиболее эффективный)
- keepalive_timeout 30; - nginx будет ждать 30 секунд перед закрытием keepalive соединения
- reset_timedout_connection on; - сбрасывать соединение с клиентом, который не отвечает;
- client_body_timeout 10; - ждать 10 секунд тело запроса от клиента, после чего сбросить соединение;
- send_timeout 2; - сбросить соединение если клиент прекратил чтение ответа в течение 2 секунд;
- gzip - сжимаем данные при передаче клиенту;
- include ... - включаем в общую конфигурацию конфиги отдельных сайтов;
- Конфигурация сайта, который обслуживает сам nginx. /usr/local/etc/nginx/sites/mysite.conf
server { listen 192.168.1.3:80 default sndbuf=16k rcvbuf=8k accept_filter=httpready; server_name mysite.ru www.mysite.ru; access_log /var/log/nginx/mysite-access; error_log /var/log/nginx/mysite-error; root /home/mysite/htdocs; location / { index index.html index.html; } location ~ \.html { ssi on; ssi_silent_errors on; } location ~* [^.]\.(gif|jpe?g|png|bmp|ico|swf|wav|mp3|m3u|txt|rar|zip) { expires 1M; add_header cache-control public; } location ~ /cgi-bin/ { access_log /var/log/nginx/mysite-access.pl.log; error_log /var/log/nginx/mysite-error.pl.log debug; gzip off; include /usr/local/etc/nginx/fastcgi_params; fastcgi_pass 127.0.0.1:8999; fastcgi_index index.pl; fastcgi_param SCRIPT_FILENAME /home/mysite/$fastcgi_script_name; } location ~ /\.ht { deny all; } }
Подробно о конфигурации:
- listen 192.168.1.3:80 default sndbuf=16k rcvbuf=8k accept_filter=httpready; - слушаем на ip=192.168.1.3, порт 80. default - сайт по умолчанию (например, показывается если клиент ломится по ip а не по имени сайта), можно указать только для одного сайта (в одном блоке server{}). sndbuf rcvbuf - буферы в памяти на отправку и получение;
- accept_filter=httpready - технология "accept filters" существует только в FreeBSD и позволяет передавать пакет от ядра к процессу только в случае прихода каких либо данных или валидного http запроса, что помогает разгрузить сервер в случае большого количества соединений. Чтобы её включить, необходимо прописать в /boot/loader.conf загрузку модулей ядра accf_http accf_data, а лучше пересобрать ядро с опциями:
options ACCEPT_FILTER_HTTP options ACCEPT_FILTER_DATA
- root - корневая директория сайта;
- location / - в этом блоке указываем индексные файлы;
- location ~ \.html - в этом блоке указываем что файлы с расширением .html обрабатываются при помощи ssi;
- location ~ /cgi-bin/ - в cgi-bin у нас хранятся скрипты на perl, запускаем их через fastcgi-сервер. access_log и error_log в этом блоке добавлены для складывания обращений к скриптам в отдельные лог-файлы, эти строчки можно убрать и все будет писаться в общий лог;
- Конфигурация сайта-прокси. Сам сайт обслуживается другим web-сервером. /usr/local/etc/nginx/sites/proxysite.conf
server { listen 0.0.0.0:80; server_name shs.home; location / { proxy_pass http://192.168.1.4:80; include proxy_vars.conf; } }
Подробно о конфигурации:
- listen 0.0.0.0:80; - слушаем на всех ip-адресах
- include proxy_vars.conf; - вставляем файл с дополнительными заголовками.
/usr/local/etc/nginx/proxy_vars.confproxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host;
Статья опубликована: 2015-04-03 09:11:02
Последние правки: 2015-06-01 13:50:48
Похоже, что эра Apache в мире web-серверов проходит и наступает эра nginx. Я расскажу вам как установить nginx, настроить geoip и запустить сайт. В качестве примера приведены две конфигурации, "свой сайт" и "прокси".