【Nginx】Docker配置ngnix,实现同服务器ip多站点多域名

news2024/9/21 10:49:37

Docker配置ngnix,实现同服务器ip,多域名映射多站点

本文首发于 慕雪的寒舍

1.说明

一般情况下,我们的域名映射到ip后,默认访问的是80端口。如果你的服务器只部署了一个服务,这样也是够用的。

但是很多项目对性能的占用并没有那么夸张,一个服务器一个站点未免有些浪费了。虽然我们可以用域名:端口来访问,但是这样对于用户来说并不友好,对于强迫症来说看着很不舒服🤣

这时候,就需要配置反向代理来实现不同域名到服务器不同端口的映射。

1.1 反向代理

你可以理解为,反向代理是服务器的一个中间商,其能将80端口的,不同域名来源的请求,导向到服务器上的不同端口

www.example.com 指向 8080端口
aaa.example.com 指向 3000端口
这两个域名都映射到服务器公网ip 114.514.8.8

当你访问www.example.com时,请求的是114.514.8.8:80端口,也就是反向代理的服务。此时反向代理能知道你的来源是www.example.com,于是就把你带到了8080端口的服务上;

同理,访问aaa.example.com时,就会被带到3000端口。


这里用nginx作演示,nginx是最常用的反向代理服务

2.docker安装nginx

本文参考:https://www.jianshu.com/p/6b317192480c

用其他方式还得整一大堆依赖项,这里直接用docker,方便又快捷;

服务器安装docker的方式,根据你的系统,自行百度

docker pull nginx

2.1 配置

启动之前,先在你的当前路径下创建一个文件夹(我这里是root用户)

mkdir /root/docker/ngnix

随后用下面的命令启动nginx容器

docker run \
--name=ngx \
-p 80:80 -p 443:443 \
-v /root/docker/nginx/conf.d:/etc/nginx/conf.d \
-v /root/docker/nginx/cert:/etc/nginx/cert \
-d nginx

对一些参数进行说明

  • -p命令映射端口,将80端口映射给服务器的80端口(右侧容器端口,左侧本地端口
  • -v命名映射目录,将本地的/root/nginx/conf.d映射到docker里面的/etc/nginx/conf.d 这是nginx的配置文件路径
  • --name设置容器的名字,和镜像名字无关

安装完成后,打开云服务器的ip,就能看到nginx的初始页面

image-20230125144452198

3.编辑配置文件

nginx.conf 配置文件我们直接用官方默认的就行,这里主要对站点的配置文件做说明;

3.1 https

如果不需要https加密,可以用下面的配置文件来操作,当使用test.com访问你的云服务器ip时,会被转到4000端口

server {
    listen 80;  # 监听80端口
    server_name test.com;  # 自己的域名
    
    location / {
		# 设置缓冲区大小
		proxy_buffer_size 64k;
        proxy_buffers   32 32k;
        proxy_busy_buffers_size 128k;
		
        proxy_set_header HOST $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		# 需要代理的地址:端口(因为是docker部署的,需要填公网ip)
        proxy_pass http://IP:4000;
    }
}

3.1.1 关于proxy_pass

这里必须要注意一下proxy_pass

因为我们的nginx是用docker部署的,此时你填 127.0.0.1或localhost,实际上访问的都是nginx这个docker内部的端口,是没有用的,会弹出502 gateway报错!

正确的办法就是填云服务器的公网ip+端口

3.2 https

配置https如下,这样配置会将80端口的http访问强制转成https

域名的证书可以在域名提供商里面申请,腾讯云支持申请单域名1年的免费证书。还可以去joyssl,申请90天的域名通配符证书

因为在启动docker容器的时候,我配置了路径映射,证书配置的cert/对应的其实是 /root/docker/nginx/cert/目录,将证书文件放到该目录下即可

server {
    listen 443 ssl;
    server_name img.text.top;  # 域名
    # 注意文件位置,是从/etc/nginx/下开始算起的
    ssl_certificate cert/img.text.top.crt; # 域名证书文件crt
    ssl_certificate_key cert/img.text.top.key; # 域名证书key
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    client_max_body_size 1024m;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        proxy_set_header Upgrade-Insecure-Requests 1;
        proxy_set_header X-Forwarded-Proto https;

        # 因为是docker部署的nginx,所以要填云服务器公网ip
        proxy_pass http://云服务器公网IP:端口;
    }
}
# 强制重定向
server {
    listen 80; # 监听80端口
    server_name img.text.top;  # 域名
    #把http的域名请求转成https
    return 301 https://$host$request_uri; 
}

