nginx alias with location regex get wrong file name
my location config:
location ~ ^/maat/(js|css|images)/ {
alias /usr/local/services/gdt-frontend-test-1.0/maat/$1/;
expires 1y;
}
complete server config:
server {
listen 80;
server_name audit2.test.qq.com;
charset utf-8;
log_not_found on;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
access_log /usr/local/services/tnginx_1_0_0-1.0/log/audit2_access.log;
error_log /usr/local/services/tnginx_1_0_0-1.0/log/audit2_error.log debug;
#rewrite_log on;
location ^~ /maat/api/ {
proxy_pass http://localhost:8351/maat/api/;
}
location ^~ /maat/mo/ {
proxy_pass http://localhost:8351/maat/mo/;
}
location ^~ /maat/logOut {
proxy_pass http://localhost:8351/maat/logOut;
}
location ^~ /maat/reviewStatusReuse/ {
proxy_pass http://localhost:8351/maat/reviewStatusReuse/;
}
#location ^~ /maat/ {
# proxy_pass http://localhost:8765;
#}
location ~ ^/maat/(js|css|images)/ {
alias /usr/local/services/gdt-frontend-test-1.0/maat/$1/;
expires 1y;
}
location /maat/ {
root /usr/local/services/gdt-frontend-test-1.0/;
add_header Cache-Control no-cache;
add_header Cache-Control private;
}
}
when i request http://xxxx/maat/js/entry_xxx.js i got 301 with location: http://xxxx/maat/js/entry_xxx.js/
the debug log is this:
2021/02/22 10:57:14 [debug] 3423#0: *19 http header: "Host: audit2.test.qq.com"
2021/02/22 10:57:14 [debug] 3423#0: *19 http header: "Connection: keep-alive"
2021/02/22 10:57:14 [debug] 3423#0: *19 http header: "Accept-Encoding: gzip"
2021/02/22 10:57:14 [debug] 3423#0: *19 http header done
2021/02/22 10:57:14 [debug] 3423#0: *19 event timer del: 531: 28164571712
2021/02/22 10:57:14 [debug] 3423#0: *19 generic phase: 0
2021/02/22 10:57:14 [debug] 3423#0: *19 __mydebug_menshen. ngx_http_menshen_handler is
called r: 00000000029F9630 nginx_version: 1016001
2021/02/22 10:57:14 [debug] 3423#0: *19 <1>status: MENSHEN_STATUS_CTX_CREATE_INIT. uri:
/maat/js/entry_e731dc7.js. args: r: 00000000029F9630 r->main: 00000000029F9630 r->count: 1
2021/02/22 10:57:14 [debug] 3423#0: *19 http cleanup add: 00000000029FA4E0
2021/02/22 10:57:14 [debug] 3423#0: *19 server menshen_module: -1 0000000002A56378
2021/02/22 10:57:14 [debug] 3423#0: *19 host and cgi not match ,ptr_conf_rule null
2021/02/22 10:57:14 [debug] 3423#0: *19 rewrite phase: 2
2021/02/22 10:57:14 [debug] 3423#0: *19 rewrite phase: 3
2021/02/22 10:57:14 [debug] 3423#0: *19 test location: "/maat/"
2021/02/22 10:57:14 [debug] 3423#0: *19 test location: "mo/"
2021/02/22 10:57:14 [debug] 3423#0: *19 test location: "logOut"
2021/02/22 10:57:14 [debug] 3423#0: *19 test location: "api/"
2021/02/22 10:57:14 [debug] 3423#0: *19 test location: ~ "^/maat/(js|css|images)/"
2021/02/22 10:57:14 [debug] 3423#0: *19 using configuration "^/maat/(js|css|images)/"
2021/02/22 10:57:14 [debug] 3423#0: *19 http cl:-1 max:8388608
2021/02/22 10:57:14 [debug] 3423#0: *19 rewrite phase: 5
2021/02/22 10:57:14 [debug] 3423#0: *19 rewrite phase: 6
2021/02/22 10:57:14 [debug] 3423#0: *19 post rewrite phase: 7
2021/02/22 10:57:14 [debug] 3423#0: *19 generic phase: 8
2021/02/22 10:57:14 [debug] 3423#0: *19 generic phase: 9
2021/02/22 10:57:14 [debug] 3423#0: *19 generic phase: 10
2021/02/22 10:57:14 [debug] 3423#0: *19 access phase: 11
2021/02/22 10:57:14 [debug] 3423#0: *19 access phase: 12
2021/02/22 10:57:14 [debug] 3423#0: *19 access phase: 13
2021/02/22 10:57:14 [debug] 3423#0: *19 post access phase: 14
2021/02/22 10:57:14 [debug] 3423#0: *19 generic phase: 15
2021/02/22 10:57:14 [debug] 3423#0: *19 generic phase: 16
2021/02/22 10:57:14 [debug] 3423#0: *19 content phase: 17
2021/02/22 10:57:14 [debug] 3423#0: *19 content phase: 18
2021/02/22 10:57:14 [debug] 3423#0: *19 content phase: 19
2021/02/22 10:57:14 [debug] 3423#0: *19 content phase: 20
2021/02/22 10:57:14 [debug] 3423#0: *19 content phase: 21
2021/02/22 10:57:14 [debug] 3423#0: *19 content phase: 22
2021/02/22 10:57:14 [debug] 3423#0: *19 http script copy: "/usr/local/services/gdt-frontend-test-1.0/maat/"
2021/02/22 10:57:14 [debug] 3423#0: *19 http script capture: "js"
2021/02/22 10:57:14 [debug] 3423#0: *19 http script copy: "/"
2021/02/22 10:57:14 [debug] 3423#0: *19 http filename: "/usr/local/services/gdt-frontend-test-1.0/maat/js/"
2021/02/22 10:57:14 [debug] 3423#0: *19 add cleanup: 00000000029FA550
2021/02/22 10:57:14 [debug] 3423#0: *19 http static fd: -1
2021/02/22 10:57:14 [debug] 3423#0: *19 http dir
2021/02/22 10:57:14 [debug] 3423#0: *19 http finalize request: 301, "/maat/js/entry_e731dc7.js?" a:1, c:1
2021/02/22 10:57:14 [debug] 3423#0: *19 http special response: 301, "/maat/js/entry_e731dc7.js?"
2021/02/22 10:57:14 [debug] 3423#0: *19 http set discard body
2021/02/22 10:57:14 [debug] 3423#0: *19 charset: "" > "utf-8"
2021/02/22 10:57:14 [debug] 3423#0: *19 HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Mon, 22 Feb 2021 02:57:14 GMT
Content-Type: text/html
Content-Length: 162
Location: http://audit2.test.qq.com/maat/js/entry_e731dc7.js/
Connection: close
Expires: Tue, 22 Feb 2022 02:57:14 GMT
Cache-Control: max-age=31536000
2021/02/22 10:57:14 [debug] 3423#0: *19 write new buf t:1 f:0 0000000002B4F7D0, pos 0000000002B4F7D0, size: 287 file: 0, size: 0
2021/02/22 10:57:14 [debug] 3423#0: *19 http write filter: l:0 f:0 s:287
2021/02/22 10:57:14 [debug] 3423#0: *19 http output filter "/maat/js/entry_e731dc7.js?"
2021/02/22 10:57:14 [debug] 3423#0: *19 http copy filter: "/maat/js/entry_e731dc7.js?"
2021/02/22 10:57:14 [debug] 3423#0: *19 http postpone filter "/maat/js/entry_e731dc7.js?" 0000000002B4FA10
2021/02/22 10:57:14 [debug] 3423#0: *19 write old buf t:1 f:0 0000000002B4F7D0, pos 0000000002B4F7D0, size: 287 file: 0, size: 0
2021/02/22 10:57:14 [debug] 3423#0: *19 write new buf t:0 f:0 0000000000000000, pos 0000000000B97440, size: 116 file: 0, size: 0
2021/02/22 10:57:14 [debug] 3423#0: *19 write new buf t:0 f:0 0000000000000000, pos 0000000000B97200, size: 46 file: 0, size: 0
2021/02/22 10:57:14 [debug] 3423#0: *19 http write filter: l:1 f:0 s:449
2021/02/22 10:57:14 [debug] 3423#0: *19 http write filter limit 0
2021/02/22 10:57:14 [debug] 3423#0: *19 writev: 449 of 449
2021/02/22 10:57:14 [debug] 3423#0: *19 http write filter 0000000000000000
2021/02/22 10:57:14 [debug] 3423#0: *19 http copy filter: 0 "/maat/js/entry_e731dc7.js?"
2021/02/22 10:57:14 [debug] 3423#0: *19 http finalize request: 0, "/maat/js/entry_e731dc7.js?" a:1, c:1
2021/02/22 10:57:14 [debug] 3423#0: *19 http request count:1 blk:0
2021/02/22 10:57:14 [debug] 3423#0: *19 http close request
2021/02/22 10:57:14 [debug] 3423#0: *19 __mydebug. menshen cleanup r: 00000000029F9630
2021/02/22 10:57:14 [debug] 3423#0: *19 http log handler
2021/02/22 10:57:14 [debug] 3423#0: *19 http monitor handler
2021/02/22 10:57:14 [debug] 3423#0: *19 free: 00000000029F95E0, unused: 0
2021/02/22 10:57:14 [debug] 3423#0: *19 free: 0000000002B4F380, unused: 2096
2021/02/22 10:57:14 [debug] 3423#0: *19 close http connection: 531
2021/02/22 10:57:14 [debug] 3423#0: *19 reusable connection: 0
2021/02/22 10:57:14 [debug] 3423#0: *19 free: 0000000002B6F400
2021/02/22 10:57:14 [debug] 3423#0: *19 free: 0000000002C032C0, unused: 136
2021/02/22 10:57:14 [debug] 3429#0: *20 http header: "Host: audit2.test.qq.com"
2021/02/22 10:57:14 [debug] 3429#0: *20 http header: "Connection: keep-alive"
2021/02/22 10:57:14 [debug] 3429#0: *20 http header: "Accept-Encoding: gzip"
2021/02/22 10:57:14 [debug] 3429#0: *20 http header done
2021/02/22 10:57:14 [debug] 3429#0: *20 event timer del: 22: 28164571836
2021/02/22 10:57:14 [debug] 3429#0: *20 generic phase: 0
2021/02/22 10:57:14 [debug] 3429#0: *20 __mydebug_menshen. ngx_http_menshen_handler is called r: 00000000029F9630 nginx_version: 1016001
2021/02/22 10:57:14 [debug] 3429#0: *20 <1>status: MENSHEN_STATUS_CTX_CREATE_INIT. uri: /maat/js/entry_e731dc7.js/. args: r: 00000000029F9630 r->main: 00000000029F9630 r->count: 1
2021/02/22 10:57:14 [debug] 3429#0: *20 http cleanup add: 00000000029FA4E0
2021/02/22 10:57:14 [debug] 3429#0: *20 server menshen_module: -1 0000000002A56378
http filename: "/usr/local/services/gdt-frontend-test-1.0/maat/js/" why the http filename is the alias path ?
You have an invalid alias
statement. But you should not be using alias
in this case. Use root
. For example:
location ~ ^/maat/(js|css|images)/ {
root /usr/local/services/gdt-frontend-test-1.0/;
expires 1y;
}
You can move the root
statement into the server
block, so that the same value is inherited by both location
blocks.
The alias
statement within a regular expression location
block needs to provide the full path to the file. This is achieved by capturing the full tail of the URI in the regular expression. For example:
location ~ ^/maat/((js|css|images)/.*)$ {
alias /usr/local/services/gdt-frontend-test-1.0/maat/$1;
expires 1y;
}
See this document for details.