最近工程开发遇到一个需求:用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. Nginx的配置文件nginx.conf详解

    Nginx的配置文件nginx.conf配置详解如下: user nginx nginx ; Nginx用户及组:用户 组.window下不指定 worker_processes 8; 工作进程:数目 ...

  2. nginx作为web服务以及nginx.conf详解

    Nginx系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.nginx简介 nginx是一个优秀的web服务程序.反向代理程序.它采用非 ...

  3. Nginx配置文件nginx.conf详解

    Nginx 总的 配置文件 位置 /usr/local/nginx/conf/nginx.conf nginx 正则匹配 一.正则表达式匹配,其中: 为区分大小写匹配 ~* 为不区分大小写匹配 ! 和 ...

  4. Nginx配置文件nginx.conf详解(转)

    #定义Nginx运行的用户和用户组 user www www;#nginx进程数,建议设置为等于CPU总核心数. worker_processes 8;#全局错误日志定义类型,[ debug | in ...

  5. Nginx 配置文件 nginx.conf 详解

    来源:北京流浪儿 www.cnblogs.com/gide/p/6180251.html #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心 ...

  6. Nginx 中 nginx.conf 详解

    #定义Nginx运行的用户和用户组 user www www; #nginx进程数,建议设置为等于CPU总核心数. worker_processes 8; #全局错误日志定义类型,[ debug | ...

  7. 配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解)

    配置nginx方向代理,实现URL隐形转发 (附带nginx配置文件详解) 免费领取满减阿里云红包 项目名称:[域名解析–隐形URL转发]–centos 7.3 环境: 阿里云服务器之上有多个tomc ...

  8. java conf_JAVA 解析、编辑nginx.conf

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

  9. java json path_Java使用JSONPath解析JSON完整内容详解

    JsonPath是一种简单的方法来提取给定JSON文档的部分内容. JsonPath有许多编程语言,如Javascript,Python和PHP,Java. JsonPath提供的json解析非常强大 ...

最新文章

  1. 设置IP安全策略将***阻杀在端口外
  2. Android 8.1 源码_启动篇(一) -- 深入研究 init(转 Android 9.0 分析)
  3. C1之路 | 训练任务03-WEB
  4. 游戏AI研究(三):路径规划
  5. 共筑全场景智慧生态,华为HMS全球应用创新大赛火热开启
  6. 【kafka】kafka单节点测试
  7. 设计一个媒体类,其中包含:书,CD及磁带3个子类。按照类的设计模式,完成他们的插入、删除和查找功能。
  8. 人脸对齐(十九)--Regressing a 3D Face Shape from a Single Image
  9. Msm8937+android7.1.1编译环境搭建及编译
  10. web前端开发面试题(三)
  11. 域名解析成功但ping不通解决方案
  12. 洛谷:P1330 封锁阳光大学(二分图染色 + 最小同色点覆盖)
  13. 模拟爬虫下载QQ空间相册高清图片
  14. python中空集怎么表示
  15. 这张图可以帮助解释为什么欧洲有些国家欢迎难民,有些国家拒绝难民【The Washington Post】
  16. 2021年疫情再度爆发,面对停课教培机构该如何应对?
  17. MySQL5.6 GTID
  18. 罗技LogitechFlow技术--惊艳的多电脑切换体验
  19. python找素数程序_求素数python
  20. 免费专利检索和下载网站(亲测超实用)

热门文章

  1. java ee的小程序_在Java EE应用程序中实现自动重试
  2. grpc 流式传输_编写下载服务器。 第一部分:始终流式传输,永远不要完全保留在内存中...
  3. null导入失败_当null检查非常失败时
  4. 程序员的前20个搜索和排序算法面试问题
  5. Java equals()和hashCode()
  6. web 项目集成福昕_项目学生:Web服务集成
  7. 使用Spring Security在Spring Boot中进行缓存
  8. Apache Derby数据库用户和权限
  9. java方法传对象参数_Java方法中的参数太多,第2部分:参数对象
  10. java中集合判空_Java中的类型安全的空集合