修改配置文件后重启nginx的容器,即可正常访问


更多:用portainer管理docker

portainer是一个图形化管理docker镜像和容器的项目,还是很不错的;缺点就是只有英文,想要中文可以配置中文包,但是中文包已经非常非常久没有更新了,索性直接用英文版

docker run -p 14730:9000 -p 14729:8000 --name portainer \
--restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /root/docker/portainer/data:/data \
-d portainer/portainer

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/343524.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

CAN总线详细介绍

1.1 CAN是什么? CAN 最终成为国际标准 ( ISO11898(高速应用)和 ISO11519(低速应用)),是国际上应用最广泛的现场总线之一。 1.2 CAN总线特点 多主方式: 可以多主方式工作,网络上任意一个节点…

前端学习第一阶段——第五章(上)

5-1 CSS基本选择器 01-CSS层叠样式表导读 02-CSS简介 03-体验CSS语法规范 04-CSS代码风格 05-CSS选择器的作用 06-标签选择器 07-类选择器 08-使用类选择器画盒子 09-类选择器特殊使用-多类名 10-id选择器 11-通配符选择器 5-2 CSS样式 12-font-family设置字体系列 13-font-s…

商场技术点-3

1.后端服务校验 1.1JSR-303介绍 JSR是Java Specification Requests的缩写,意思是Java 规范提案。是指向JCP(Java Community Process)提出新增一个标准化技术规范的正式请求。任何人都可以提交JSR,以向Java平台增添新的API和服务。JSR已成为Java界的一个…

springboot项目配置文件加密

1背景: springboot项目中要求不能采用明文密码,故采用配置文件加密. 目前采用有密码的有redis nacos rabbitmq mysql 这些配置文件 2技术 2.1 redis nacos rabbitmq 配置文件加密 采用加密方式是jasypt 加密 2.1.1 加密步骤 2.1.2 引入maven依赖 …

Android进阶之路 - StringUtils、NumberUtils 场景源码

忘记是在去年还是前年的时候遇到一个需要检测所传字符串是否为数字的场景,开始使用 NumberUtils.isNumber() 提示错误 ,没有解决问题(可能是因为依赖版本导致),最后使用的是StringUtils.isNumeric(),当时关…

剑指 Offer 43. 1~n 整数中 1 出现的次数

题目 输入一个整数 n ,求1~n这n个整数的十进制表示中1出现的次数。 例如,输入12,1~12这些整数中包含1 的数字有1、10、11和12,1一共出现了5次。 思路 要求出小于等于 n 的非负整数中数字 1 出现的个数…

Prometheus系列(五)grafana web 配置邮件告警

