承接上文的对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. Excel数据导入到Sql server

    问题:数据库内直接操作导致 错误 0xc020901c: 数据流任务 1: 源 - yndata1$.输出[Excel 源输出] 上的 源 - yndata1$.输出[Excel 源输出].列[ind ...

  2. C# Winform ProgressBar+Labe 联动显示进度

    private void btnCount_Click(object sender, EventArgs e) { label1.Visible=true; progressBar.Visible = ...

  3. 服务器学习--Linux、CentOS下安装zip与unzip指令

    Linux下安装zip解压功能 Linux服务器上一般默认没是没有有安装zip命令 安装zip指令 apt-get install zip 或  yum install zip 输入zip OK li ...

  4. 3-10 Pandas 常用操作

      1.构造数据 In [1]: import pandas as pd data=pd.DataFrame({'group':['a','a','a','b','b','b','c','c','c' ...

  5. 五、select的5种子句

    1.Where 条件查询 比较运算符: 运算符 说明 >   <   =   >=   <=   !=或<>   In 在某集合内 between 在某范围内 In ...

  6. MongoDB 之pymongodb

    import pymongo import json from bson import ObjectId mongoclient = pymongo.MongoClient(host="12 ...

  7. E04 【买衣服】Do you have this T-shirt in red?

    核心句型 Do you have this T-shirt in red? 这样的T恤衫,你们有红色的吗? 场景对话: A:Excuse me,do you have this T-shirt in ...

  8. logrotate日志管理工具与split文件切割命令

    概述 logrotate是一个Linux系统默认安装了的日志文件管理工具,用来把旧文件轮转.压缩.删除,并且创建新的日志文件.我们可以根据日志文件的大小.天数等来转储,便于对日志文件管理. logro ...

  9. 莫烦TensorFlow_11 MNIST优化使用CNN

    import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data #number 1 to 10 d ...

  10. IP、MAC和端口号(六)

    在茫茫的互联网海洋中,要找到一台计算机非常不容易,有三个要素必须具备,它们分别是 IP 地址.MAC 地址和端口号. 一.IP地址 IP地址是 Internet Protocol Address 的缩 ...