nginx反向代理的三种方式

文章目录

    • 根据域名代理
    • 根据端口代理
    • 根据路径path代理
    • 总结

根据域名代理

server {
        listen       1111;
        server_name  tomcat.local;
		proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;        
		location / {
            proxy_pass http://127.0.0.1:8080;
        }
    }

根据端口代理

server {
        listen       16010;
        server_name  localhost;
		proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;    
		location / {
            proxy_pass http://192.7.0.36:16010;            
        }
    }

根据路径path代理

注意: location后的path带不带/没有区别,proxy_pass后的路径带不带‘/’ 区别很大。

  1. target服务路径需要context-path(location: /docs)时
		location /docs{
            proxy_pass http://localhost:8080;
			proxy_set_header Host $host;
       		proxy_set_header X-Real-IP $remote_addr;
        	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;                
        }
		
		http://localhost:1111/docs
		代理访问后端服务:http://localhost:8080/docs
  1. target服务路径不需要context-path(location:/tomcat)时
		location /tomcat {
            proxy_pass http://localhost:8080/;
            proxy_set_header Host $host;
       		proxy_set_header X-Real-IP $remote_addr;
        	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  
        }
		
		http://localhost:1111/tomcat/docs
		代理访问后端服务:http://localhost:8080/docs

总结

  1. 根据域名和端口代理比较简单,不用考虑path的各种情况,优先选择根据域名或端口反向代理。
  2. 在调用api服务,返回数据时,以上三种代理方式没有差异; 访问页面时,使用path匹配反向代理时,会有一些不同,一个是页面内容中的url跳转链接需要单独处理,一个是服务端重定向处理,比如浏览器直接访问:http://server:port/path时,服务端会让浏览器直接重定向到http://server:port/path/,加上反向代理的规则后,可能不是你想要的结果

你可能感兴趣的:(nginx)