将nginx root设置为公用文件夹,同时将父目录名保留在URL中
在我们的web项目中,我们有一个名为将nginx root设置为公用文件夹,同时将父目录名保留在URL中,nginx,url-rewriting,Nginx,Url Rewriting,在我们的web项目中,我们有一个名为public的目录。我们将nginx配置中的root设置为这个public文件夹,这样只有public文件夹中的文件可以通过URL访问 我们的配置看起来有点像这样: server { listen 80; server_name example.com root /srv/nginx/example.com/v1/public; index index.html index.php; locati
public
的目录。我们将nginx配置中的root
设置为这个public
文件夹,这样只有public
文件夹中的文件可以通过URL访问
我们的配置看起来有点像这样:
server {
listen 80;
server_name example.com
root /srv/nginx/example.com/v1/public;
index index.html index.php;
location / {
try_files $uri $uri/ /index.php;
add_header Access-Control-Allow-Origin *;
}
location ~ \.php$ {
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass php-fpm;
}
}
现在我们可以通过URLexample.com
访问srv/nginx/example.com/v1/public
。太好了
但是,我们如何将URL设置为example.com/v1
,根目录位于/srv/nginx/example.com/v1/public
?此外,如果我们上传一个新版本,它应该可以通过example.com/v2
的URL获得,根目录为/srv/nginx/example.com/v2/public
,而不需要更改配置文件
我认为我可以实现这一点的一种方法是,每次上传新版本时制作多个服务器块。但是就像我说的,我不希望每次上传新版本时都更改nginx配置,这样会有出错的风险
还有什么其他的方法?如何使用它们呢?使用a将URI拆分为两个组件,并使用a构建到目标文件(由表示)的路径
例如:
server {
listen 80;
server_name example.com
root /var/empty;
index index.html index.php;
add_header Access-Control-Allow-Origin *;
location ~ ^/(?<prefix>[^/]+)/(?<suffix>.*)$ {
alias /srv/nginx/example.com/$prefix/public/$suffix;
if (!-e $request_filename) { rewrite ^ /$prefix/index.php last; }
location ~ \.php$ {
if (!-f $request_filename) { return 404; }
fastcgi_intercept_errors on;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_pass php-fpm;
}
}
}
服务器{
听80;
server_name example.com
root/var/empty;
index.html index.php;
添加_头访问控制允许原点*;
位置~^/(?[^/]+)/(?*)${
别名/srv/nginx/example.com/$prefix/public/$suffix;
如果(!-e$request_filename){rewrite^/$prefix/index.php last;}
位置~\.php${
如果(!-f$request_filename){return 404;}
fastcgi_截获_错误开启;
包括fastcgi_参数;
fastcgi_参数脚本_文件名$request_文件名;
fastcgi_pass php fpm;
}
}
}
避免使用try_file
和alias
,原因是。请参见关于的使用,如果