✨ Add headers in reserve proxy
This commit is contained in:
		@@ -63,10 +63,28 @@ pub async fn repond_websocket(req: Builder, ws: WebSocket) -> Response {
 | 
				
			|||||||
pub async fn respond_hypertext(
 | 
					pub async fn respond_hypertext(
 | 
				
			||||||
    uri: String,
 | 
					    uri: String,
 | 
				
			||||||
    ori: &Uri,
 | 
					    ori: &Uri,
 | 
				
			||||||
 | 
					    req: &Request,
 | 
				
			||||||
    method: Method,
 | 
					    method: Method,
 | 
				
			||||||
    body: Body,
 | 
					    body: Body,
 | 
				
			||||||
    headers: &HeaderMap,
 | 
					    headers: &HeaderMap,
 | 
				
			||||||
) -> Result<Response, Error> {
 | 
					) -> Result<Response, Error> {
 | 
				
			||||||
 | 
					    let ip = req.remote_addr().to_string();
 | 
				
			||||||
 | 
					    let proto = req.uri().scheme_str().unwrap();
 | 
				
			||||||
 | 
					    let host = req.uri().host().unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let mut headers = headers.clone();
 | 
				
			||||||
 | 
					    headers.insert("Server", "RoadSign".parse().unwrap());
 | 
				
			||||||
 | 
					    headers.insert("X-Forward-For", ip.parse().unwrap());
 | 
				
			||||||
 | 
					    headers.insert("X-Forwarded-Proto", proto.parse().unwrap());
 | 
				
			||||||
 | 
					    headers.insert("X-Forwarded-Host", host.parse().unwrap());
 | 
				
			||||||
 | 
					    headers.insert("X-Real-IP", ip.parse().unwrap());
 | 
				
			||||||
 | 
					    headers.insert(
 | 
				
			||||||
 | 
					        "Forwarded",
 | 
				
			||||||
 | 
					        format!("by={};for={};host={};proto={}", ip, ip, host, proto)
 | 
				
			||||||
 | 
					            .parse()
 | 
				
			||||||
 | 
					            .unwrap(),
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    let res = CLIENT
 | 
					    let res = CLIENT
 | 
				
			||||||
        .request(method, uri + ori.path() + ori.query().unwrap_or(""))
 | 
					        .request(method, uri + ori.path() + ori.query().unwrap_or(""))
 | 
				
			||||||
        .headers(headers.clone())
 | 
					        .headers(headers.clone())
 | 
				
			||||||
@@ -81,6 +99,8 @@ pub async fn respond_hypertext(
 | 
				
			|||||||
            result.headers().iter().for_each(|(key, val)| {
 | 
					            result.headers().iter().for_each(|(key, val)| {
 | 
				
			||||||
                res.headers_mut().insert(key, val.to_owned());
 | 
					                res.headers_mut().insert(key, val.to_owned());
 | 
				
			||||||
            });
 | 
					            });
 | 
				
			||||||
 | 
					            res.headers_mut()
 | 
				
			||||||
 | 
					                .insert("Server", "RoadSign".parse().unwrap());
 | 
				
			||||||
            res.set_status(result.status());
 | 
					            res.set_status(result.status());
 | 
				
			||||||
            res.set_version(result.version());
 | 
					            res.set_version(result.version());
 | 
				
			||||||
            res.set_body(result.bytes().await.unwrap());
 | 
					            res.set_body(result.bytes().await.unwrap());
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -77,7 +77,7 @@ pub async fn handle(
 | 
				
			|||||||
                    ));
 | 
					                    ));
 | 
				
			||||||
                };
 | 
					                };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                responder::respond_hypertext(uri, ori, method, body, headers).await
 | 
					                responder::respond_hypertext(uri, ori, req, method, body, headers).await
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            DestinationType::StaticFiles => {
 | 
					            DestinationType::StaticFiles => {
 | 
				
			||||||
                let Ok(cfg) = end.get_static_config() else {
 | 
					                let Ok(cfg) = end.get_static_config() else {
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user