Настройка связки Nginx - Apache - FastCGI и mod_rewrite

Проблемы с установкой, настройкой и работой системных и сетевых программ.

Модераторы: GRooVE, alexco

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
server801
ст. лейтенант
Сообщения: 1421
Зарегистрирован: 2008-09-27 21:15:16
Откуда: Саратов
Контактная информация:

Настройка связки Nginx - Apache - FastCGI и mod_rewrite

Непрочитанное сообщение server801 » 2010-09-29 13:08:19

Оригинал тут http://vds-admin.ru/nginx/nastroika-svy ... he-fastcgi
Мои конфиги
nginx.conf

Код: Выделить всё

user  www;
worker_processes  2;

error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    tcp_nopush      on;

    #keepalive_timeout  0;
    keepalive_timeout  65;
    reset_timedout_connection  on;

    #gzip  on;

include  vhosts/*.conf;


}
виртуалхост

Код: Выделить всё

server {
        listen       80;     # Внешний IP адрес, на котором Nginx принимает соединения
        server_name  forum.xxx.org www.forum.xxx.org;            # Имя хоста

        #charset koi8-r;

        access_log  logs/forum.access.log  main;

        root /usr/local/www/forum;

##############################################
        location / {
            index  index.php;
        }

        location ~* \.(jpg|jpeg|gif|png|ico|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|txt|tar|mid|midi|wav|bmp|flv|rtf|js|swf|iso){
            expires max;
        }
###############################################
#Отдаем статику flv
        location ~ \.flv$ {
        flv;
        }
# Данные две секции Location, будет обрабатывать Nginx

#############################################

#################  Apache  #####################
        location ~ \.(pl|cgi)$ {
            proxy_pass   http://127.0.0.1:88;
            proxy_redirect     off;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        }
# Запросы соответствующие этому Location, будут переданы на обработку веб серверу Apache

#############################################

################## FastCGI #####################
        location ~ \.php$ {
            fastcgi_pass   unix:/tmp/fastcgi_sock;        # Сокет для связи с FastCGI
            fastcgi_index  index.php;                     # Индексный файл
            fastcgi_param  SCRIPT_FILENAME  /usr/local/www/forum$fastcgi_script_name;
#Переменная $document_root, содержит путь к корневой папке дерева документов
#переменная $fastcgi_script_name, содержит имя запрошенного файла скрипта
            include        fastcgi_params;                # Включение файла с fastcgi параметрами, передаваемыми fastcgi серверу
        }
# Эти запросы будут переданы для обработки FastCGI серверу

#############################################
        location ~ /\.ht {
            deny  all;
        }


        #error_page  404              /404.html;
        #error_page   500 502 503 504  /50x.html;
        #location = /50x.html {
        #    root   html;
        #}
    }
spawn-fcgi

Код: Выделить всё


#!/bin/sh
#

# PROVIDE: spawn_fcgi
# REQUIRE: DAEMON
# BEFORE:  LOGIN
# KEYWORD: shutdown

. /etc/rc.subr

name="spawn_fcgi"
rcvar=`set_rcvar`

load_rc_config $name

: ${spawn_fcgi_enable="NO"}
: ${spawn_fcgi_app="/usr/local/bin/php-cgi"}
: ${spawn_fcgi_app_args=""}
: ${spawn_fcgi_pidfile="/var/run/spawn-fcgi.pid"}
: ${spawn_fcgi_username="www"}
: ${spawn_fcgi_groupname="www"}
#: ${spawn_fcgi_chroot_dir=""}
: ${spawn_fcgi_socket="/tmp/fastcgi_sock"}
#: ${spawn_fcgi_bindaddr="127.0.0.1"}
#: ${spawn_fcgi_bindport="9000"}
: ${spawn_fcgi_bindsocket=""}
: ${spawn_fcgi_bindsocket_mode="0777"}
: ${spawn_fcgi_children="5"}
: ${spawn_fcgi_max_requests="1000"}
: ${spawn_fcgi_web_server_addrs=""}
: ${spawn_fcgi_allowed_env=""}
: ${spawn_fcgi_path_env="/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin"}

if [ -z "${spawn_fcgi_bindsocket}" ]; then
    _spawn_fcgi_bind="-a ${spawn_fcgi_bindaddr} -p ${spawn_fcgi_bindport}"
else
    if [ -n "${spawn_fcgi_bindsocket_mode}" ]; then
        _spawn_fcgi_bind="-s ${spawn_fcgi_bindsocket} -M ${spawn_fcgi_bindsocket_mode}"
    else
        _spawn_fcgi_bind="-s ${spawn_fcgi_bindsocket}"
    fi
fi

if [ -n "${spawn_fcgi_chroot_dir}" ]; then
    _spawn_fcgi_chroot="-c ${spawn_fcgi_chroot_dir}"
else
    _spawn_fcgi_chroot=""
fi

command="/usr/local/bin/spawn-fcgi"
#command_args="-u ${spawn_fcgi_username} -g ${spawn_fcgi_groupname} ${_spawn_fcgi_bind} ${_spawn_fcgi_chroot} -P ${spawn_fcgi_pidfile} -- ${spawn_fcgi_app} ${spawn_fcgi_app_args}"
command_args="-u ${spawn_fcgi_username} -g ${spawn_fcgi_groupname} -P ${spawn_fcgi_pidfile} -s ${spawn_fcgi_socket} -- ${spawn_fcgi_app}"
pidfile=${spawn_fcgi_pidfile}
procname=${spawn_fcgi_app}

_allowed_env="PATH USER PHP_FCGI_CHILDREN PHP_FCGI_MAX_REQUESTS FCGI_WEB_SERVER_ADDRS"
_allowed_env="${_allowed_env} ${spawn_fcgi_allowed_env}"

start_precmd="${name}_start_precmd"
stop_postcmd="${name}_stop_postcmd"

spawn_fcgi_start_precmd()
{
    export PATH=${spawn_fcgi_path_env}
    export USER=${spawn_fcgi_username}
    export PHP_FCGI_CHILDREN=${spawn_fcgi_children}
    export PHP_FCGI_MAX_REQUESTS=${spawn_fcgi_max_requests}
    export FCGI_WEB_SERVER_ADDRS=${spawn_fcgi_web_server_addrs}
    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}"
}

spawn_fcgi_stop_postcmd()
{
    rm -f ${pidfile}

    if [ -n "${spawn_fcgi_bindsocket}" -a -S "${spawn_fcgi_chroot_dir}${spawn_fcgi_bindsocket}" ]; then
        rm -f ${spawn_fcgi_chroot_dir}${spawn_fcgi_bindsocket}${spawn_fcgi_socket}
    fi
}

run_rc_command "$1"
ну и апач

Код: Выделить всё

Listen 88
LoadModule fastcgi_module     libexec/apache22/mod_fastcgi.so
RPAFenable On
RPAFsethostname On
RPAFproxy_ips 127.0.0.1
RPAFheader X-Forwarded-For
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Собственно вопрос - не работает реврайт, вот правила:

Код: Выделить всё

<IfModule mod_rewrite.c>
Options -MultiViews
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
викидывает 404 ошибку.

лог nginx

Код: Выделить всё

2010/09/29 14:06:17 [error] 44783#0: *17 open() "/usr/local/www/forum/topic/7-п©я?я?п?п?п?п?п?я?п?п?я?-п©п?-bb-п?п?п?п?п?/page__view__getnewpost" failed (2: No such file or directory), client: 10.10.10.5, server: forum.xxx.org, request: "GET /topic/7-%d0%bf%d1%83%d1%82%d0%b5%d0%b2%d0%be%d0%b4%d0%b8%d1%82%d0%b5%d0%bb%d1%8c-%d0%bf%d0%be-bb-%d0%ba%d0%be%d0%b4%d0%b0%d0%bc/page__view__getnewpost HTTP/1.1", host: "forum.xxx.org", referrer: "http://forum.xxx.org/"
Вообщем нид хелп. Я так понимаю что не отрабатывает mod_rewrite в такой связке...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
server801
ст. лейтенант
Сообщения: 1421
Зарегистрирован: 2008-09-27 21:15:16
Откуда: Саратов
Контактная информация:

Re: Настройка связки Nginx - Apache - FastCGI и mod_rewrite

Непрочитанное сообщение server801 » 2010-09-29 18:04:59

Ну кто нибудь подскажет?

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Настройка связки Nginx - Apache - FastCGI и mod_rewrite

Непрочитанное сообщение vadim64 » 2010-09-30 8:55:04

там в статье после схемы сразу написано что и как работает. если запрашивается статика - работает сам нгиникс, которые принимает запросы из инета. если запрашивается перл или цги то нгиникс передаёт этот запрос в апач. если пхп - то в фаст цги.

поэтому у тебя ошибка 404 и сгенерена нгиниксом. потому что ему пришёл запрос похожий на статику. он полез его искать в файлах и не нашёл.

тебе нада самим нгиниксом сделать реврайт, который превратит ЧПУ урл, на которых пашет твой портал, в обычный запрос к пхп скрипту. и тогда сам нгиникс поймёт что нужно передать прореврайченый запрос в фаст цги
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
server801
ст. лейтенант
Сообщения: 1421
Зарегистрирован: 2008-09-27 21:15:16
Откуда: Саратов
Контактная информация:

Re: Настройка связки Nginx - Apache - FastCGI и mod_rewrite

Непрочитанное сообщение server801 » 2010-09-30 9:24:25

тогда смысл использовать апач теряется....

Аватара пользователя
vadim64
майор
Сообщения: 2101
Зарегистрирован: 2009-09-17 15:15:26
Откуда: Засратовец

Re: Настройка связки Nginx - Apache - FastCGI и mod_rewrite

Непрочитанное сообщение vadim64 » 2010-09-30 9:36:42

ну если у вас нет перловых скриптов, то да
Люди не делятся на национальности, партии, фракции и религии. Люди делятся на умных и дураков, а вот дураки делятся на национальности, партии, фракции и религии.

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35462
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: Настройка связки Nginx - Apache - FastCGI и mod_rewrite

Непрочитанное сообщение Alex Keda » 2010-10-01 7:58:15

посомтрите как в ISPmanager конфиги генерятся

Код: Выделить всё

        server {
                listen 77.73.25.114:80;
                server_name srv0.test-hf.ru www.srv0.test-hf.ru;

                # общие инклюды для всех виртуалхостов
                include /usr/local/etc/nginx/all.vhost.includes.conf;

                location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) {
                        proxy_pass http://77.73.25.114:8080;
                        proxy_redirect http://srv0.test-hf.ru:8080/ /;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Real-IP $remote_addr;
                }
                location / {
                        proxy_pass http://77.73.25.114:8080;
                        proxy_redirect http://srv0.test-hf.ru:8080/ /;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Real-IP $remote_addr;
                }
                location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar)$ {
                        root /home/srv0/data/www/srv0.test-hf.ru;
                        access_log /home/httpd-logs/srv0.test-hf.ru.access.log;
                        error_page 404 = @fallback;
                }
                location @fallback {
                        proxy_pass http://77.73.25.114:8080;
                        proxy_set_header Host $host;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header X-Real-IP $remote_addr;
                }
        }
Убей их всех! Бог потом рассортирует...

Аватара пользователя
server801
ст. лейтенант
Сообщения: 1421
Зарегистрирован: 2008-09-27 21:15:16
Откуда: Саратов
Контактная информация:

Re: Настройка связки Nginx - Apache - FastCGI и mod_rewrite

Непрочитанное сообщение server801 » 2010-10-01 9:01:32

спасибо за конфиг, но я перерполз опять на mod_php, так как на нем все правила отрабатывают корректно. Если сумею переписать правила под nginx, то апач вообще можно выкинуть

Аватара пользователя
garrotte
ефрейтор
Сообщения: 64
Зарегистрирован: 2008-02-27 15:56:09
Контактная информация:

Re: Настройка связки Nginx - Apache - FastCGI и mod_rewrite

Непрочитанное сообщение garrotte » 2010-12-21 23:15:40

что-то типа:

Код: Выделить всё

location / {
  try_files $uri $uri/ /index.php;
}
если еще актуально)