nginx位置匹配问题auth_basic

我有这样的configuration:

location / { root /etc/nginx/euchet; } location /app/ { proxy_pass http://172.16.184.2:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE_ADDR $remote_addr; } 

而且我需要添加auth_basic另一个位置,只对请求启用: /app/f?p=3000

我试着用rexexp:

  location ~ \/appt\/f\?p=3000 { auth_basic "Hello! Enter password"; auth_basic_user_file /etc/nginx/euchet.htpasswd; proxy_pass http://172.16.184.2:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE_ADDR $remote_addr; } 

Nginx使用之前的位置/app/

我试了另一种方式:

 location ~* /euchet/f { if ($arg_p = "4550") { return 403; } error_page 403 = @hidden; } 

 location @hidden { auth_basic "Hello! Enter password"; auth_basic_user_file /etc/nginx/euchet.htpasswd; proxy_pass http://172.16.184.2:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE_ADDR $remote_addr; } 

我在f?p=3000上得到了403错误,在f?p=<another_number>上得到了404错误

我该如何解决这个问题?

您最好使用map来执行此操作,因为auth_basic指令可以包含variables。

 map $request_uri $auth { default "off"; "/app/f?p=3000" "MyRealm"; } server { location / { root /etc/nginx/euchet; } location /app/ { auth_basic $auth; auth_basic_user_file /etc/nginx/euchet.htpasswd; proxy_pass http://172.16.184.2:8080; proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header REMOTE_ADDR $remote_addr; } }