学弟教程-Nginx-搭建与常规操作

一、目的

使用Docker搭建Nginx,进行最基本的反向代理操作,实现 :

  • 访问Nginx的默认页面
  • 通过Nginx访问自定义的页面
  • 通过Nginx对ip进行代理

二、环境

  • 系统 : winsows10
  • 软件 : Docker for Desktop

三、设计

3.1 端口映射

宿主机端口容器端口
808080
808181
808282

访问宿主机的8080端口,相当于访问容器的80端口(即Nginx的默认端口);
其它以此类推。

3.2 新建

docker run -itd -p 8080:80 -p 8081:81 -p 8082:82 nginx

运行结果

3.3 修改配置

本容器中nginx.conf的位置为 /etc/nginx/nginx.conf


在配置文件最后一行的意思是使用默认的配置文件,此处将其注释掉,以使用自己的配置

3.3.1 默认代理配置

在nginx.conf文件的http块中添加入以下代码

#1.配置80端口的反向代理
server{
    #监听Nginx80端口
    listen 80;    
    #配置服务名,若无特殊配置,localhost即指代宿主机的127.0.0.1
    server_name localhost;
    #设置转发
    location / {
         #首页文件的目录
         root /usr/share/nginx.html;
         #默认的首页文件
         index index.html index.htm;
    }
}

配置容器80端口,实现访问宿主机 http://127.0.0.1:8080访问到Nginx的默认欢迎界面

3.3.2 自定义页面

在/home目录下新建demo文件夹,创建a.html文件,修改其内容为

<p>Successfully implemented the proxy to the HTML file<p>

在nginx.conf文件的http块中加入以下代码

#2.配置81端口的反向代理
server{
    #监听Nginx的81端口
    listen 81;    
    #配置服务名,若无特殊配置localhost,即指代本机的127.0.0.1
    server_name localhost;
    #设置转发
    location / {
         #设置我们自定义文件的目录
         root /home/demo;
         #设置我们自定义的首页文件
         index a.html a.htm;
    }
}

配置容器81端口,实现访问宿主机 http://127.0.0.1:8081 而访问自定义的页面

3.3.3 代理ip

实现127.0.0.1:8082通过Nginx被反向代理127.0.0.1:5000
在nginx.conf文件的http块中加入以下代码

#3.配置82端口的反向代理
server{
    #监听Nginx的82端口
    listen 82;    
    #配置服务名,若无特殊配置localhost即指代本机的127.0.0.1地址
    server_name localhost;
    #设置转发,将127.0.0.1:82转发到127.0.0.1:5000
    location / {
         proxy_pass 127.0.0.1:5000;
    }
}

将容器82端口反向代理到Flask应用的端口,实现宿主机访问http://127.0.0.1:8082而能访问到默认地址为http://127.0.0.1:5000的Flask应用

三个Server配置完成后,nginx.conf文件中http块结构如下

http{
    #配置1
    server{
       ...
    }
    #配置2
    server{
       ...
    }
    #配置3
    server{
      ...
    }
    ...
}

4. 重新加载配置文件

nginx -s reload

终端显示 signal process started时才表明修改成功,若有问题会提示错误

四、运行结果

成功实现了对默认页面的访问

成功实现了对自定义页面的代理

出现了问题,反向代理失败

五、问题

1.分析

这里本意是将http://127.0.0.1:82转发到宿主机的http://127.0.0.1:5000,但Nginx处于Linux环境中,所以此处localhost实际上指的是容器内的localhost而并非宿主机内的localhost,因此出现错误情况。

2. 解决

在windows环境下可使用host.docker.internal指代宿主机的localhost地址

修改后配置文件为

server{
    listen 82;    
    server_name localhost;
    location / {
         # 这里使用了host.docker.internal代表宿主机的127.0.0.1
         proxy_pass http://host.docker.internal:5000;  
    }
}

重新加载配置文件

成功实现了将http://127.0.0.1:8082通过Nginx代理到http://127.0.0.1:5000
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值