Настройка и использование nginx
Мы завершаем перевод цикла статей сайта cyberciti.biz, посвященного виртуализации LAMP-стэка. Речь в заключительном материале пойдет об установке и настройке реверс-прокси nginx.nginx — open-source продукт, использующийся не только в качестве веб-сервера или реверс-прокси сервер. За его легковесность и бережное отношение к ресурсам его используют и в качестве балансировщика нагрузки (от тупого round-ribbon, до более осмысленного, но тут все туманно прим.пер.) и/или в качестве прокси-решения для организации доступа к службам виртуальной сети, установленной в предыдущих статьях цикла, через один внешний хост-адреса, например через IP 202.54.1.1 (как это было рассмотренное в примерах прежде).
В этой статье мы разберемся, как установить nginx в качестве обратного прокси-сервера для Apache+php5 сервера с доменным именем www.example.com и сервера статики Lighttpd, который, в нашем примере, именуется static.example.com. Все настройки мы будем производить исключительно на виртуальном сервере vm00 с IP-адресом 192.168.1.1.
Настройка DNS
Убедитесь, что и www.example.com и static.example.com указывают на IP-адрес 192.168.1.1.Установка nginx-сервера
Введите следующие команды консоли, что бы установить nginx:$ cd /tmp $ wget http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm # rpm -iv nginx-release-rhel-6-0.el6.ngx.noarch.rpm # yum install nginx
Пример ответа в консоли сервера:
Loaded plugins: rhnplugin Setting up Install Process Resolving Dependencies --> Running transaction check ---> Package nginx.x86_64 0:1.2.1-1.el6.ngx will be installed --> Finished Dependency Resolution Dependencies Resolved ========================================================================= Package Arch Version Repository Size ========================================================================= Installing: nginx x86_64 1.2.1-1.el6.ngx nginx 331 k Transaction Summary ========================================================================= Install 1 Package(s) Total download size: 331 k Installed size: 730 k Is this ok [y/N]: y Downloading Packages: nginx-1.2.1-1.el6.ngx.x86_64.rpm | 331 kB 00:00 Running rpm_check_debug Running Transaction Test Transaction Test Succeeded Running Transaction Warning: RPMDB altered outside of yum. Installing : nginx-1.2.1-1.el6.ngx.x86_64 1/1 ---------------------------------------------------------------------- Thanks for using nginx! Check out our community web site: * http://nginx.org/en/support.html If you have questions about commercial support for nginx please visit: * http://www.nginx.com/support.html ---------------------------------------------------------------------- Verifying : nginx-1.2.1-1.el6.ngx.x86_64 1/1 Installed: nginx.x86_64 0:1.2.1-1.el6.ngx Complete!
Настройка сервера web-сервера nginx как реверс-прокси
Отредактируйте файл /etc/nginx/conf.d/default.conf:# vi /etc/nginx/conf.d/default.conf
Добавив к нему, или изменим существующие строки:
## Основной реверс-прокси сервер ## ## Apache (vm02) скрипт-сервер для www.example.com ## upstream apachephp { server 192.168.1.11:80; #Apache1 } ## Lighttpd (vm01) сервер статики для static.example.com ## upstream lighttpd { server 192.168.1.10:80; #Lighttpd1 } ## Начало настроек www.example.com ## server { listen 202.54.1.1:80; server_name www.example.com; access_log /var/log/nginx/log/www.example.access.log main; error_log /var/log/nginx/log/www.example.error.log; root /usr/share/nginx/html; index index.html index.htm; ## перенаправляем запросы apache1 ## location / { proxy_pass http://apachephp; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ## Конец настроек www.example.com ## ## Начало настроек static.example.com ## server { listen 202.54.1.1:80; server_name static.example.com; access_log /var/log/nginx/log/static.example.com.access.log main; error_log /var/log/nginx/log/static.example.com.error.log; root /usr/local/nginx/html; index index.html; location / { proxy_pass http://lighttpd; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host static.example.com; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } ## Конец настроек static.example.com ##
Включаем nginx
Введите следующие команды:# chkconfig nginx on # service nginx start
Настраиваем брандмауэр
Установите следующие настройки брандмауэра:- Запрет всех ВХОДЯЩИХ/ИСХОДЯЩИХ соединений по умолчанию (Drop all INPUT/OUTPUT by default)
- Открываем только tcp-порты 80 и 443 (202.54.1.1:80 и/или 443 для eth0)
- Устанавливаем eth1 в качестве единственного доверенного устройства в коммуникациях между реверс-прокси nginx и Apache/Lighttpd серврами
Для установки этих параметров произведем следующие действия:
# system-config-firewall-tui
Вы можете отредактировать /etc/sysconfig/iptables вручную и, также, настроить брандмауэр (читайте дополнительно в статье на сайте cyberciti.biz)
/etc/sysctl.conf
Отредактируем /etc/sysctl.conf следующим образом:# Execshild kernel.exec-shield = 1 kernel.randomize_va_space = 1 # IPv4 settings net.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.all.accept_source_route = 0 net.ipv4.conf.all.accept_redirects = 0 net.ipv4.conf.all.secure_redirects = 0 net.ipv4.conf.all.log_martians = 1 net.ipv4.conf.default.accept_source_route = 0 net.ipv4.conf.default.accept_redirects = 0 net.ipv4.conf.default.secure_redirects = 0 net.ipv4.icmp_echo_ignore_broadcasts = 1 net.ipv4.tcp_syncookies = 1 net.ipv4.conf.all.rp_filter = 1 net.ipv4.conf.default.rp_filter = 1 # Increase system file descriptor limit to fs.file-max = 50000 # Increase system IP port limits net.ipv4.ip_local_port_range = 2000 65000 # Ipv6 net.ipv6.conf.default.router_solicitations = 0 net.ipv6.conf.default.accept_ra_rtr_pref = 0 net.ipv6.conf.default.accept_ra_pinfo = 0 net.ipv6.conf.default.accept_ra_defrtr = 0 net.ipv6.conf.default.autoconf = 0 net.ipv6.conf.default.dad_transmits = 0 net.ipv6.conf.default.max_addresses = 1
Загрузим новые настройки ядра Linux следующей командой:
# sysctl -p
Для детальной информации об указанных директивах настройки ядра Linux читайте в соответствующем faq.
Безопасность сервера nginx
Смотрите дополнительно пост «Топ-20 практик безопасности веб-сервера nginx». Так же, в качестве доп.материалов о настройках nginx, реверс-прокси и SSL смотрите в материалах уроков:- CentOS / Redhat Linux: установка Keepalive для обеспечения отказоустойчивости web-кластера
- nginx: Установка сбалансированного SSL реверс-прокси (Load Balanced SSL Proxy)
Топ-практики безопасности LAMP-стека
- Шифрование коммуникаций: используйте ssh и vpns во время настройки ваших виртуальных машин. Используйте scp/sftp-клиента для загрузки файлов на сервер;
- Вам действительно нужен весь хлам, установленный на web-сервер? Избегайте установки излишнее ПО и сбережетесь от компрометации. Используйте менеджеры пакетов RPM, такие как yum, apt-get и/или dpkg что бы отслеживать установленное ПО;
- Установка обновлений безопасности — важная часть в поддержке работоспособности Linux-сервера. Linux предоставляет всё необходимое программное обеспечение для целей поддержания системы в актуальном состоянии, а процедура перехода от версии к версии ПО сделана самым удобным способом. Все обновления связанные с безопасностью должны отслеживаться и устанавливаться как можно раньше;
- Выдавайте наименьшие из необходимых привилегий пользовательским учетным записям. Не разбрасывайтесь ssh-доступом к вашему серверу направо и налево;
- Прочитайте так же статьи о лучших практиках в безопасности LAMP-стека на сайте cyberciti.biz:
- 20 приемов повышения безопасности на Linux-серверах
- 25 лучших практик настройки безопасности PHP для сис.админов
- Top-20 лучших практик безопасности nginx-сервера
- Top-20 лучших практик безопасности OpenSSH-сервера
- Советы по защите физического доступа к консоли Linux-сервера
Заключение
Надеюсь, данное руководство послужит хорошим подспорьем при настройке виртуальных машин, а информация окажется, в достаточной мере, полезной, что бы вы смогли начать настройку собственного web-стека на вашем CentOS /RHEL сервере самостоятельно.- Вводная часть
- Шаг №1: Настройка / Установка: NFS файловый сервер
- Шаг №2: Настройка / установка: сервер баз данных MySQL
- Шаг №3: Настройка / Установка: Memcached сервера кэширования
- Шаг №4: Настройка / Установка: Apache + php5 приложение веб-сервера
- Шаг №5: Настройка / Установка: веб-сервер Lighttpd для статических активов
- Шаг №6: Настройка / Установка: nginx обратный (reverse) прокси-сервер
От переводчика:
В цикле статей присутствует порядка 50 внешних ссылок на материалы сайта cyberciti. С моей стороны было бы не очень честно оставить читателей один на один с анлийским текстом (иначе, стали бы мы читать переводы). Предложение такое: вот топ ссылок, которые упоминаются наиболее часто в переведенном материале:
- Пара строк о запуске iptables
- Установка nfsv4 сервера на CentOS/RHEL
- yum-менеджер пакетов: основные команды
- 25 топ-практик повышения безопасности PHP для сис.админов
- 20 лучших приемов повышения безопасности nginx-серверов
- Создание учетной записи нового пользователя в linux
- Топ-20 лучших практик повышения безопасности OpenSSH-сервера
- Пара строк об изменении sysctl-параметров ядра
- Пара строк о расширении диапозона доступных IP-портов
- nginx в качестве реверс-прокси
- О методах увеличении максимального числа файловых дескриптеров (FD)
И еще 36 ссылок, упоминавшихся более 0 раз:
www.php.net/array
www.cyberciti.biz/faq/mysql-user-creation
www.cyberciti.biz/tips/open-source-project-management-software.html
www.cyberciti.biz/faq/linux-demilitarized-zone-howto
www.cyberciti.biz/faq/restart-httpd
www.cyberciti.biz/faq/how-do-i-start-and-stop-nfs-service
www.cyberciti.biz/faq/rhel-centos-fedora-keepalived-lvs-cluster-configuration
www.cyberciti.biz/tips/linux-laptop.html
www.cyberciti.biz/faq/centos-fedora-rhel-iptables-open-nfs-server-ports
www.cyberciti.biz/faq/linux-install-and-start-apache-httpd
www.cyberciti.biz/faq/rhel-fedora-centos-linux-temporarily-switchoff-selinux
www.cyberciti.biz/faq/linux-make-directory-command
www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection
www.cyberciti.biz/tips/top-linux-monitoring-tools.html
www.php.net/isset
www.cyberciti.biz/tips/linux-iptables-examples.html
bash.cyberciti.biz/mysql/add-database-username-password-remote-host-access
dev.mysql.com/doc/refman/5.5/en
www.cyberciti.biz/faq/tag/etcfstab
www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo
www.cyberciti.biz/faq/tag/etcsysconfigmemcached
www.cyberciti.biz/tips/my-10-unix-command-line-mistakes.html
www.cyberciti.biz/tips/download-email-client-for-linux-mac-osx-windows.html
www.cyberciti.biz/faq/linux-kernel-etcsysctl-conf-security-hardening
www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html
www.cyberciti.biz/faq/linux-unix-bsd-wordpress-memcached-cache-plugin
www.cyberciti.biz/faq/howto-install-memcached-under-rhel-fedora-centos
www.cyberciti.biz/tips/tips-to-protect-linux-servers-physical-console-access.html
www.cyberciti.biz/faq/how-to-install-mysql-under-rhel
www.cyberciti.biz/tips/unix-linux-bsd-pydf-command-in-colours.html
www.cyberciti.biz/faq/howto-linux-unix-setup-nginx-ssl-proxy
www.cyberciti.biz/faq/how-to-mount-bind-partitions-filesystems-in-linux
www.cyberciti.biz/faq/rhel-fedora-linux-install-memcached-caching-system-rpm
www.phpmyadmin.net/home_page/index.php
www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial
www.cyberciti.biz/faq/stop-lighttpd-server
www.cyberciti.biz/faq/mysql-user-creation
www.cyberciti.biz/tips/open-source-project-management-software.html
www.cyberciti.biz/faq/linux-demilitarized-zone-howto
www.cyberciti.biz/faq/restart-httpd
www.cyberciti.biz/faq/how-do-i-start-and-stop-nfs-service
www.cyberciti.biz/faq/rhel-centos-fedora-keepalived-lvs-cluster-configuration
www.cyberciti.biz/tips/linux-laptop.html
www.cyberciti.biz/faq/centos-fedora-rhel-iptables-open-nfs-server-ports
www.cyberciti.biz/faq/linux-install-and-start-apache-httpd
www.cyberciti.biz/faq/rhel-fedora-centos-linux-temporarily-switchoff-selinux
www.cyberciti.biz/faq/linux-make-directory-command
www.cyberciti.biz/faq/howto-disable-httpd-selinux-security-protection
www.cyberciti.biz/tips/top-linux-monitoring-tools.html
www.php.net/isset
www.cyberciti.biz/tips/linux-iptables-examples.html
bash.cyberciti.biz/mysql/add-database-username-password-remote-host-access
dev.mysql.com/doc/refman/5.5/en
www.cyberciti.biz/faq/tag/etcfstab
www.cyberciti.biz/faq/fedora-sl-centos-redhat6-enable-epel-repo
www.cyberciti.biz/faq/tag/etcsysconfigmemcached
www.cyberciti.biz/tips/my-10-unix-command-line-mistakes.html
www.cyberciti.biz/tips/download-email-client-for-linux-mac-osx-windows.html
www.cyberciti.biz/faq/linux-kernel-etcsysctl-conf-security-hardening
www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html
www.cyberciti.biz/faq/linux-unix-bsd-wordpress-memcached-cache-plugin
www.cyberciti.biz/faq/howto-install-memcached-under-rhel-fedora-centos
www.cyberciti.biz/tips/tips-to-protect-linux-servers-physical-console-access.html
www.cyberciti.biz/faq/how-to-install-mysql-under-rhel
www.cyberciti.biz/tips/unix-linux-bsd-pydf-command-in-colours.html
www.cyberciti.biz/faq/howto-linux-unix-setup-nginx-ssl-proxy
www.cyberciti.biz/faq/how-to-mount-bind-partitions-filesystems-in-linux
www.cyberciti.biz/faq/rhel-fedora-linux-install-memcached-caching-system-rpm
www.phpmyadmin.net/home_page/index.php
www.cyberciti.biz/faq/rhel-fedorta-linux-iptables-firewall-configuration-tutorial
www.cyberciti.biz/faq/stop-lighttpd-server
Что мне самому сейчас интересно, т.е. что я планирую перевести в самые ближайшие дни — в нижнем списке. Если есть что-то, что требует перевода или дубляжа и имеет такую запредельную ценность, как доклады Yoshinori Matsunobu — предлагайте, будем читать/переводить.
O'Reilly MySQL Conference & Expo Is a Wrap // 2011 web
- Linux and H/W optimizations — Yoshinori Matsunobu web
- MySQL and Linux Tuning — Better Together .ppt web
Круг интересов: серверное администрирование, оптимизация и мониторинг LAMP-стэка. Виртуализация, IaaS, KVM, xfs, NFS. Так же интересно: hPHP (hip-hop PHP), Wordpress.
От вас — ссылка на материал, от меня — перевод и поклон.
Если знаете конференции, помимо (O’Reilly Velocity, NJ-LOPSA PICC, Tech Ed, LinuxCon), публикующие материалы/презентации/видео — расскажите нам всем, а мы будем выбирать темы на ваш/свой вкус и делать переводы.
