Nginx (произносится как "двигатель х") является свободным, открытым исходным кодом, высокопроизводительного HTTP-сервер. Nginx известен своей стабильностью, богатым набором функций, простой настройкой и низким потреблением ресурсов. В этом учебнике показано, как можно установить Nginx на CentOS 5.6 сервер с поддержкой PHP5 (через FastCGI) и MySQL поддержкой. На данный урок имеется виртуальный образ готового сервера, ознакомиться с которым подробней и скачать его можно на форуме Nginx с PHP5 и MySQL в CentOS 5.6 + скачать.
Предварительные замечания
В данной статье я использую имя хоста server1.example.com с IP адресом 192.168.2.222. Эти параметры могут отличаться в Вашем случае, поэтому Вам придется заменить их в случае необходимости.
Установка MySQL 5
Сначала установите MySQL 5 следующим образом:
|
Затем мы создаем автозапуск для MySQL (так, что бы MySQL запускался автоматически при загрузке системы) и запустить сервер MySQL:
|
Теперь проверьте, что сеть включена. Выполним:
|
[root@server1 ~]# netstat -tap | grep mysql tcp 0 0 *:mysql *:* LISTEN 2479/mysqld [root@server1 ~]#
Если этого не произойдет, отредактируем /etc/my.cnf и закомментируйте опцию пропустить сетей:
|
[...] #skip-networking [...]
и перезапустить MySQL сервер:
|
Запустим:
|
Установим пароль для пользователя root (в противном случае любой желающий cможет получить доступ к MySQL базе данных!):
[root@server1 ~]# mysql_secure_installation NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MySQL to secure it, we'll need the current password for the root user. If you've just installed MySQL, and you haven't set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): - ENTER OK, successfully used password, moving on... Setting the root password ensures that nobody can log into the MySQL root user without the proper authorisation. Set root password? [Y/n] - ENTER New password: - Ваш root SQL пароль Re-enter new password: - Ваш root SQL пароль Password updated successfully! Reloading privilege tables.. ... Success! By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] - ENTER ... Success! Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] - ENTER ... Success! By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] - ENTER - Dropping test database... ... Success! - Removing privileges on test database... ... Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] - ENTER ... Success! Cleaning up... All done! If you've completed all of the above steps, your MySQL installation should now be secure. Thanks for using MySQL! [root@server1 ~]#
Установка Nginx
Nginx не доступен в официальном репозитории CentOS, но есть пакет для CentOS 5.x в centos.karan.org репозиториях тестирования. Мы добавляем хранилище следующим образом:
|
Далее мы открываем /etc/yum.repos.d/kbsingh-CentOS-Extras.repo ...
|
... и установим gpgcheck в 0 и enabled в 1 в [KBS-CentOS-Testing] разделе:
[...] # pkgs in the -Testing repo are not gpg signed [kbs-CentOS-Testing] name=CentOS.Karan.Org-EL$releasever - Testing gpgcheck=0 gpgkey=http://centos.karan.org/RPM-GPG-KEY-karan.org.txt enabled=1 baseurl=http://centos.karan.org/el$releasever/extras/testing/$basearch/RPMS/
Затем мы можем установить Nginx следующим образом:
|
Затем мы создаем автозапуск для Nginx и запустим его:
|
Введите IP-адрес вашего Web сервера или хоста в браузере (например, http://192.168.2.222 ), и Dы увидите пустую страницу (пустая, поскольку /usr/share/nginx/html/index.html пуст). Тем не менее Nginx работает, потому что мы видим пустую страницу):
Установка PHP5
Мы можем запустить в работу PHP5 в Nginx через FastCGI. Там нет автономного FastCGI пакета демона для CentOS, поэтому мы используем FastCGI пакет Lighttpd (Lighttpd, FastCGI) и установить его вместе с PHP-CLI и некоторые PHP5 модули, такие как PHP-MySQL которой вам нужно, если Вы хотите использовать MySQL с вашего PHP скрипта:
|
Затем откройте /etc/php.ini и добавьте строку cgi.fix_pathinfo = 1 в самом конце этого файла:
|
[...] cgi.fix_pathinfo = 1
Lighttpd FastCGI - пакет поставляется с исполняемым /usr/bin/spawn-fcgi которыqй мы можем использовать для запуска FastCGI процессов. Посмотрм на:
|
... чтобы узнать больше об этом.
Для запуска демона PHP FastCGI прослушиваем порт 9000 на localhost и запустим в качестве пользователя и группы Nginx, выполним следующую команду:
|
Конечно, Вы не хотите вводить эту команду каждый раз вручную, при запуске системы, поэтому, чтобы система выполняла команду автоматически во время загрузки, откройте /etc/rc.local ...
|
[...] /usr/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -u nginx -g nginx -f /usr/bin/php-cgi -P /var/run/fastcgi-php.pid
Настройка Nginx
Конфигурации Nginx в /etc/nginx/nginx.conf который мы открываем сейчас:
|
Конфигурация легко понять (Вы можете узнать больше об этом здесь: http://wiki.codemongers.com/NginxFullExample и здесь: http://wiki.codemongers.com/NginxFullExample2)
Первая (это не обязательно), вы можете увеличить количество рабочих процессов и установить keepalive_timeout до разумного значения:
[...] worker_processes 5; [...] keepalive_timeout 2; [...]
Виртуальные хосты определяются server {} контейнерах. Давайте изменим умолчанию виртуальный хост следующим образом:
[...] server { listen 80; server_name _; #charset koi8-r; #access_log logs/host.access.log main; location / { root /usr/share/nginx/html; index index.php index.html index.htm; } error_page 404 /404.html; location = /404.html { root /usr/share/nginx/html; } # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # location ~ \.php$ { root /usr/share/nginx/html; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; include fastcgi_params; } # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # location ~ /\.ht { deny all; } } [...]
server_name _; делает этот виртуальный хост по умолчанию всеохватывающий (конечно, Вы можете также указать имя хоста здесь, как www.example.com ).
В location / части, я добавил index.php на index строки. root /usr/share/nginx/html, означает, что корневая директория файлов /usr/share/nginx/html.
Важной частью для PHP это location ~ \.php$ {} строфы. Уберите это, чтобы включить его. Изменение корневой строки dosument корень веб-сайта (например, root /usr/share/nginx/html; ). Пожалуйста, убедитесь, что Вы изменили fastcgi_param строки SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name; поскольку в противном случае PHP интерпретатор не найдет PHP скрипт, который Вы вызываете в Вашем браузере.
Теперь сохраните файл и перезагрузите Nginx:
|
Теперь создайте следующий файл PHP в корневой документ /usr/share/nginx/html ...
|
<?php phpinfo(); ?>
Теперь мы вызываем этот файл в браузере (например, http://192.168.2.222/info.php ):
Как видите, PHP5 работает, и он работает через FastCGI, как показано в Server API строке. Если Вы прокрутите дальше вниз, Вы увидите все модули, которые уже включены в PHP5, включая модуль MySQL:
На данный урок имеется виртуальный образ готового сервера, ознакомиться с которым подробней и скачать его можно на форуме Nginx с PHP5 и MySQL в CentOS 5.6 + скачать.