使用Nginx反向代理Docker的Asp.Net Core项目的请求
承接上文的对Kestrel的思考
上一篇介绍了如何一下在docker中发布Asp.Net Core项目(传送门)在最后尝试从外网访问网站的时候发现请求的响应头中包含了这个信息Server:Kestrel(响应请求的服务器是Kestrel)
对于ASP.NET Core的Kestrel服务器,官网上有详细的解释,同时推荐一个大佬的翻译文,详细描述Kestrel的使用方式。
https://www.cnblogs.com/Wddpct/p/6123653.html
使用Nginx做为反向代理服务器
为了不直接暴露Kestrel服务器,在Kestrel和Internet之间加入Nginx作为反向代理服务器,所有的请求需要经过Nginx再转发到Kestrel。思考了一下有两种做法
- 在外部Linux上通过Nginx进行反向代理,将请求转发到docker容器
- 使用docker-compose实现多容器独立部署,通过容器间的虚拟网络进行代理
这里因为Linux上已经安装过Nginx了,偷个懒直接用第一种方式来做。(我也默认你已经装好了Nginx了)
1.新建dotnet.conf用于反向代理
先进到nginx目录(/usr/local/webserver/nginx/)
不管怎么样,要改配置了,先把Nginx停了
nginx -s stop //快速停止nginx
进入conf目录,新建dotnet.conf文件(随便起个名)内容如下
upstream mysvr {
server localhost:8000;#目标地址
}
server {
listen 8000; #监听端口
server_name www.cplemom.com; #监听地址
access_log logs/mysvr.access.log;
error_log logs/mysvr.error.log;
root html;
index index.html index.htm index.php;
location / {
proxy_pass http://mysvr;
#Proxy Settings
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
proxy_max_temp_file_size 0;
proxy_connect_timeout 90;
proxy_send_timeout 90;
proxy_read_timeout 90;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
有兴趣的可以去学习一下这个配置文件到底是怎么回事,比如:如何配置反向代理。
2.在nginx.conf的http模块中引用dotnet.conf
nginx配置一定要加分号结尾
include dotnet.conf;
3.使用命令测试配置文件是否正确
/usr/local/webserver/nginx/sbin/nginx -t -c /usr/local/webserver/nginx/conf/nginx.conf
这时候可以看到,果断报错了,错误提示:端口8000已经被占用了

仔细思考一下,发现是因为在当初创建容器的时候,将容器内的80端口映射到了外部的8000端口。
使用命令查看下端口的占用情况
ps -ef | grep 8000

知道原因就好办了,最后的解决方法如下
(如果你已经把上面的步骤都做了,请你重来一遍,就当熟悉命令了。手动滑稽!)
1.停用之前创建的testapp容器,然后删除掉
2.重新根据镜像创建一个新的容器,但是将端口映射到8001(保证不和nginx冲突)
3.修改dotnet.conf配置文件,将server地址的端口改成8001
4.启动nginx,并访问查看
接收请求的服务器已经变成了nginx,我们开放的端口还是8000!!!

使用Nginx反向代理Docker的Asp.Net Core项目的请求的更多相关文章
- nginx反向代理docker registry报”blob upload unknown"解决办法
问题症状:keepalived+nginx反向代理后端docker registry群集时,使用docker客户机向registry push镜像时出现 "blob upload unkno ...
- Nginx反向代理、CORS、JSONP等跨域请求解决方法总结
由于 Javascript 同源策略的存在使得一个源中加载来自其它源中资源的行为受到了限制.即会出现跨域请求禁止. 通俗一点说就是如果存在协议.域名.端口或者子域名不同服务端,或一者为IP地址,一者为 ...
- Nginx反向代理Tomcat静态资源无法加载以及请求链接错误
在使用Nginx实现Tomcat的负载均衡的时候,项目发布到了Tomcat,Nginx也配置好了, 当访问的时候发现了与预期不符 表现为: 静态资源加载失败 链接跳转地址错误 下面是我错误的配置文件 ...
- Nginx 反向代理,IP、端口,项目路径变化的问题
这两天在云上部署公司项目,涉及到nginx反向代理,在部署完成测试,发现在下载文件的时候,无法下载,提示链接被拒绝. 假设nginx代理地址: http://121.53.21.188:9012/we ...
- 从零实操基于WSL2 Docker部署Asp.Net Core项目
前言 平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Wind ...
- Centos下使用Docker部署asp.net core项目
本文讲述 CentOS 系统 Docker 中部署 asp.net core开源项目 abp 的过程 步骤 1. 拉取 asp.net core 基础镜像 docker pull microsoft/ ...
- 使用docker化的nginx 反向代理 docker化的GSCloud 的方法
1. 首先将nginx 的image pull 下来. docker pull nginx 2. 将最近的可用的 参数文件 复制过来当一个目录 mkdir /nginx ssh root@linuxs ...
- nginx反向代理docker容器化django
1.新建Dockerfile FROM python:3.8.5 MAINTAINER ChsterChen ENV PYTHONUNBUFFERED 1 COPY pip.conf /root/.p ...
- CORS跨域与Nginx反向代理跨域优劣对比
最近写了一些关于前后端分离项目之后,跨域相关方案的基本原理和常见误区的帖子,主要包括CORS和Nginx反向代理.这两种方案项目中都有在用,各有优缺,关于具体使用哪种方案,大家的观点也不大一致,本文主 ...
随机推荐
- 【MongoDB详细使用教程】三、高级查询
目录 1.使用比较运算符查询 2.使用关键字查询 2.1.in/not in 关键字 2.2.size 关键字 2.3.exists 关键字 2.4.or 关键字 3.模糊查询 4.查询结果排序 5. ...
- 其它综合-CentOS7 解决忘记root密码
CentOS7 解决忘记root密码 1.重启 长时间不用的 CentOS 机器再次开机的时候忽然忘记了密码,总不能就重装一台吧,还有好多服务在机器上,于是决定重置 root 的密码. 如果是已经开启 ...
- CF704D Captain America(上下界网络流)
传送门 题意: 二维平面给出\(n\)个点,现在可以给每个点进行染色,染红色的代价为\(r\),染蓝色的代价为\(b\). 之后会有\(m\)个限制,形式如:\(t_i\ l_i\ d_i\),当\( ...
- router-link路由传参
router-link传参 [注意] 1.使用params方式传参时,只支持name跳转: 案例如下: 2.使用query传参,注意:两种都支持 案例如下 .
- idea中的插件,可以快速将类中的属性转换成Json字符串
当我们想要测试接口的时候,难免会根据一个类,一个一个的写json数据,当属性比较少时还行,但当属性多的时候就比较麻烦了, 为了解决这个问题,我们可以安装第三方的插件来快速生成json字符串. 步骤如下 ...
- 201871010128-杨丽霞《面向对象程序设计(java)》第十四周学习总结
201871010128-杨丽霞<面向对象程序设计(java)>第十四周学习总结(1分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-dai ...
- Rational Rose 画九种常用架构图
UML建模详解(3)—使用Rational Rose 画九种常用架构图 UML是一种建模语言,是系统建模的标准.我们之所以建模是因为大规模的系统设计时相当复杂的,当系统比较复杂时就会涉及到以下这几 ...
- Java+Selenium3方法篇21-webdriver处理浏览器多窗口切换
经过前面两篇文章的铺垫,我们这篇介绍,webdriver如何处理,一个浏览器上多个窗口之间切换的问题.我们先脑补这样一个测试场景,你在页面A点击一个连接,会在新的tab窗口打开页面B,这个时候,你在页 ...
- CloudCompare打开pcd文件
Ubuntu下CloudCompare稳定版本无法打开pcd点云文件,切换到edge版本即可 $ sudo snap refresh --edge cloudcompare
- webapi跨域实现(CROS、JSONP)
CROS: /// <summary> /// 支持WebAPI服务器端跨域 /// </summary> public class ServerCrossDomainAttr ...