У меня есть виртуальный хост веб-сайта example.com, который статически обслуживается из / home / erealms / www.
Однако на веб-сайте выполняется серия сценариев Perl, которые расположены в разных каталогах. Итак, я пытаюсь достичь следующего:
http://example.com/ -> /home/erealms/www
http://example.com/erealms -> /home/erealms/ethereal/main
http://example.com/erealms/admin -> /home/erealms/ethereal/mgmt/admin
http://example.com/erealms/config -> /home/erealms/ethereal/mgmt/config
Во всех каталогах кроме http://example.com/ будут файлы perl, .pl, которые будут обслуживаться через fcgiwrapper.
Вот моя текущая конфигурация:
server {
add_header Cache-Control public;
access_log /var/log/nginx/access.log main buffer=32k;
error_log /var/log/nginx/error.log error;
expires max;
limit_req zone=gulag burst=200 nodelay;
listen 80;
server_name example.com;
index index.html index.htm default.html default.htm;
root /home/erealms/www;
location ~* (\.jpg|\.png|\.css)$ {
if ($http_referer !~ ^(http://rpn.ishikawa.sne.jp) ) {
return 405;
}
}
location = /favicon.ico {
return 204;
}
location /erealms/config {
root /home/erealms/ethereal/mgmt/config/;
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8000;
fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/mgmt/config$fastcgi_script_name;
}
location /erealms/admin {
root /home/erealms/ethereal/mgmt/admin/;
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8000;
fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/mgmt/admin$fastcgi_script_name;
}
location /erealms {
alias /home/erealms/ethereal/main;
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:8000;
fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/main$fastcgi_script_name;
}
}
Вы заметите, что у меня есть директивы root и alias, потому что я пытался понять, что, черт возьми, происходит. Но вот что странно. Ниже я указал, какие каталоги запрашиваются, и где nginx сообщает fcgiwrapper о доступе к ним:
http://example.com/erealms -> /home/erealms/ethereal/main/erealms
http://example.com/erealms/admin -> /home/erealms/ethereal/mgmt/admin/erealms/admin
http://example.com/erealms/config -> /home/erealms/ethereal/mgmt/config/erealms/config
А пока, просто чтобы эта чертова штука заработала для дальнейшего тестирования, я только что создал ленивые символические ссылки, указывающие туда, где они должны быть, но, очевидно, это не очень элегантное решение. Если бы кто-нибудь мог указать мне в правильном направлении, чтобы исправить эту текущую настройку, ИЛИ если у вас, возможно, есть идея более элегантного решения для этой конфигурации, я был бы очень признателен.
Не знаю, как отвечать на ваши вопросы в SF, но вот что я в итоге сделал:
server {
add_header Cache-Control public;
access_log /var/log/nginx/access.log main buffer=32k;
error_log /var/log/nginx/error.log error;
expires max;
limit_req zone=gulag burst=200 nodelay;
listen 80;
server_name rpn.ishikawa.sne.jp;
root /home/erealms/www;
index index.html;
location ~* (\.jpg|\.png|\.css)$ {
if ($http_referer !~ ^(http://rpn.ishikawa.sne.jp) ) {
return 405;
}
}
location = /favicon.ico {
return 204;
}
location ~ /erealms/config(/.*\.pl)$ {
alias /home/erealms/ethereal/mgmt/config;
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/tmp/cgi.sock;
fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/mgmt/config/$1;
}
location ~ /erealms/admin(/.*\.pl)$ {
alias /home/erealms/ethereal/mgmt/admin;
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/tmp/cgi.sock;
fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/mgmt/admin/$1;
}
location ~ /erealms(/.*\.pl)$ {
alias /home/erealms/ethereal/main;
gzip off;
include /etc/nginx/fastcgi_params;
fastcgi_pass unix:/tmp/cgi.sock;
fastcgi_param SCRIPT_FILENAME /home/erealms/ethereal/main/$1;
}
}
Теперь, к сожалению, это привело к некоторым другим ошибкам, когда я в конечном итоге просто буду использовать бэкэнд apache для обслуживания динамического контента с интерфейсом nginx, но я подумал, что оставлю это здесь, если кто-то еще столкнется с аналогичной проблемой.