我在 nginx 1.8.1 上运行的 wp 网站具有以下配置
location ^~ /wp-login.php { allow 10.0.0.0/24; deny all; }
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
当我打开http://example.com/wp-login.php从我的 LAN,它下载 php 文件而不是将其传递给 fastcgi。之后,我在 wp-login.php 位置内添加了所有 fastcgi 行,它开始工作了。
location ^~ /wp-login.php {
allow 10.0.0.0/24;
deny all;
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
但这是唯一的方法吗? 我可以在 nginx 上按特定模式传递顺序吗?
提前致谢。
答案1
一旦 nginx 选择了一个位置块来处理请求,它通常会停留在该位置块内。只有当存在某种内部重定向(即,您rewrite
对 URI执行try_files
或index
或error_page
)时,才会重新评估请求,并且最终可能会使用不同的位置来处理请求。
您不应该尝试编写配置来通过多个位置块传递请求,而应该考虑使用保存include
在其他文件中的配置片段,以便多个位置之间共享的配置可以保存在单个文件中 - 它更简单,在重复配置方面节省同样的精力,并且比重定向表现更好。