最近工程开发遇到一个需求:用Java去解析并编辑nginx.conf

在github上找到nginx-java-parser工具,项目地址:https://github.com/odiszapc/nginx-java-parser

解析nginx.conf过程可以参考该项目的README.md

下面举个列子说明一下该如何编辑nginx.conf。

定义一个pojo

import com.alibaba.fastjson.JSONArray;
import com.google.common.base.Strings;
import lombok.Data; @Data
public class WebHost {
private long id;
private String host;
private String protocol;
private String name;
}

1、添加nginx配置

     public boolean addWebToNginxConfig(WebHost webHost, String fileName) {
if (webHost == null || Strings.isNullOrEmpty(fileName)) {
return false;
}
try {
NgxConfig ngxConfig = NgxConfig.read(fileName);
NgxBlock ngxBlockHttp = ngxConfig.findBlock("http");
NgxBlock ngxBlockWeb = new NgxBlock();
ngxBlockWeb.addValue("server");
ngxBlockHttp.addEntry(ngxBlockWeb);
if ("https".equals(webHost.getProtocol())) {
NgxParam ngxParam = new NgxParam();
ngxParam.addValue("listen 443 ssl");
ngxBlockWeb.addEntry(ngxParam);
ngxParam = new NgxParam();
ngxParam.addValue(String.format("server_name %s", webHost.getHost()));
ngxBlockWeb.addEntry(ngxParam); String virtualServerName = webHost.formatName();
ngxParam = new NgxParam();
ngxParam.addValue(String.format("ssl_certificate /etc/nginx/cert/%s.cert", virtualServerName));
ngxBlockWeb.addEntry(ngxParam);
ngxParam = new NgxParam();
ngxParam.addValue(String.format("ssl_certificate_key /etc/nginx/key/%s.key", virtualServerName));
ngxBlockWeb.addEntry(ngxParam);
} else {
NgxParam ngxParam = new NgxParam();
ngxParam.addValue("listen 80");
ngxBlockWeb.addEntry(ngxParam);
ngxParam = new NgxParam();
ngxParam.addValue(String.format("server_name %s", webHost.getHost()));
ngxBlockWeb.addEntry(ngxParam);
} NgxBlock ngxBlockLocation = new NgxBlock();
ngxBlockLocation.addValue("location");
ngxBlockLocation.addValue("/");
NgxParam ngxParam = new NgxParam();
ngxParam.addValue("proxy_pass http://backend_http");
ngxBlockLocation.addEntry(ngxParam);
ngxParam = new NgxParam();
ngxParam.addValue("proxy_set_header Host $host");
ngxBlockLocation.addEntry(ngxParam);
ngxParam = new NgxParam();
ngxParam.addValue("proxy_set_header X-Real-IP $remote_addr");
ngxBlockLocation.addEntry(ngxParam);
ngxParam = new NgxParam();
ngxParam.addValue("proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for");
ngxBlockLocation.addEntry(ngxParam);
ngxBlockWeb.addEntry(ngxBlockLocation); String content = new NgxDumper(ngxConfig).dump();
log.info("{}", content);
return true;
} catch (IOException e) {
log.warn("write nginx.conf to file catch IOException!", e);
}
return false;
}

