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

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

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

定义一个pojo

importcom.alibaba.fastjson.JSONArray;importcom.google.common.base.Strings;importlombok.Data;

@Datapublic classWebHost {private longid;privateString host;privateString protocol;privateString name;

}

1、添加nginx配置

1 public booleanaddWebToNginxConfig(WebHost webHost, String fileName) {2 if (webHost == null ||Strings.isNullOrEmpty(fileName)) {3 return false;4 }5 try{6 NgxConfig ngxConfig =NgxConfig.read(fileName);7 NgxBlock ngxBlockHttp = ngxConfig.findBlock("http");8 NgxBlock ngxBlockWeb = newNgxBlock();9 ngxBlockWeb.addValue("server");10 ngxBlockHttp.addEntry(ngxBlockWeb);11 if ("https".equals(webHost.getProtocol())) {12 NgxParam ngxParam = newNgxParam();13 ngxParam.addValue("listen 443 ssl");14 ngxBlockWeb.addEntry(ngxParam);15 ngxParam = newNgxParam();16 ngxParam.addValue(String.format("server_name %s", webHost.getHost()));17 ngxBlockWeb.addEntry(ngxParam);18

19 String virtualServerName =webHost.formatName();20 ngxParam = newNgxParam();21 ngxParam.addValue(String.format("ssl_certificate /etc/nginx/cert/%s.cert", virtualServerName));22 ngxBlockWeb.addEntry(ngxParam);23 ngxParam = newNgxParam();24 ngxParam.addValue(String.format("ssl_certificate_key /etc/nginx/key/%s.key", virtualServerName));25 ngxBlockWeb.addEntry(ngxParam);26 } else{27 NgxParam ngxParam = newNgxParam();28 ngxParam.addValue("listen 80");29 ngxBlockWeb.addEntry(ngxParam);30 ngxParam = newNgxParam();31 ngxParam.addValue(String.format("server_name %s", webHost.getHost()));32 ngxBlockWeb.addEntry(ngxParam);33 }34

35 NgxBlock ngxBlockLocation = newNgxBlock();36 ngxBlockLocation.addValue("location");37 ngxBlockLocation.addValue("/");38 NgxParam ngxParam = newNgxParam();39 ngxParam.addValue("proxy_pass http://backend_http");40 ngxBlockLocation.addEntry(ngxParam);41 ngxParam = newNgxParam();42 ngxParam.addValue("proxy_set_header Host $host");43 ngxBlockLocation.addEntry(ngxParam);44 ngxParam = newNgxParam();45 ngxParam.addValue("proxy_set_header X-Real-IP $remote_addr");46 ngxBlockLocation.addEntry(ngxParam);47 ngxParam = newNgxParam();48 ngxParam.addValue("proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for");49 ngxBlockLocation.addEntry(ngxParam);50 ngxBlockWeb.addEntry(ngxBlockLocation);51

52 String content = newNgxDumper(ngxConfig).dump();53 log.info("{}", content);54 return true;55 } catch(IOException e) {56 log.warn("write nginx.conf to file catch IOException!", e);57 }58 return false;59 }

添加结果示例:

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配置

1 public booleandeleteWebFromNginxConfig(String host, String fileName) {2 if (Strings.isNullOrEmpty(host) ||Strings.isNullOrEmpty(fileName)) {3 return false;4 }5 try{6 NgxConfig ngxConfig =NgxConfig.read(fileName);7 NgxBlock ngxBlockHttp = ngxConfig.findBlock("http");8 List serverList = ngxBlockHttp.findAll(NgxConfig.BLOCK,"server");9 for(NgxEntry ngxEntry : serverList) {10 NgxBlock ngxBlock =(NgxBlock) ngxEntry;11 NgxParam ngxParam = ngxBlock.findParam("server_name");12 if(host.equals(ngxParam.getValue())) {13 ngxBlockHttp.remove(ngxBlock);14 }15 }16 String content = newNgxDumper(ngxConfig).dump();17 log.info("{}", content);18 return true;19 } catch(IOException e) {20 log.warn("write nginx.conf to file catch IOException!", e);21 }22 return false;23 }

