我需要通过nginx代理静态资源目录。用户访问同一个路径:upload/*/1.txt,然后通过nginx,先去文件夹test1下找1.txt,没找到时通过error_page跳转到test2下,如果test2下没有跳转到test3下 .
就是遍历test1、test2、test3文件夹,找一个文件。找到直接返回,没找到跳转下一个。
目前两个文件夹是可行的,第三个怎么都触发不了
worker_processes 1;
events {
worker_connections 1024;
}
http {
proxy_intercept_errors on;
server {
listen 8084;
location /upload1/test{
proxy_pass http://192.168.0.188:8082/upload/test1;
if ( $request_uri ~ (?<=/upload1/test)(.*)){
set $url $1;
}
error_page 404 http://192.168.0.188:8084/upload2/test$url;
}
location /upload2/test{
proxy_pass http://192.168.0.188:8082/upload/test2;
if ( $request_uri ~ (?<=/upload2/test)(.*)){
set $url $1;
}
error_page 404 http://192.168.0.188:8084/upload3/test$url;
}
location /upload3/test{
proxy_pass http://192.168.0.188:8082/upload/test3;
error_page 404 /404.html;
}
location / {
#允许跨域请求
add_header 'Access-Control-Allow-0rigin' *;
#允许带上cookie请求
add_header 'Access-Control-Allow-Credentials' 'true';
#允许请求的方法,比如GET/POST/PUT/DELETE
add_header 'Access-Control-Allow-Methods' GET,POST,PUT,DELETE,PATCH,OPTIONS;
#允许请求的header
add_header 'Access-Control-Allow-Headers' *;
root html;
proxy_pass http://192.168.0.188:8082;
proxy_connect_timeout 10s;
#报表过大需要注意
proxy_read_timeout 600s;
proxy_set_header Host $host:8082;
proxy_send_timeout 30s;
index index.html index.htm;
}
}
}
Nginx可以使用location块来实现一个路径代理多个目录的功能。可以按照以下方式进行配置:
location /proxy/ {
proxy_pass http://backend/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
上述配置中,/proxy/是需要代理的路径,代理的请求将被转发到http://backend/,并在代理请求中设置了Host和X-Real-IP请求头。
谢谢,我的问题是有一个文件,存在于3台服务器中的其中一台,且每台服务器上的文件访问其IP:PORT/upload/***.txt能访问到。我再使用nginx来代理三台的/upload地址,以达到某文件无论在三台哪一台上,我可以访问到的目的。目前采用的方法是利用error_page 404做转发。
此问题我已经解决了,详细配置在下方评论,我不知跟您所描述的答案是否有区别