添加结果示例:

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1025;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
#gzip on;
upstream backend_http {
server 1.1.1.1:80 weight=2;
server 2.2.2.2:80 weight=2;
}
upstream backend_https {
server 1.1.1.1:443 weight=2;
server 2.2.2.2:443 weight=2;
}
server {
listen 80;
server_name aaaa.com;
location / {
proxy_pass http://backend_http;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
server {
listen 443 ssl;
server_name eeee.com;
ssl_certificate /etc/nginx/cert/eeee.com.https.cert;
ssl_certificate_key /etc/nginx/key/eeee.com.https.key;
location / {
proxy_pass http://backend_http;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}

2、删除nginx配置

     public boolean deleteWebFromNginxConfig(String host, String fileName) {
if (Strings.isNullOrEmpty(host) || Strings.isNullOrEmpty(fileName)) {
return false;
}
try {
NgxConfig ngxConfig = NgxConfig.read(fileName);
NgxBlock ngxBlockHttp = ngxConfig.findBlock("http");
List<NgxEntry> serverList = ngxBlockHttp.findAll(NgxConfig.BLOCK,"server");
for (NgxEntry ngxEntry : serverList) {
NgxBlock ngxBlock = (NgxBlock) ngxEntry;
NgxParam ngxParam = ngxBlock.findParam("server_name");
if (host.equals(ngxParam.getValue())) {
ngxBlockHttp.remove(ngxBlock);
}
}
String content = new NgxDumper(ngxConfig).dump();
log.info("{}", content);
return true;
} catch (IOException e) {
log.warn("write nginx.conf to file catch IOException!", e);
}
return false;
}

JAVA 解析、编辑nginx.conf的更多相关文章

  1. Nginx的配置文件(nginx.conf)解析和领读官网

    步骤一:vi nginx.conf配置文件,参考本博文的最下面总结,自行去设置 最后nginx.conf内容为 步骤二:每次修改了nginx.conf配置文件后,都要reload下. index.ht ...

  2. Nginx的配置文件nginx.conf解析

    安装openresty的nginx.conf配置文件 0.ng运行的用户和用户组 1.ng进程数,设置为CPU总核心数 2.ng错误日志 3.进程文件,有时ng启动不了,将进程文件删除即可. 4.单进 ...

  3. nginx.conf 配置解析之 server配置

    server{} 包含在http{}内部,每一个server{}都是一个虚拟主机(站点) 以下为nginx.conf配置文件中server{  }部分的内容. server { listen ; // ...

  4. nginx.conf 配置解析之文件结构

    nginx.conf配置文件结构如下: ...... #主要定义nginx的全局配置 events{ #events(事件)块:主要配置网络连接相关 } http{ #http块:代理缓存和日志定义绝 ...

  5. ubuntu 13.04 nginx.conf 配置详解

    1.nginx.conf 文件,路径为:/etc/nginx/agin.conf #使用的用户和组 user www-data; #指定工作衍生进程数(一般等于CPU总核数或总核数的两倍) worke ...

  6. centos7下搭建JAVA项目运行环境。 JAVA+MYSQL+TOMCAT+NGINX

    环境: centos 7 64位 一.配置mysql 5.71.下载mysql源安装包wget http://dev.mysql.com/get/mysql57-community-release-e ...

  7. Linux(7)- Nginx.conf主配置文件、Nginx虚拟主机/访问日志/限制访问IP/错误页面优化、Nginx反向代理、Nginx负载均衡

    一.Nginx.conf主配置文件 Nginx主配置文件conf/nginx.conf是一个纯文本类型的文件,整个配置文件是以区块的形式组织的.一般,每个区块以一对大括号{}来表示开始与结束. 核心模 ...

  8. docker学习(6) docker中搭建java服务及nginx反向代理

    先看下容器规划: 上图中mysql容器的搭建见上篇博客,service1/2为java rest service,创建脚本如下: docker run -d -h service1 \ -v /Use ...

  9. CentOS下配置nginx conf/koi-win为同一文件的各类错误

    今天配置CentOS6.5下安装Nginx + php7 + mysql5.7.15遇到了一些坑.本来家里的电脑在配置环境的时候没有问题,拿去公司的电脑上就是到处报错.不知道是不是人品问题.今晚在家重 ...

随机推荐

  1. 对java泛型的理解

    正确的应用java泛型的特性可以更好的实现编程的开闭原则(对扩展开放,对修改关闭),这得益于java泛型提供的在程序运行时获取对象声明类型的特性. 静态语言的特性是在程序编译前进行声明,这样程序在编译 ...

  2. 华南师大 2017 年 ACM 程序设计竞赛新生初赛题解

    题解 被你们虐了千百遍的题目和 OJ 也很累的,也想要休息,所以你们别想了,行行好放过它们,我们来看题解吧... A. 诡异的计数法 Description cgy 太喜欢质数了以至于他计数也需要用质 ...

  3. Oracle11g静默安装dbca,netca报错处理--直接跟换操作系统

    最近给一个客户安装oracle 11gr2 概述: 操作系统:linux 32位操作系统 [oracle@nbsrfx response]$ uname -aLinux nbsrfx 2.6.32-5 ...

  4. 从零开始,轻松搞定SpringCloud微服务系列

    本系列博文目录 [微服务]之一:从零开始,轻松搞定SpringCloud微服务系列–开山篇(spring boot 小demo) [微服务]之二:从零开始,轻松搞定SpringCloud微服务系列–注 ...

  5. FFmpeg之AVPacket

    花满楼原创 AVPacket,是压缩数据的结构体(解码前或编码后的结构体). 本文介绍FFmepg中常见结构AVPacekt,尽量用具体值来理解. 整个用于调试的代码可以这样写: #include & ...

  6. 移动GIS未来的前景GIS解决方案应用

    目前,在我国一些发达地区,移动GIS所需的两个技术前提——移动互联网的普及和智能终端的普及都已经得到了满足,特别是平板电脑.智能手机的流行,苹果产品的风靡,为移动GIS的应用提供了肥沃的土壤,而GIS ...

  7. JAVA中静态修饰符static的学习(初学)

    静态修饰符static,用于修饰类中的成员变量和成员函数. 用static修饰的成员变量也可叫做类变量. 什么时候使用静态 什么时候定义静态成员变量?     当对象中出现共享数据时,将该数据定义为静 ...

  8. BigDecimal工具类处理精度计算

    /** * Created by My_coder on 2017-07-27. * 加减乘除计算工具类 */ public class BigDecimalUtil { private BigDec ...

  9. slurm-16.05.3任务调度系统部署与测试(1)

      1.概述2.同步节点时间3.下载并解压文件4.编译安装munge-0.5.125.配置munge6.编译安装slurm-16.05.37.配置slurm8.配置MySQL数据库环境9.启动slur ...

  10. 闲来无事研究一下酷狗缓存文件kgtemp的加密方式

    此贴为本人原创,转载请注明出处 序 前几天更新了被打入冷宫很久的酷狗,等进入之后就感觉菊花一紧----试 听 居 然 都 要 开 通 音 乐 包(高品和无损)才行了,WTF! 这意味着以前缓存的都听不 ...