java conf_JAVA 解析、编辑nginx.conf相关推荐

  1. java conf_JAVA 解析、编辑nginx.conf详解

    最近工程开发遇到一个需求:用Java去解析并编辑nginx.conf 解析nginx.conf过程可以参考该项目的README.md 下面举个列子说明一下该如何编辑nginx.conf. 定义一个po ...

  2. Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 一

    搭建nginx服务器时,主要的配置文件 nginx.conf 是部署和维护服务器人员经常要使用到的文件, 里面进行了许多服务器参数的设置.那么nginx 以模块 module为骨架的设计下是如何运用模 ...

  3. 【lnmp+ELK+Nginx+GeoIP】超详细新版ELK8.5.0解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版

    超详细新版ELK8.5.0+lnmp1.9解析收集Nginx日志并实现数据可视化与IP地址地图可视化教程-2022年11月版 前言 1.基础环境和所需要的软件包 1.1服务器配置(仅供参考) 1.2 ...

  4. 三、nginx服务的nginx.conf的参数配置解析

    前一篇:二.nginx服务的nginx.conf配置参数解析 后一篇:四.nginx服务器的参数配置解析 目录 一.虚拟主机设定模块 1.upstream模块配置样式 1.1.默认配置 1.2.wei ...

  5. Nginx主配置文件nginx.conf详细说明

    第3章 Nginx核心配置文件nginx.conf史上最细中文详解 3.1定义Nginx运行的用户和用户组 user nginx nginx;#改为特殊的用户和组 3.2 nginxworker进程数 ...

  6. nginx.conf 基本配置模板和结构

    文章目录 配置 nginx.conf 配置结构 nginx.conf 基本配置模板 如何验证效果 配置 nginx.conf 配置结构 ... #全局块 events { #events块 ... } ...

  7. 01_Nginx安装,nginx下部署项目,nginx.conf配置文件修改,相关文件配置

     1.下载Nginx,进入Nginx下载地址:http://nginx.org/ 点击nginx-1.8.0,进入:http://nginx.org/en/download.html,下载文件: ...

  8. Java动态解析域名

    Java动态解析域名 Java提供InetAddress类,可以对域名-IP进行正向.逆向解析. InetAddress解析的时候一般是调用系统自带的DNS程序. linux 默认的DNS方式是读取/ ...

  9. nginx html解析插件,nginx配置信息的解析流程

    nginx配置信息的解析流程 2011年9月9日 1,744 次浏览 请关注最新修正合订: 这一系列的文章还是在09年写的,存在电脑里很久了,现在贴出来.顺序也不记得了,看到那个就发那个吧,最近都会发 ...

最新文章

  1. 10个具体项目生动精彩讲述JavaScript;超级Web应用,构建不再困难
  2. Android——android:gravity 和 android:layout_Gravity
  3. ORA-14551: 无法在查询中执行 DML 操作
  4. python if else elif_Python之 if-elif-else
  5. sql server 触发器
  6. paip.基于navicate mysql的自动化报表工具总结
  7. 顺通车间扫码出入库管理系统仓库扫码软件
  8. 没有执行力,一切都是0,优秀都会沦为平庸
  9. mysql populate_BeanUtils.populate 的作用
  10. 计算机英语朗读音频,新课标小学英语阅读精选(MP3+中英字幕) 第72期:电脑
  11. Re:从零开始的领域驱动设计
  12. js是滚动条滑到固定位置_JavaScript 滚动条定位指定位置
  13. 苹果xsmax怎么开机_苹果11和苹果XSMax怎么选?还以为差别不大,对比后才知道差别大了!...
  14. 微信备份到云服务器失败怎么回事,iCloud云备份失败是为什么呢?iCloud云备份启用失败如何解决...
  15. adguard自定义_AdGuardHome拦截页面模版下载,自定义AdGuardHome拦截页教程,修改AdGuardHome默认拦截页...
  16. java线段的平移和旋转,几何变换(旋转、缩放、平移)
  17. 一只超级愤怒的租房者对黑中介(鹏基伟业的控诉)
  18. 【106页报告】深度分析“柒”“捌”“玖”“零”后的互联网世界!
  19. (十)linux内核时钟
  20. java 异步调用 事务_深入理解Spring注解@Async解决异步调用问题

热门文章

  1. VIO-slam 系统构建
  2. 微信小程序和vue双向绑定哪里不一样_个人理解Vue和React区别
  3. 为什么torch.nn.Linear的表达形式为y=xA^T+b而不是常见的y=Ax+b?
  4. 雅可比旋转求解对称二维矩阵的特征值和特征向量
  5. halcon/c++接口基础 之内存管理
  6. svr公式推导_支持向量回归(SVR)的详细介绍以及推导算法
  7. python搜索文件内容_python实现搜索文本文件内容
  8. windebug常用命令
  9. 蓝桥 BEGIN4 - Fibonacci数列
  10. linux下使用cmake构建C/C++项目