目录 1. contact points(创建告警渠道) 2. Notification policies(创建告警通道匹配规则) 3. Alert rules(配置告警策略) 告警配置 告警页面名词解释: 1. contact points(创建告…

玩转数据结构之Java实现线段树

前言 线段树是一种二叉搜索树,线段树的每个结点都存储了一个区间,也可以理解成一个线段,在这些线段上进行搜索操作得到你想要的答案。 线段树的适用范围很广,可以在线维护修改以及查询区间上的最值,求和。更可以扩充到…

一文浅谈sql中的 in与not in,exists与not exists的区别以及性能分析

文章目录1. 文章引言2. 查询对比2.1 in和exists2.2 not in 和not exists2.3 in 与 的区别3. 性能分析3.1 in和exists3.2 NOT IN 与NOT EXISTS4. 重要总结1. 文章引言 我们在工作的过程中,经常使用in,not in,exists,not exists来…

Unity2018.4.x~2021.3.x版 Android资源处理

注意:本文都是针对使用Gradle编译从Unity2018.4.x到Unity2020.3.x都是可以直接将Android的适配资源直接放到${PROJECT_PATH}/Assets/Plugins/Android/对应的目录下的,如:在此目录下可以方安卓平台对应的assets、res目录及子目录资源&#xff…

前端的CSS样式表知识提要

文章目录前言基本概念屏幕尺寸屏幕分辨率屏幕像素密度/像素密度/屏幕密度视口和浏览器窗口长度单位:px、em/rem和vhCSS属性的继承与覆盖CSS选择器CSS 布局基础盒子模型绝对定位和相对定位display属性浮动正常布局流(normal flow)Flexbox 布局…

【Python表白代码】 2.14“Valentine‘s Day”“没别的意思 就是借着特殊日子说声喜欢你”你在哪儿?我去见你~(各种玫瑰源码合集)

导语 Valentines Day Every man is a poet when he is in love 所有文章完整的素材源码都在👇👇 粉丝白嫖源码福利,请移步至CSDN社区或文末公众hao即可免费。 哈喽!我是你们的木木子吖~ 情人节又到了,礼物备好了没&am…

k8s部署Prometheus+Grafana

1.prometheus简介 Prometheus是一个开源的系统监控和警报工具包,最初由SoundCloud开发的,社区活跃,2016年加入了云原生计算基金会成为继Kubernetes之后的第二个托管项目;普罗米修斯以时间序列数据的形式收集并存储度量值&#xff…

python爬虫--xpath模块简介

一、前言 前两篇博客讲解了爬虫解析网页数据的两种常用方法,re正则表达解析和beautifulsoup标签解析,所以今天的博客将围绕另外一种数据解析方法,它就是xpath模块解析,话不多说,进入内容: 一、简介 XPat…

2023年谷歌蜘蛛池最全指南

本文主要是2023年关于谷歌蜘蛛池的一系列疑问,我们逐一提供解答。 本文由光算创作,有可能会被修改和剽窃,我们佛系对待这种行为吧。 首先最常见的新手问题是“什么叫谷歌蜘蛛池?” 答案是:谷歌蜘蛛池是一个深度研究谷…

微服务网关(九)负载均衡底层详细

微服务网关(九)负载均衡 四大负载均衡策略 随机负载 随机挑选目标服务器IP 轮询负载 ABC三台服务器,以ABCABC的顺序依次轮询 加权轮询 给目标服务器设置访问权重值,按照权重轮询负载 一致性哈希轮询 固定的一个客户端IP请求访…

图文解答之最短路径||

最短路径|| 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为“Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为“Finish”)。 现在考虑网格中有障碍物。那么从左上角到…

rust过程宏 proc-macro-workshop解题-0-介绍

名字版本号rust1.69.0OSubuntu22.04proc-macro-workshop是一个学习rust过程宏非常好的工程。里边包含五大类题目。并且每种题目都有实际价值,可以应用在企业级项目中。我们在这里先介绍一下这个项目如何运行如何测试,如何验证过程宏的正确性以及如何调试。 本文只围绕以下几个…

2月编程语言排行榜出炉,第一名势头强劲

近日,TIOBE公布了2023年2月编程语言排行榜,本月各个语言表现如何?谁又摘得桂冠? TIOBE 2月Top15编程语言: 详细榜单查看TIOBE官网 https://www.tiobe.com/tiobe-index/ 关注IT行业的小伙伴们都知道,编程…

Linux入门篇(一)

Linux前言Linux初探Linux内核GNU实用工具shellLinux发行版bash shell 基础Linux文件系统Linux文件操作命令前言 在阅读诸如docker之类的书的时候,经常碰到Linux的知识。同时,大部分的盲区也是在Linux方面。因此就想稍微了解一下这个广为人使用的操作系统…