Apache Nginx:使用keep请求头重写url

Apache Nginx:使用keep请求头重写url,apache,.htaccess,mod-rewrite,nginx,Apache,.htaccess,Mod Rewrite,Nginx,我想做的是: 如果我请求的文件不在我的磁盘上,nginx将从real server请求,这是我的.htaccess文件规则,我想将其转换为nginx规则,因此结果是: 但这将导致两个问题: 如果我请求test.com/js/test.js它将重定向到http://xxx.xxx.xxx.xxx//js/sea1.2.js在我的浏览器中!但是真正的服务器可以拒绝请求,因为我没有使用test.com域,并返回404。那么,我怎样才能让来自real server的nginx请求在后台运行,并至少保留原

我想做的是:

如果我请求的文件不在我的磁盘上,nginx将从real server请求,这是我的
.htaccess
文件规则,我想将其转换为nginx规则,因此结果是:

但这将导致两个问题:

  • 如果我请求
    test.com/js/test.js
    它将重定向到
    http://xxx.xxx.xxx.xxx//js/sea1.2.js
    在我的浏览器中!但是真正的服务器可以拒绝请求,因为我没有使用
    test.com
    域,并返回
    404
    。那么,我怎样才能让来自real server的nginx请求在后台运行,并至少保留原始请求头信息来保留域。就像
    Apache
    那样。

  • 如上所述,重定向结果是
    http://xxx.xxx.xxx.xxx//js/sea1.2.js
    ,js前面有双斜杠。我怎样才能修好它


  • 404
    表示找不到,请更改配置:

    location /js/ {
        root   E://Work/master;
    
        if (!-e $request_filename){
            rewrite ^(.*)$ http://xxx.xxx.xxx.xxx$1 redirect;
       }            
    }
    

    重定向结果将是
    http://xxx.xxx.xxx.xxx/js/sea1.2.js
    ,这将使它的行为类似于Apache

    我假设
    [p]
    标志意味着代理,这也是我的答案

    location / {
        try_files $uri @proxy;
    }
    location @proxy {
        proxy_pass http://xxx.xxx.xxx.xxx/$request_uri;
    }
    
    location /js/ {
        root   E://Work/master;
    
        if (!-e $request_filename){
            rewrite ^(.*)$ http://xxx.xxx.xxx.xxx$1 redirect;
       }            
    }
    
    location / {
        try_files $uri @proxy;
    }
    location @proxy {
        proxy_pass http://xxx.xxx.xxx.xxx/$request_uri;
    }