AspNetCore+Docker +Nginx 反向代理

36

作者:奥纳拉 发布时间:2021年10月13日 15时29分08秒

<p>docker pull nginx<br/>docker run -d --name nginx -p 12345:80 nginx<br/>第二句是将主机的12345端口绑定到容器的80端口<br/><br/>docker exec -it nginx bash<br/>这里就进入到linux里的控制台了<br/><br/>我们知道 nginx的主配置文件是在/etc/nginx的nginx.conf<br/><br/>使用more命令查看可以看到文件结尾有一句<br/><br/>include /etc/nginx/conf.d/*.conf;<br/>那么 用ls查看该目录只有一个default.conf,于是乎我们就<br/><br/>VI之...<br/><br/>尴尬的是容器里是没有vi命令的,我们就要贯彻我们的核心价值观,安装之...<br/><br/>apt-get update<br/>apt-get install vim<br/> <br/><br/>upstream demos{<br/> server {IP地址}:{端口} weight=1;//负载均衡,目前单主机,前面填上需要指向的服务器地址跟端口<br/>}<br/>server{<br/> listen 80 default_server;<br/> listen [::]:80 default_server;<br/> server_name demo;<br/> location / {<br/> proxy_pass http://demos;<br/> proxy_http_version 1.1;<br/> proxy_set_header Upgrade $http_upgrade;<br/> proxy_set_header Connection keep-alive;<br/> proxy_set_header Host $host;<br/> proxy_set_header X-Real-IP $remote_addr; //真实的客户端IP<br/> proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br/> proxy_cache_bypass $http_upgrade;<br/><br/> }<br/>}<br/>附上nginx内置变量清单 <br/><br/>$args 请求中的参数;<br/>$binary_remote_addr 远程地址的二进制表示<br/>$body_bytes_sent 已发送的消息体字节数<br/>$content_length HTTP请求信息里的"Content-Length"<br/>$content_type 请求信息里的"Content-Type"<br/>$document_root 针对当前请求的根路径设置值<br/>$document_uri 与$uri相同<br/>$host 请求信息中的"Host",如果请求中没有Host行,则等于设置的服务器名; <br/>$http_cookie cookie 信息 <br/>$http_referer 来源地址<br/>$http_user_agent 客户端代理信息<br/>$http_via 最后一个访问服务器的Ip地址<br/>$http_x_forwarded_for 相当于网络访问路径。 <br/>$limit_rate 对连接速率的限制 <br/>$remote_addr 客户端地址<br/>$remote_port 客户端端口号<br/>$remote_user 客户端用户名,认证用<br/>$request 用户请求信息<br/>$request_body 用户请求主体<br/>$request_body_file 发往后端的本地文件名称 <br/>$request_filename 当前请求的文件路径名<br/>$request_method 请求的方法,比如"GET"、"POST"等<br/>$request_uri 请求的URI,带参数 <br/>$server_addr 服务器地址,如果没有用listen指明服务器地址,使用这个变量将发起一次系统调用以取得地址(造成资源浪费)<br/>$server_name 请求到达的服务器名<br/>$server_port 请求到达的服务器端口号<br/>$server_protocol 请求的协议版本,"HTTP/1.0"或"HTTP/1.1"<br/>$uri 请求的URI,可能和最初的值有不同,比如经过重定向之类的<br/>在项目中,我们创建一个中间件<br/><br/>public class ProxyMiddleware<br/> {<br/> private readonly RequestDelegate _requestDelegate;<br/><br/> public ProxyMiddleware(RequestDelegate requestDelegate)<br/> {<br/> _requestDelegate = requestDelegate;<br/> }<br/> public Task Invoke(HttpContext context)<br/> {<br/> var headers = context.Request.Headers;<br/> if (headers.ContainsKey("X-Forwarded-For"))<br/> {<br/> <br/> var ipAddresses = headers["X-Forwarded-For"].ToString().Split(',', StringSplitOptions.RemoveEmptyEntries);<br/> context.Connection.RemoteIpAddress = IPAddress.Parse(ipAddresses.FirstOrDefault());<br/> }<br/> return _requestDelegate(context);<br/> }<br/> }<br/>并在Startup中应用之<br/><br/>app.UseMiddleware();<br/>这样就可以在HttpContext.Connection.RemoteIpAddress中获取到真实的客户端IP了<br/></p>

AspNetCore Docker Nginx 反向代理

Copyright © 2021 奥纳拉. onala       湘ICP备2021002517号-1        湘公网安备43010402000262号