Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.
Модераторы: SLEDopit , Модераторы разделов
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 26.01.2011 23:19
день добрый.
есть nginx, который
настроен я пытаюсь настроить как самостоятельный веб-сервер (без бэк-эндов) и php через fast-cgi (spawn-fcgi).
все это крутится на 8.0 freebsd.
все работает, за исключением одного:
если в директории с сайтом создать папку forum, то при попытке открыть site.ru/forum мне вылезает обычная 404 страничка установленной cms. аналогично не получается (ну вообще никак не получается) объвить alias для phpmyadmin, чтобы по site.ru/phpmyadmin оно переходило куда мне надо, а не на 404.
как его заставить ходить в папку forum, а не переделывать эту папку в 404 страничку ошибки?
конфиг ngnix'a:
Код: Выделить всё
user user user;
worker_processes 4;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen ip.address:80;
server_name site.net www.site.net;
location / {
root /data/www/site.net;
index index.php index.html index.htm;
}
location ~* ^/forum/ { # папка форум есть, однако сюда он не переходит;
# так же пробовал и location /forum с / и без в конце. ничего не помогает.
root /data/www/site.net/forum;
index index.php index.html index.htm;
}
if ($host !~* ^www\.) {
rewrite ^(.*)$ http://www.$host$1 permanent;
}
if ( !-e $request_filename ) { #необходимо для корректной отработки чпу в cms'ине
rewrite (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ /index.php last;
break;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
location ~ \.php$ {
root /data/www/site.net;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/site.net$fastcgi_script_name;
include fastcgi_params;
}
}
}я не исключаю, что я плохо прочитал ман или плохо гуглил свою проблему, но решения я так и не нашел.
буду благодарен за подсказки (:
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
KiWi
Бывший модератор
Сообщения: 2521
Статус: статус, статус, статус
Сообщение
KiWi » 27.01.2011 04:02
ifы выполнются ДО проверки location.
Таким образом,
Код: Выделить всё
if ( !-e $request_filename ) { #необходимо для корректной отработки чпу в cms'ине
rewrite (/|\.php|\.html|\.htm|\.feed|\.pdf|\.raw|/[^.]*)$ /index.php last;
break;
}
Переписывает /forum/ на /index.php со всеми вытекающими.
Этот if можно переписать на:
Код: Выделить всё
error_page 404 = @fallback;
location @fallback {
root /data/www/site.net;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
P.S.:
Код: Выделить всё
fastcgi_param SCRIPT_FILENAME /data/www/site.net$fastcgi_script_name;
можно поменять на:
Код: Выделить всё
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 27.01.2011 08:49
а, ну тогда многое прояснилось, но предложенный способ не работает. в логи падает вот что:
Код: Выделить всё
2011/01/27 08:41:04 [error] 69152#0: *4 open() "/data/www/site.net/notes" failed
(2: No such file or directory), client: xx.xx.xxx.xx, server: site.net,
request: "GET /notes HTTP/1.1", host: "www.site.net", referrer: "http://www.site.net/"хотя это как раз та чпу ссылка, по которой до удаления if'а он ходил, а после - перестал. а на форум теперь ходит. в принципе, если не добавлять location fallback, эффект был бы таким же )
такое ощущение, что location @fallback вообще не обрабатывается.
update. хотя если
Код: Выделить всё
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; заменить на
Код: Выделить всё
fastcgi_param SCRIPT_FILENAME $document_root/index.php$fastcgi_script_name;то оно начинает работать наполовину. а вторая половина все равно не работает. видать начинаются премудрости joomla.
просто тут начинается переадресация не nginx'вскую 404, а на 404 cms, видать nginx не считает такие странички ошибочными и переадресация не происходит.
большое спасибо,
KiWi .
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL
Сообщение
SLEDopit » 27.01.2011 13:43
в общем, если кому вдруг пригодится, полностью рабочее решение (nginx + fcgi + joomla):
Код: Выделить всё
location / {
root /path/to/joomla;
index index.php;
if (-e $request_filename) {
break;
}
rewrite ^/(.+)$ /index.php?q=$1 last;
}полный конфиг:
Код: Выделить всё
user site site;
worker_processes 4;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
gzip on;
server {
listen 195.14.104.32:80;
server_name site.net www.site.net;
location / {
root /data/www/site.net;
index index.php index.html index.htm;
if (-e $request_filename) {
break;
}
rewrite ^/(.+)$ /index.php?q=$1 last;
}
if ($host !~* ^www\.) {
rewrite ^(.*)$ http://www.$host$1 permanent;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/local/www/nginx-dist;
}
location ~ \.php$ {
root /data/www/site.net;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /data/www/site.net$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
}
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.