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 를 얻 을 수 있 습 니 다.