Archive

Posts Tagged ‘nginx’

ngx_http_secure_download

January 6th, 2011 No comments

Задача: обеспечить возможность скачивать контент с сервера. только посетителям вашего сайта.

Реализация: использование специальных ссылок, которые содержат ключ и дату протухания.

Модуль к nginx – ngx_http_secure_download

Сборка nginx:

$ cd nginx-0.8.53
$ ./configure --add-module=../ngx_http_secure_download/

Конфиг nginx:

        location /somefolder {
            secure_download on;
            secure_download_secret IAmSalt$remote_addr;
            secure_download_path_mode file;
 
            if ($secure_download = "-1") {
                rewrite /expired.html break;
            }
            if ($secure_download = "-2") {
                rewrite /bad_hash.html break;
            }
            if ($secure_download = "-3") {
                return 500;
            }
 
            rewrite ^(.*)/[0-9a-zA-Z]*/[0-9a-zA-Z]*$ $1 break; // crop all the /hash/time stuff off the url
        }

Генерация ссылки средствами php:

function secure_url($url)
{
  $ts = time() + 3600;
  $ts_in_hex = dechex($ts);
  $secret = 'IAmSalt' . $_SERVER['REMOTE_ADDR'];
  $hash = md5($url . '/' . $secret . '/' . $ts_in_hex);
  return  $url . '/' . $hash . '/' . $ts_in_hex;
}

Использованы материалы статьи: Видеохостинг своими руками

PS: Так же, есть модуль ngx_http_secure_link_module, но у него все ссылки перманентные.

Tags:

Установка nginx и php_fastcgi

February 1st, 2009 No comments

Променяли apache на nginx + fastcgi. Замечания:
- наверное должно работать быстрее
- в отличии от апачевских rewrite’ов – в nginx’овских вначале должно стоять ^/, а не просто ^
- красивый конфиг где все понятно
- под php надобно демона запускать, вот скриптик:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#!/bin/sh
#
 
# PROVIDE: php_fastcgi
# REQUIRE: DAEMON
# BEFORE:  LOGIN
# KEYWORD: shutdown
 
. /etc/rc.subr
 
name="php_fastcgi"
rcvar=`set_rcvar`
 
load_rc_config $name
 
: ${php_fastcgi_enable="NO"}
: ${php_fastcgi_user="www"}
: ${php_fastcgi_bindaddr="127.0.0.1"}
: ${php_fastcgi_bindport="9000"}
: ${php_fastcgi_children="5"}
: ${php_fastcgi_max_requests="1000"}
: ${php_fastcgi_allowed_env=""}
 
export PHP_FCGI_CHILDREN=${php_fastcgi_children}
export PHP_FCGI_MAX_REQUESTS=${php_fastcgi_max_requests}
 
command="/usr/local/bin/php-cgi"
command_args="-q -b ${php_fastcgi_bindaddr}:${php_fastcgi_bindport} &"
pidfile="/var/run/${name}.pid"
 
_allowed_env="ORACLE_HOME PATH USER PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"
_allowed_env="${_allowed_env} ${php_fastcgi_allowed_env}"
 
start_precmd="${name}_start_precmd"
start_postcmd="ps -U ${php_fastcgi_user} -o 'pid,command'|grep ${command}|head -1|cut -f 1 -d ' ' > ${pidfile}"
stop_postcmd=": > ${pidfile}"
php_fastcgi_start_precmd()
{
    export USER=${php_fastcgi_user}
    E=
    for i in ${_allowed_env}; do
        eval _val="\$$i"
        if [ "${_val}_x" != "_x" ]; then
            eval _add="$i=$_val"
            E="${E} ${_add}"
        fi
    done
    command="env - ${E} ${command}"
}
 
load_rc_config $name
 
run_rc_command "$1"
Tags: ,