현재 하나의 저장소에서 3 개의 응용 프로그램을 3 개의 저장소로 분리하려고하지만 URL 구조를 유지하므로 기본적으로 동일한 도메인 아래의 다른 위치를 다른 응용 프로그램에서 제공해야합니다.
내가 고투하고있는 것은 앱 중 하나가 존재하지 않는 URL에 대한 폴백이어야한다는 것입니다. 따라서 첫 번째 URL이 일치하지 않고 두 번째 URL이 일치하지 않으면 세 번째가 요청을 처리해야합니다
내가 가진 구조는 다음과 같습니다.
/ etc / nginx / sites-enabled / main_site (여기서는 server_name 및 logs 제외)에서 include /etc/nginx/subsites-enabled/*
각 앱마다 하나씩 3 개의 구성 파일이 있습니다.
3 개의 구성 파일 각각에는 위치 블록이 있습니다.
정규식에서 부정적인 미리보기를 시도했지만 (기본적으로 다른 앱이 처리하는 URL을 하드 코딩하려고 시도했지만) 실패했습니다.
요약하자면 다음과 같습니다.
/ 및 / community는 /etc/nginx/subsites-enabled/example.org/home (몇 가지 펄 스크립트)을 통해 제공되어야합니다.
/ news는 /etc/nginx/subsites-enabled/example.org/news(wordpress)에서 제공해야합니다.
그 밖의 모든 것은 /etc/nginx/subsites-enabled/example.org/app (케이크 앱)에서 제공해야합니다.
펄 비트는 잘 작동합니다. 내가 겪고있는 문제는 앱이 뉴스를 인수한다는 것입니다 (아마도. *와 일치하기 때문에). 다양한 옵션을 시도했지만 (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 / subsites-enabled / 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 / subsites-enabled / 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
. b) 앱 블록의 경우 location /
(와 동일하지 location = /
않지만 일치하지 않는 모든 항목과 일치해야 함) c) 경우에 따라 (특히 정규식) 순서가 중요합니다-3을 결합 할 수 있습니다 블록을 올바른 순서로 하나의 파일로 묶습니다. 또한 대신 try_files를 사용하십시오 !-e
. 마지막으로 wiki.nginx.org/HttpCoreModule#location을 참조하십시오 .
@
. 404를 명명 된 위치에 매핑하는 error_page를 설정할 수도 있습니다.