AspNetCore + Docker + Nginx 역방향 에이전트

3459 단어 기술 창작
docker pull nginx
docker run -d --name nginx -p 12345:80 nginx

두 번 째 문장 은 호스트 의 12345 포트 를 용기 의 80 포트 에 연결 하 는 것 이다
docker exec -it nginx bash

여 기 는 Liux 콘 솔 로 들 어 갑 니 다.
nginx 의 메 인 프로필 이 / etc / nginx 의 nginx. conf 에 있다 는 것 을 알 고 있 습 니 다.
more 명령 으로 보기 파일 끝 에 한 마디 가 있 습 니 다.
include /etc/nginx/conf.d/*.conf;

그러면 ls 로 이 디 렉 터 리 를 보 려 면 default. conf 만 있 습 니 다. 그래서 우 리 는...
VI 의...
어색 한 것 은 용기 안에 vi 명령 이 없 으 면 우 리 는 우리 의 핵심 가치관 을 관철 시 키 고 설치 해 야 한 다 는 것 이다.
apt-get update
apt-get install vim

 
upstream demos{
	server {IP  }:{  } weight=1;//    ,     ,                 
}
server{
	listen 80 default_server;
	listen [::]:80 default_server;
	server_name demo;
	location / {
		proxy_pass http://demos;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection keep-alive;
		proxy_set_header Host $host;
		proxy_set_header X-Real-IP $remote_addr; //      IP
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_cache_bypass $http_upgrade;

	}
}

nginx 내장 변수 목록 첨부 
$args                            ;
$binary_remote_addr                  
$body_bytes_sent                     
$content_length            HTTP      "Content-Length"
$content_type                    "Content-Type"
$document_root                          
$document_uri               $uri  
$host                            "Host",       Host ,          ;    
$http_cookie               cookie    
$http_referer                  
$http_user_agent                  
$http_via                            Ip  
$http_x_forwarded_for               。    
$limit_rate                                  
$remote_addr                    
$remote_port                     
$remote_user                     ,   
$request                         
$request_body                    
$request_body_file                          
$request_filename                    
$request_method                 ,  "GET"、"POST" 
$request_uri                  URI,      
$server_addr                    ,     listen       ,                    (      )
$server_name                        
$server_port                          
$server_protocol                  ,"HTTP/1.0" "HTTP/1.1"
$uri                          URI,          ,          

프로젝트 에서 중간 부품 을 만 듭 니 다.
public class ProxyMiddleware
    {
        private readonly RequestDelegate _requestDelegate;

        public ProxyMiddleware(RequestDelegate requestDelegate)
        {
            _requestDelegate = requestDelegate;
        }
        public Task Invoke(HttpContext context)
        {
            var headers = context.Request.Headers;
            if (headers.ContainsKey("X-Forwarded-For"))
            {
                
                var ipAddresses = headers["X-Forwarded-For"].ToString().Split(',', StringSplitOptions.RemoveEmptyEntries);
                context.Connection.RemoteIpAddress = IPAddress.Parse(ipAddresses.FirstOrDefault());
            }
            return _requestDelegate(context);
        }
    }

Startup 에 적용
app.UseMiddleware();

이렇게 하면 HttpContext. Connect. RemoteIpAddress 에서 실제 클 라 이언 트 IP 를 얻 을 수 있 습 니 다.

좋은 웹페이지 즐겨찾기