Şu anda 3 uygulamayı bir depodan 3'e ayırmaya çalışıyorum, ancak url yapısını koruyarak, temel olarak aynı alan altındaki farklı konumların farklı uygulamalar tarafından teslim edilmesi gerekiyor.
Mücadele ettiğim şey, uygulamalardan birinin var olmayan URL'ler için geri dönüş olması gerektiğidir, bu yüzden birincisi uyuşmuyorsa ve ikincisi uyuşmuyorsa, üçüncüsü isteği ele almalıdır
Sahip olduğum yapı:
/ etc / nginx / sites özellikli / main_site, burada, sunucu_adı ve sahip olduğum günlükler dışında, include /etc/nginx/subsites-enabled/*her bir uygulama için bir tane olmak üzere 3 yapılandırma dosyam var.
3 yapılandırma dosyasının her biri bir konum bloğu içerir.
Normalde negatif temelde denedim (temelde diğer uygulamalar ele urls sabit kodlamaya çalışıyorum) ama başarısız oldu.
Özetlemek gerekirse:
/ ve / topluluğu /etc/nginx/subsites-enabled/example.org/home (birkaç perl betiği) tarafından teslim edilmelidir
/ haberler /etc/nginx/subsites-enabled/example.org/news (wordpress) tarafından iletilmelidir
diğer her şey /etc/nginx/subsites-enabled/example.org/app (cake app) tarafından teslim edilmelidir
Perl biti iyi çalışıyor. Yaşadığım sorun, uygulamanın haberleri devralması (muhtemelen eşleştiği için. *), Çeşitli seçenekleri denedim (2 gündür bu oldum), ancak hiçbiri tüm sorunları çözmedi (bazen statik varlıklar çalışmaz, vb.).
Yapılandırmam:
/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 / alt siteler etkin / haber
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 / alt siteler etkin / 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) uygulama bloğunuz için, bunu yapabilmeniz gerekir location /(bu aynı değildir location = /, ancak önceden eşleşmemiş olan her şeyle eşleşmelidir. c) bazı durumlarda (özellikle normal ifadeler), sipariş önemlidir - 3'ü birleştirmek isteyebilirsiniz dosyaları bloklar doğru sırada olacak şekilde tek bir dosyaya dönüştürün. Ayrıca, yerine try_files kullanın !-e. Son olarak bkz. Wiki.nginx.org/HttpCoreModule#location .
@öneki kullanarak ) try_files kullanın . Ayrıca, 404'ü adlandırılmış bir konumla eşleyen bir hata_sayfası da kurabilirsiniz.