На даний момент я намагаюся розділити 3 програми з одного сховища на 3, але зберігаючи структуру URL, тому в основному різні місця в одному домені повинні доставлятися різними програмами.
З чим я борюся, це те, що одне з додатків має бути резервним для неіснуючих URL-адрес, тому якщо перший не відповідає, а другий не відповідає, третій повинен обробляти запит
У мене така структура:
/ etc / nginx / enable-sites / main_site, тут, окрім імені_сервера та журналів include /etc/nginx/subsites-enabled/*
, у яких є 3 файли конфігурації, по одному для кожної програми.
Кожен з 3 конфігураційних файлів містить блок розташування.
Я спробував негативний пошук в регексе (в основному намагаюся жорстко кодувати URL-адреси інших програм), але не вдалося.
Отже, підсумовуючи:
/ та / спільноту слід доставляти /etc/nginx/subsites-enabled/example.org/home (кілька сценаріїв perl)
/ новини слід доставляти /etc/nginx/subsites-enabled/example.org/news (wordpress)
все інше слід доставити за допомогою /etc/nginx/subsites-enabled/example.org/app (додаток для тортів)
Біт perl працює чудово. Проблема, яку я маю, полягає в тому, що додаток переймає новини (можливо, тому, що вони відповідають. *), Я пробував різні варіанти (я був у цьому 2 дні), але жоден з них не вирішив усіх проблем (іноді статичні активи не працюватимуть тощо).
Моя конфігурація:
/etc/nginx/sites-enabled/example.org:
server {
listen 80;
server_name example.org;
error_log /var/log/nginx/example.org.log;
include /etc/nginx/subsites-enabled/example.org/*;
}
/etc/nginx/subsites-enabled/example.org/home:
location = / {
rewrite ^.*$ /index.pl last;
}
location ~* /community(.*) {
rewrite ^.*$ /index.pl last;
}
location ~ \.pl {
root /var/www/vhosts/home;
access_log /var/log/nginx/home/access.log;
error_log /var/log/nginx/home/error.log;
include /etc/nginx/fastcgi_params;
fastcgi_index index.pl;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/home$fastcgi_script_name;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
}
/ etc / ngins / subites-enable / news
location /news {
access_log /var/log/nginx/news/access.log;
error_log /var/log/nginx/news/error.log debug;
error_page 404 = /news/index.php;
root /var/www/vhosts/news;
index index.php;
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ \.php {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/news$fastcgi_script_name;
}
}
/ etc / nginx / subites-enable / app:
location ~ .* {
access_log /var/log/nginx/app/access.log;
error_log /var/log/nginx/app/error.log;
rewrite_log on;
index index.php;
root /var/www/vhosts/app/app/webroot;
if (-f $request_filename) {
expires 30d;
break;
}
if (!-e $request_filename) {
rewrite ^.*$ /index.php last;
}
location ~ \.php {
include /etc/nginx/fastcgi_params;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/vhosts/app/app/webroot$fastcgi_script_name;
}
}
location ^~ /news
. б) для вашого блоку додатків ви повинні мати можливість location /
(це не те саме location = /
, але повинно відповідати всьому, що вже не збігається. в) у деяких випадках (зокрема, регулярні вирази), замовлення має значення - ви, можливо, захочете комбінувати 3 файли в єдиний файл з блоками в потрібному порядку. Також використовуйте try_files замість !-e
. Нарешті дивіться wiki.nginx.org/HttpCoreModule#location .
@
префікса), який відображається у вашій програмі за замовчуванням. Ви також можете встановити сторінку помилки, яка відображає 404 у вказане місце.