使用nginx mirror 制作nexus 的简单ha
主要是运行两台nexus 机器,通过nexus 的host 以及proxy 以及public 模型,结合nginx 的mirror 将对于host 的get 请求
mirror 到另一台机器proxy nexus 的仓库,变相的cache 需要的仓库代码。
参考架构图
- 来自nexus 的一个分享

- 说明
我们需要做的就是将对于host 模型的repo 流量镜像到proxy 当前host repo 的机器
配置说明
使用openresty 以及docker-compose 运行
- docker-compose 文件
version: "3"
services:
nginx:
image: openresty/openresty:alpine-fat
ports:
- "80:80"
volumes:
- "./nginx.conf:/usr/local/openresty/nginx/conf/nginx.conf"
nexus1:
image: sonatype/nexus3
ports:
- "8081:8081"
volumes:
- "./nexus-data1:/nexus-data"
- "./backup1/:/backup/"
nexus2:
image: sonatype/nexus3
ports:
- "8082:8081"
volumes:
- "./nexus-data2:/nexus-data"
- "./backup2/:/backup/"
- nginx 配置文件
worker_processes 1;
user root;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
lua_code_cache off;
lua_need_request_body on;
gzip on;
resolver 127.0.0.11 ipv6=off;
real_ip_header X-Forwarded-For;
real_ip_recursive on;
gzip_min_length 2k;
gzip_buffers 4 16k;
gzip_comp_level 4;
gzip_types text/plain text/css image/png application/javascript image/jpeg image/gif;
server {
listen 80;
server_name app;
charset utf-8;
default_type text/html;
location / {
client_max_body_size 1G;
mirror /mirror;
proxy_set_header Host nexus1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host nexus1;
proxy_pass http://nexus1:8081;
}
location = /favicon.ico {
root /opt/app/static;
}
location = /mirror {
internal;
if ($request_method != GET) {
return 403;
}
proxy_connect_timeout 30;
proxy_set_header Host nexus2;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host nexus2;
proxy_pass http://nexus2:8081$request_uri;
}
location = /empty {
empty_gif;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
启动&&测试
- 启动
docker-compose up -d
- 测试
我们先在一台机器添加host 模型的rerpo,这个可以直接使用内置的,然后我们上传一个jar 包文件,如下

修改maven settings 文件,将对于maven 的地址指向我们的public。
另外一个机器配置proxy repo 指向上边host 模型的repo如下: 
将proxy repo 添加到public 组(很重要,不然会查找不到) 
编写一个简单的maven 项目,添加上传jar 包的引用,然后执行构建,不出意料,应用能看到有像nexus2 get 的请求,这样repo 就被cache 到
另外一个机器了,
通过nginx 以及nexus2 的日志也可以看出来,但是对于mirror 的log 需要单独配置,可以查看参考资料的连接
说明
原理实际上很简答,但是有几点需要注意,host 模型的repo 需要在两台机器都包含,同时proxy 模型的需要互相添加,如果对于基本变动很少
的repo 模型,使用这种方法进行一个简单nexus ha 的方案搭建还是很不错的,但是有一些几个缺点
- 和上边说的一样,需要多机都需要添加同样模型的host repo(主要是url)
- 如果真的故障发生了,仓库代码可能是分散在多处的,这个我们需要注意,但是基本问题不大,因为每台机器基本都包含了必须的repo
- 对于每台机器的数据备份我们还是需要做的(要以出现事故了。。。)
参考资料
https://my.oschina.net/andChow/blog/2873870
http://nginx.org/en/docs/http/ngx_http_mirror_module.html
https://alex.dzyoba.com/blog/nginx-mirror/
https://github.com/rongfengliang/nginx-mirrorr-nexus-ha
使用nginx mirror 制作nexus 的简单ha的更多相关文章
- nginx证书制作以及配置https并设置访问http自动跳转https(反向代理转发jboss)
nginx证书制作以及配置https并设置访问http自动跳转https 默认情况下ssl模块并未被安装,如果要使用该模块则需要在编译时指定–with-http_ssl_module参数,安装模块依赖 ...
- NGINX: 反向代理 Nexus
Nginx 反向代理 nexus 的服务, 一直卡在 Initialize... 解决方式是添加一个 header X-Forwarded-Proto: proxy_set_header X-Forw ...
- vs2015制作一个超级简单的MVC项目
使用vs2015制作一个超级简单的MVC项目 本文链接:https://blog.csdn.net/qq_40919762/article/details/100705314 直奔主题一,创建一个 ...
- VS里的 代码片段(Code snippet)很有用,制作也很简单
工欲善其事必先利其器,而 Visual Studio 就是我们的开发利器. 上一篇文章,介绍了一个很棒的快捷键,如果你还没用过这个快捷键,看完之后应该会豁然开朗.如果你已经熟练的应用它,也会温故而知新 ...
- nginx安装及配置为简单的文件服务器
centos 6.5 直接yum安装即可 yum install nginx -y 配置文件位于:/etc/nginx/nginx.conf,里面可以修改处理器数量.日志路径.pid文件路径等,默认的 ...
- Nginx反向代理+负载均衡简单实现(http方式)
1)nginx的反向代理:proxy_pass2)nginx的负载均衡:upstream 下面是nginx的反向代理和负载均衡的实例: 负载机:A机器:103.110.186.8/192.168.1. ...
- 转:nginx防DDOS攻击的简单配置
文章来自于: 近期由于工作需要,做了些防DDOS攻击的研究,发现nginx本身就有这方面的模块ngx_http_limit_req_module和ngx_http_limit_conn_module. ...
- nginx+php+mysql+wordpress搭建简单站点 安装及配置过程
环境 阿里云ECS云服务器 CPU:1核 内存:2G 操作系统:Centos 7.3 x64 地域:华北 2(华北 2 可用区 A) 系统盘:40G 安装及配置 主要使用 nginx . php 和 ...
- Nginx实现负载均衡的简单案例
七层负载均衡的实现(Nginx): 基于URL等应用层信息的负载均衡,一般使用Nginx来实现 Nginx的proxy是它一个很强大的功能,实现了7层负载均衡 功能强大.性能卓越.运行稳定 配置简单灵 ...
随机推荐
- js中关于声明提前的几个误区
声明提前: 在程序正式执行之前,都会将所有的var声明的变量提前到开始位置,集中创建,而赋值留在原地. 例如这样一段代码 console.log(a) var a = 100; console.log ...
- int 跟 Integer 的关系
Integer是对象 Int是类型 比如 boolean 和Boolean就也不一样,long和Long等等 作为参数传递时要注意 要进行转换如下 int到Integer: int a=3; Inte ...
- 【leetcode198 解题思路】动态规划
动态规划 https://blog.csdn.net/so_geili/article/details/53639920 最长公共子序列 https://blog.csdn.net/so_geili/ ...
- GitHub网站使用的基础入门
github基本入门,首先需要掌握一些ssh非对称加密的知识和一些基本的git命令操作.下面是我推荐的两个比较好的网站,然后我再专门对GitHub网站使用进行步骤讲解. git 命令:http://b ...
- 运维ps语法---》ps、pstree、top、htop、nice、renice、kill、ulimit、w 和 who 和 whoami、pgrep、fg 和 bg、ipcs
Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...
- python—函数
# 函数:1.减少重复代码:# 2.使程序变的可扩展# 3.使程序变的易维护# 永远只能且返回一个值#def 定义内容# a,b = 5,8# c = a** b# print(c)## def ca ...
- L2-007 家庭房产 (25 分)
L2-007 家庭房产 (25 分) 给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤),随后N行,每行按下 ...
- L2-022 重排链表 (25 分)
L2-022 重排链表 (25 分) 给定一个单链表 L1→L2→⋯→Ln−1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln−1→L2→⋯.例 ...
- 常见的javascript知识点
1.js获取标签.class.id 获取id: document.getElementById("name") 获取标签:document.getElementsByTagName ...
- 您只能在 HTML 输出中使用 document.write。如果您在文档加载后使用该方法,会覆盖整个文档
https://blog.csdn.net/qq_37425546/article/details/54868908