承接上文的对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项目的请求的更多相关文章

  1. nginx反向代理docker registry报”blob upload unknown"解决办法

    问题症状:keepalived+nginx反向代理后端docker registry群集时,使用docker客户机向registry push镜像时出现 "blob upload unkno ...

  2. Nginx反向代理、CORS、JSONP等跨域请求解决方法总结

    由于 Javascript 同源策略的存在使得一个源中加载来自其它源中资源的行为受到了限制.即会出现跨域请求禁止. 通俗一点说就是如果存在协议.域名.端口或者子域名不同服务端,或一者为IP地址,一者为 ...

  3. Nginx反向代理Tomcat静态资源无法加载以及请求链接错误

     在使用Nginx实现Tomcat的负载均衡的时候,项目发布到了Tomcat,Nginx也配置好了, 当访问的时候发现了与预期不符 表现为: 静态资源加载失败 链接跳转地址错误 下面是我错误的配置文件 ...

  4. Nginx 反向代理,IP、端口,项目路径变化的问题

    这两天在云上部署公司项目,涉及到nginx反向代理,在部署完成测试,发现在下载文件的时候,无法下载,提示链接被拒绝. 假设nginx代理地址: http://121.53.21.188:9012/we ...

  5. 从零实操基于WSL2 Docker部署Asp.Net Core项目

    前言 平日在公司里都是基于阿里Teambition中的飞流进行Docker部署Api项目或服务,已经习惯了那一套成熟的操作流程,开发和部署确实快捷方便,但是还没在自己的电脑上进行操作过,特别是Wind ...

  6. Centos下使用Docker部署asp.net core项目

    本文讲述 CentOS 系统 Docker 中部署 asp.net core开源项目 abp 的过程 步骤 1. 拉取 asp.net core 基础镜像 docker pull microsoft/ ...

  7. 使用docker化的nginx 反向代理 docker化的GSCloud 的方法

    1. 首先将nginx 的image pull 下来. docker pull nginx 2. 将最近的可用的 参数文件 复制过来当一个目录 mkdir /nginx ssh root@linuxs ...

  8. nginx反向代理docker容器化django

    1.新建Dockerfile FROM python:3.8.5 MAINTAINER ChsterChen ENV PYTHONUNBUFFERED 1 COPY pip.conf /root/.p ...

  9. CORS跨域与Nginx反向代理跨域优劣对比

    最近写了一些关于前后端分离项目之后,跨域相关方案的基本原理和常见误区的帖子,主要包括CORS和Nginx反向代理.这两种方案项目中都有在用,各有优缺,关于具体使用哪种方案,大家的观点也不大一致,本文主 ...

随机推荐

  1. 8.了解什么是 redis 的雪崩、穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透?

    作者:中华石杉 面试题 了解什么是 redis 的雪崩.穿透和击穿?redis 崩溃之后会怎么样?系统该如何应对这种情况?如何处理 redis 的穿透? 面试官心理分析 其实这是问到缓存必问的,因为缓 ...

  2. linux 线程基础

    线程基础函数 查看进程中有多少个线程,查看线程的LWP ps -Lf 进程ID(pid) 执行结果:LWP列 y:~$ ps -Lf 1887 UID PID PPID LWP C NLWP STIM ...

  3. Ubuntu 18.04安装 CUDA 10.1 、cuDNN 7.6.5、PyTorch1.3

    转载请注明出处  BooTurbo https://www.cnblogs.com/booturbo/p/11834661.html 安装平台及环境 CPU:i9-9900k桌面级 GPU:RTX 2 ...

  4. 每次都能让人头大的 Shader -- 从整合说起

    之前也说过引擎能不能提供一个一般化的开发环境给使用者, 这样使用者只需要指定他要的开发环境, 就能用它最熟悉的方式去写Shader了. 从提供者的角度来看, 因为有太多的应用场景无法确定, 所以提供无 ...

  5. linux下tree命令产生乱码,通过修改字符集解决

    alias tree='tree --charset ASCII'

  6. 添加ssh密钥

    直接运行ssh-keygen,可以不输入密码 $ ssh-keygen Generating public/private rsa key pair. Enter file in which to s ...

  7. Docker简介(一)

    一.为什么会有Docker 环境配置很麻烦,换了台机器,就得全部重新配置一次. 二.Docker的理念 Docker是基于Go语言实现的云开源项目. Docker的主要目标是“Build,Ship a ...

  8. leetcode138. 复制带随机指针的链表

    思路一:哈希 借助哈希保存节点信息. 代码 时间复杂度:O(n)空间复杂度:O(n) class Solution{ public: Node* copyRandomList(Node* head) ...

  9. 重拾算法之复杂度分析(大O表示法)

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...

  10. maven warnning 'build.plugins.plugin.version' is missing

    裝完maven后,package或clean时出错:[WARN] [WARN] Some problems were encountered while building the effective ...