JAVA 解析、编辑nginx.conf

最近工程开发遇到一个需求:用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配置

 1     public boolean addWebToNginxConfig(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 = new NgxBlock();
 9             ngxBlockWeb.addValue("server");
10             ngxBlockHttp.addEntry(ngxBlockWeb);
11             if ("https".equals(webHost.getProtocol())) {
12                 NgxParam ngxParam = new NgxParam();
13                 ngxParam.addValue("listen 443 ssl");
14                 ngxBlockWeb.addEntry(ngxParam);
15                 ngxParam = new NgxParam();
16                 ngxParam.addValue(String.format("server_name %s", webHost.getHost()));
17                 ngxBlockWeb.addEntry(ngxParam);
18
19                 String virtualServerName = webHost.formatName();
20                 ngxParam = new NgxParam();
21                 ngxParam.addValue(String.format("ssl_certificate /etc/nginx/cert/%s.cert", virtualServerName));
22                 ngxBlockWeb.addEntry(ngxParam);
23                 ngxParam = new NgxParam();
24                 ngxParam.addValue(String.format("ssl_certificate_key /etc/nginx/key/%s.key", virtualServerName));
25                 ngxBlockWeb.addEntry(ngxParam);
26             } else {
27                 NgxParam ngxParam = new NgxParam();
28                 ngxParam.addValue("listen 80");
29                 ngxBlockWeb.addEntry(ngxParam);
30                 ngxParam = new NgxParam();
31                 ngxParam.addValue(String.format("server_name %s", webHost.getHost()));
32                 ngxBlockWeb.addEntry(ngxParam);
33             }
34
35             NgxBlock ngxBlockLocation = new NgxBlock();
36             ngxBlockLocation.addValue("location");
37             ngxBlockLocation.addValue("/");
38             NgxParam ngxParam = new NgxParam();
39             ngxParam.addValue("proxy_pass http://backend_http");
40             ngxBlockLocation.addEntry(ngxParam);
41             ngxParam = new NgxParam();
42             ngxParam.addValue("proxy_set_header Host $host");
43             ngxBlockLocation.addEntry(ngxParam);
44             ngxParam = new NgxParam();
45             ngxParam.addValue("proxy_set_header X-Real-IP $remote_addr");
46             ngxBlockLocation.addEntry(ngxParam);
47             ngxParam = new NgxParam();
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 = new NgxDumper(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 boolean deleteWebFromNginxConfig(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<NgxEntry> 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 = new NgxDumper(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     }
时间: 2024-08-11 22:52:15

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

centos 打开配置文件出错:nginx.conf

E325: ATTENTIONFound a swap file by the name ".nginx.conf.swp" owned by: root dated: Fri Nov 1 18:42:48 2019 file name: /usr/local/nginx/conf/nginx.conf modified: YES user name: root host name: VM_0_2_centos process ID: 2990 (still running)While

Nginx的配置文件(nginx.conf)解析

步骤一:vi nginx.conf配置文件,参考本博文的最下面总结,自行去设置 最后nginx.conf内容为 步骤二:每次修改了nginx.conf配置文件后,都要reload下. index.html里写入如下内容 步骤三: 先来配一个路由映射 因为,我们的nginx.conf为 以上, 是基于域名的虚拟主机的nginx.conf配置.    当然,我们也可以基于端口的虚拟主机的nginx.conf配置 当然,我们也可以基于ip的虚拟主机的nginx.conf配置 当然,我们用完之后,你也可

nginx.conf配置文件解析(http、server、location proxy_pass)

nginx.conf配置文件解析(http.server.location) 标签: nginxnginx-conf 2017-04-26 20:10 1031人阅读 评论(0) 收藏 举报 分类: Nginx(8) 版权声明:本文为博主原创文章,未经博主允许不得转载. nginx.conf文件在安装目录/conf目录下 1.定义Nginx运行的用户和用户组 user nginx nginx; 2.nginx进程数,建议设置为等于CPU总核心数 worker_processes 1; 3.全局错

阿里云 CenterOS 安装mysql java tomcat gcc nginx步骤

由于公司需要,申请了一台阿里云服务器,购买的过程很简单.买完后系统就安装好了,可以直接使用.在使用的过程中遇到了些问题,再次记录一下. 我用的操作系统是centos 5.4 32位的. 1.磁盘挂载 初始化按照后只有一个系统盘,没有数据盘.所以第一步要挂在数据盘. 可以用  fdisk -l|grep Disk  查看你的系统有几块盘. 如: Disk /dev/hda: 21.4 GB, 21474836480 bytes Disk /dev/xvdb: 85.8 GB, 8589934592

Nginx(三):nginx.conf配置文件说明 【2】 文件结构和配置高亮

配置文件结构说明: 里面的配置文件有几个,当然最主要是nginx.conf配置文件. Main配置段,是核心配置段. Events { 配置事件的 } Http { } 标准http配置段,可选http配置段,都在http{}这里配置,每一种都是一个独立的. 注意:每一个配置参数都需要以分号结尾 标准模块也叫作核心模块是默认都安装的,如果不想安装就是-without什么,可选模块是默认不安装的,如果想安装就是-with-什么 可选模块比如-with-http_ssl_module和-with-h

配置使用vim编辑Nginx配置文件时语法高亮

vim是Unix系统中非常实用的文本编辑器,它和传统的vi相比最大的区别在于它所支持的配色方案,这个功能使得平时编辑一些配置文件或者是在写代码的时候极大的提高工作效率,如果我们在系统中有安装vim相应的包且开启了syntax配色方案的时候会不显示语法高亮往往是配置设置错误所引起的.一般配置错误有2个地方:1.是远程服务器的仿真客户终端配置错误:2.是服务器上环境变量配置错误.在这里就用SecureCRT仿真客户终端为例子简单的说一下vim开启syntax配色方案: 在SecureCRT上需要配置

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

今天配置CentOS6.5下安装Nginx + php7 + mysql5.7.15遇到了一些坑.本来家里的电脑在配置环境的时候没有问题,拿去公司的电脑上就是到处报错.不知道是不是人品问题.今晚在家重装了一个centos,安装之后进行了全部yum update.本来以为上午的问题可能是没有更新软件,图样图森破.下面总结一下今晚对nginx部分的心得. 因为PCRE本来是用在nginx重写rewrite的时候,解析正则的正则解析库,所以在安装nginx之前,默默的先装上基本应用: yum -y i

nginx.conf减肥记

问题,nginx.conf文件过长,过大,不方便维护,所以想拆分出来,这样好阅读也好维护. 1,将nginx里面关于weixin的配置全部剥离出来 如下,这是nginx.conf配置文件中的微信配置记录 ,以后会越来越多的. location ~* ^/weixin_g1.*$ { include deny.conf; proxy_pass http://weixin_web_9600; include proxy.conf; error_log logs/weixin_g1_error.log

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

?? 1.下载Nginx,进入Nginx下载地址:http://nginx.org/ 点击nginx-1.8.0,进入:http://nginx.org/en/download.html,下载文件: 2 下载pcre,这个是一个正则表达式的库,Nginx做rewriter的时候回用到这个库: 进入pcre的官网(rewrite模式需要pcre):http://www.pcre.org/ 选中右击复制所需要的版本: 3 下载zlib库(gzip模块需要zlib):http://www.zlib.n