Настройка и использование 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)
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), публикующие материалы/презентации/видео — буду выбирать темы на свой вкус и предлагать на ваш выбор.
Автор: danielnewman