В настоящее время я пытаюсь разделить 3 приложения из одного репозитория на 3, но сохраняю структуру URL, поэтому разные приложения в основном должны доставлять разные местоположения в одном домене.
С чем я борюсь, так это с тем, что одно из приложений должно быть запасным вариантом для несуществующих URL-адресов, поэтому, если первое не соответствует, а второе нет, тогда третье должно обрабатывать запрос.
У меня есть структура:
/ etc / nginx / sites-enabled / main_site, здесь, кроме имени сервера и журналов include /etc/nginx/subsites-enabled/*
, где у меня есть 3 файла конфигурации, по одному для каждого приложения.
Каждый из 3 файлов конфигурации содержит блок местоположения.
Я попытался использовать regex с отрицательным прогнозом (в основном пытался жестко закодировать 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;
}
/ И т.д. / ngins / подсайты с поддержкой / Новости
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;
}
}
/ И т.д. / Nginx / подсайты с поддержкой / приложение:
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 .
@
префикс), который отображается в ваше приложение по умолчанию. Вы также можете настроить страницу error_, которая отображает 404 на указанное местоположение.