JAVA 解析、编辑nginx.conf

java

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

以上是 JAVA 解析、编辑nginx.conf 的全部内容, 来源链接: utcz.com/z/392927.html

回到顶部