Показаны сообщения с ярлыком nginx. Показать все сообщения
Показаны сообщения с ярлыком nginx. Показать все сообщения

6 августа 2012 г.

Elgg: mod-rewrite для NGINX

Сегодня развернул Elgg на веб-сервере NGINX, и первая проблема с которой столкнулся - это небходимость замены mod-rewrite директив, которые содержатся в файле .htaccess, на соответсвующие правила для NGINX (rewrite-rules).

И первый вопрос, который у меня возник: куда нужно писать эти правила?
Rewrite-rules для Nginx указываются внутри секции server в файле настройки виртуального хоста, например /etc/nginx/sites-available/default.

Следующий вопрос был: что же туда писать?
Если подумать логически, то задача не совсем сложная, необходимо всего лишь конвертировать директивы из htaccess в соответвующие правила для nginx. Спасибо Томасу Делингу, который уже провел иследования в этом вопросе и успешно конвертировал директивы файла htaccess для Elgg 1.8.2. Все что мне осталось, это скопировать набор правил и обновить файл настройки виртуального хостинга, в результате он выглядел приблизительно так:

server {
 listen     80;
 server_name elgg.domain.com;
 root        /var/www-nginx/elgg/htdocs/;

 error_log /var/log/nginx/error.log;
 access_log /var/log/nginx/access.log;

 index         index.php index.html;
 fastcgi_index index.php;
 
 client_max_body_size      8M;
 client_body_buffer_size 256K;

 rewrite ^/pg\/([A-Za-z0-9\_\-]+)$ /engine/handlers/page_handler.php?handler=$1&$args;
 rewrite ^/pg\/([A-Za-z0-9\_\-]+)\/(.*)$ /engine/handlers/page_handler.php?handler=$1&page=$2&$args;
 rewrite ^/tag\/(.+)\/?$ /engine/handlers/page_handler.php?handler=search&page=$1;
 rewrite ^/action\/([A-Za-z0-9\_\-\/]+)$ /engine/handlers/action_handler.php?action=$1&$args;
 rewrite ^/cache\/(.*)$ /engine/handlers/cache_handler.php?request=$1&$args;
 rewrite ^/services\/api\/([A-Za-z0-9\_\-]+)\/(.*)$ /engine/handlers/service_handler.php?handler=$1&request=$2&$args;
 rewrite ^/export\/([A-Za-z]+)\/([0-9]+)\/?$ /engine/handlers/export_handler.php?view=$1&guid=$2;
 rewrite ^/export\/([A-Za-z]+)\/([0-9]+)\/([A-Za-z]+)\/([A-Za-z0-9\_]+)\/$ /engine/handlers/export_handler.php?view=$1&guid=$2&type=$3&idname=$4;
 rewrite /xml-rpc.php /engine/handlers/xml-rpc_handler.php;
 rewrite /mt/mt-xmlrpc.cgi /engine/handlers/xml-rpc_handler.php;
 rewrite ^/rewrite.php$ /install.php;
 if (!-d $request_filename){
  set $rule_11 1$rule_11;
 }
 if (!-f $request_filename){
  set $rule_11 2$rule_11;
 }
 if ($rule_11 = "21"){
  rewrite ^/([A-Za-z0-9\_\-]+)$ /engine/handlers/page_handler.php?handler=$1;
 }
 if (!-d $request_filename){
  set $rule_12 1$rule_12;
 }
 if (!-f $request_filename){
  set $rule_12 2$rule_12;
 }
 if ($rule_12 = "21"){
  rewrite ^/([A-Za-z0-9\_\-]+)\/(.*)$ /engine/handlers/page_handler.php?handler=$1&page=$2;
 }
 
 location ~ \.php$ {
  include fastcgi_params;

  # Assuming php-fastcgi running on localhost port 9000
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

  fastcgi_connect_timeout 60;
  fastcgi_send_timeout 180;
  fastcgi_read_timeout 180;
  fastcgi_buffer_size 128k;
  fastcgi_buffers 4 256k;
  fastcgi_busy_buffers_size 256k;
  fastcgi_temp_file_write_size 256k;
  fastcgi_intercept_errors on;
 }
 
 # Do not put CSS there or it will break simplecache
 location ~* \.(bmp|js|gif|ico|jpg|jpeg|png)$ {
  expires max;
  # log_not_found off;
 }
}

Как установить и настроить NGINX+PHP+XDebug на Ubuntu 12.04

1. Установка NGINX-сервера:
sudo add-apt-repository ppa:nginx/stable 
sudo apt-get update 
sudo apt-get install nginx 


2. Установка PHP:

Если на вашем сервере php еще не установлен, то необходимо выполнить следующее:
sudo apt-get install php5-cli php5-cgi php5-fpm php5-mcrypt php5-mysql

В противном же случае достаточно установить пакет php5-fpm:
sudo apt-get install php5-fpm


3. Настройка виртуального хоста в NGINX

Открываем и редактируем файл  /etc/nginx/sites-available/default:

sudo gedit  /etc/nginx/sites-available/default

Для начала поменяем параметры root и index в секции server:

server{
...
    root: /var/www;
    index: index.php
...
}

Если вы уже пользуетесь веб-сервером apache, то для правильной работы nginx нужно будет поменять номер порта с 80 на 8000:

server{ 
 listen: 8000;
...
}

Убираем комментарии со следующих строк:

 location ~ \.php$ {
 fastcgi_pass 127.0.0.1:9000;
 fastcgi_index index.php;
 include fastcgi_params;
  }


4. Запускаем NGINX

sudo service nginx start

Также запускаем сервис, отвечающий за работу php:

sudo service php5-fpm start


5. Установка и настройка XDebug

Устанавливаем точно так же как описано в первой части статьи "Как настроить NetBeans для работы с XDebug"

Далее небходимо отредактировать файл /etc/php5/fpm/php.ini.
sudo gedit /etc/php5/fpm/php.ini


Перед тегом Date добавляем следующий код:
zend_extension="/usr/lib/php5/20090626/xdebug.so"

xdebug.default_enable = On
xdebug.var_display_max_depth=6
xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9900
xdebug.remote_handler=dbgp
xdebug.idekey=netbeans-xdebug
xdebug.remote_autostart=1
xdebug.remote_log=/tmp/xdebug.log
xdebug.profiler_enable_trigger=1
xdebug.profiler_enable=0
xdebug.profiler_output_dir=/tmp/profiler
xdebug.show_local_vars=1
xdebug.overload_var_dump=1

... перезагружаем сервер


sudo service nginx restart


так как при перезагрузке сервера параметры php.ini автоматически не обновляются, необходимо также перезагрузить сервис php5-fpm:


sudo service php5-fpm restart


6. Настройка NetBeans

Открываем NetBeans Tools>Options>PHP>Debugging и в строке Debugger Port вводим значение 9900, нажимаем Ok.

На этом настройка завершена.

Осталось только поместить в /var/www тестовый файл index.php с кодом:

   

echo phpinfo();