定義: server.context-path= # Context path of the application. 應用的上下文路徑,也可以稱為項目路徑,是構成url地址的一部分。
在每個module的application.properties文件都可以配置server.context-path這個屬性。開始使用spring boot的時候沒有注意這個屬性,其實默認可以不配置,直接在controller層通過@RequestMapping來設定url的地址路徑。
@RestController
@RequestMapping("/mqcp")
public class MQCPContorller {
@Autowired
MQCPServiceImpl mqcpService;
@RequestMapping("/convert")
public String convert(){
mqcpService.convert();
return "ok";
}
}
如果server.context-path沒有配,請求的url地址就是 localhost : port/mqcp/convert
如果server.context-path = “/market/task”, 請求的url地址就是 localhost : port/market/task/mqcp/convert
在 task這個模塊下的所有web層的url地址都需要添加server.context-path。
server.context-path 在ngnix分發中的作用
ngnix 分發的時候 server.context-path 起到了很重要的作用,並且如果server.context-path 值沒有寫規范也會導致挖出一個巨大的坑。
下面是ngnix的部分配置文件
upstream task{
server 100.100.88.152:8097;
check interval=30000 rise=2 fall=3 timeout=1000 type=http;
check_http_send "GET /market/task/turnTask HTTP/1.0\r\n\r\n";
check_http_expect_alive http_2xx http_3xx;
}
server {
location /market/task/ {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://task;
}
}
實現的功能是所有的請求中如果url中包含/market/task/的請求,都被分發到server 100.100.88.152:8097,這個ip和端口的服務器上。
很明顯,如果task模塊配置了server.context-path= /market/task 那么task模塊下的所有web接口url地址都必須加上 /market/task, 那么在task模塊下的web層所有接口都可以分發到server 100.100.88.152:8097上,不用考慮新增的Controller類上的路徑和接口上定義的路徑。
反之,如果沒有配置server.context-path,或者server.context-path配置的沒有區別性,比方說配置為 /market ,無法和其他模塊區分開來,那么ngnix就沒有辦法分發出去。 這樣模塊下web層每次新增一個Controller類,為了能夠讓ngnix正常分發,不報404錯誤,需要在ngnix上對類的url地址進行配置,這是一件很麻煩的事情。所以server.context-path的規范配置很關鍵。