使用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反向代理.这两种方案项目中都有在用,各有优缺,关于具体使用哪种方案,大家的观点也不大一致,本文主 ...
随机推荐
- supervisor 管理应用程序
supervisor 进程管理 主要包含后台进程 supervisord 和控制台 supervisorctl 两个程序 supervisor # 官方文档 http://www.supervisor ...
- Python从零开始——数值类型
- 关于重学Linux的随笔
毕业已有半年, 现在想想真的后悔, 大学没有认真学Linux, 导致现在Linux操作抓瞎, 连服务器都搭不起来. 下定决心重学Linux, 不追求能比上大佬, 但是要熟练, 常用命令要熟悉. 作为一 ...
- NLP中的预训练语言模型(二)—— Facebook的SpanBERT和RoBERTa
本篇带来Facebook的提出的两个预训练模型——SpanBERT和RoBERTa. 一,SpanBERT 论文:SpanBERT: Improving Pre-training by Represe ...
- Rust中的迭代器
和闭包一样,练代码 struct Counter { count: u32, } impl Counter { fn new() -> Counter { Counter {count: } } ...
- jmeter压测学习7-登录参数化(CSV 数据文件设置)
前言 我们在压测登录接口的时候,如果只用一个账号去设置并发压测,这样的结果很显然是不合理的,一个用户并发无法模拟真实的情况. 如果要压测登录接口,肯定得准备几百,甚至上千的账号去登录,测试的结果才具有 ...
- python selenium2 动态调试
#coding=utf-8'''Created on 2017-9-9 @author: ceshi 转自https://testerhome.com/topics/9897''' # rpcserv ...
- day6_7.4总结数据类型的可变不可变
续昨天: 列表的常用方法: 1.chear() 用途:清空列表,其返回值无,返回none. list1=[1,2,3,4,5] a=list1.clear() print(list1) print(a ...
- 怎么在虚拟机下的Linux系统安装数据库
1.查看 linux下是否有老版本的mysql(有删除) 查找old mysql:rpm -qa | grep mysql 卸载:卸载命令:rpm –ev {包名}——:rpm -ev mysql-c ...
- Git 创建点开头的文件和目录
Git 创建点开头的文件和目录 # 创建 .gitignore 文件 1@DESKTOP-3H9092J MINGW64 /e/x1/x1/demo1 (master) $ echo .idea &g ...