在踩坑之前,先来看一下location的语法规则
踩坑一:
当同一个server中,既存在动态请求代理,又存在静态资源请求代理,且静态资源请求代理为/ 全路径转发时,如何优先匹配动态请求
server {
    listen 8082;
	server_name 192.168.15.151;
	location ^~/file {
       proxy_pass http://192.168.2.151:9001/file;
    } 	
	location /{
	   root C:/nginx-1.18.0/nginx-1.18.0/hnevol_medical_wisdom_screen;
	   try_files $uri $uri/ /index.html;
	}
	
	location /wisdomWs{
	   proxy_http_version 1.1;
	   proxy_set_header Upgrade $http_upgrade;
	   proxy_set_header Connection 'upgrade';		
	   proxy_pass http://192.168.2.151:12349/wisdomWs;
	}
}如果不在 /file 前 加^~ 请求还是转发到了/中,走了静态资源的代理
踩坑二:
当同一个server中,既存在动态请求代理,又存在静态资源请求代理,且动态请求代理为/ 全路径转发时, 如何优先匹配静态请求
server {
    	listen 5001;
        server_name  127.0.0.1;
	
	proxy_set_header Host $http_host;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_buffering on;
	proxy_buffer_size 712k;
	proxy_buffers 2 712k;
	proxy_busy_buffers_size 712k;
	proxy_temp_path tempinx_proxy_temp 1 2;
	proxy_max_temp_file_size 20M;
	proxy_temp_file_write_size 712k;
	#location /wisdomApp/{
	#  proxy_pass http://127.0.0.1:8083/wisdomApp/;
	#}
	
	location /wisdomApp/{
	    try_files $uri $uri/ /wisdomApp/index.html;
	}
	location /wisdomWs{
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection 'upgrade';		
		proxy_pass http://192.168.2.151:12349/wisdomWs;
	}
		
	location /file {
		proxy_pass http://192.168.2.151:9001/file;
	} 	
	location / {
   	   add_header 'Access-Control-Allow-Origin' '*';
	   add_header 'Access-Control-Allow-Credentials' 'true';
	   proxy_pass http://192.168.200.15:9000;
	}
    }如上配置,在同一server中,既存在/的动态代理请求,又存在以/wisdomApp/为前缀的静态资源请求
按照以上配置,不做更改时,访问/wisdomApp/ 并没有访问到静态文件,而是提示未找到资源,并且按照之前的 在优先的匹配规则 /wisdomApp/ 前加上 ^~ 还是没有生效
解决方案
server {
    	listen 8083;
	server_name 192.168.15.151;	
		
	location /wisdomApp/{
	   try_files $uri $uri/ /wisdomApp/index.html;
	}
 }额外添加一个内网server,内部代理为/全路径转发 静态资源,而原来的5001server中 将静态代理修改为动态请求,转发到8083的server中



 
     
     
     
    
发表评论