我目前正在尝试将3个应用程序从一个存储库拆分为3个,但是要保留url结构,因此同一域下的基本上不同的位置必须由不同的应用程序提供。
我正在苦苦挣扎的是其中一个应用程序必须是不存在的URL的后备,因此,如果第一个不匹配,而第二个不匹配,则第三个应处理请求
我得到的结构是:
/ etc / nginx / sites-enabled / main_site,在这里,除了server_name和日志外include /etc/nginx/subsites-enabled/*
,我还有3个配置文件,每个应用程序一个。
3个配置文件中的每一个都包含一个位置块。
我曾尝试在正则表达式中进行负前瞻(基本上是尝试对其他应用程序处理的网址进行硬编码),但失败了。
因此,总结一下:
/和/ community应该由/etc/nginx/subsites-enabled/example.org/home提供(一些perl脚本)
/ news应该由/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 / 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。