java conf_JAVA 解析、編輯nginx.conf

最近工程開發遇到一個需求:用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 }

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/272827.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/272827.shtml
英文地址,請注明出處:http://en.pswp.cn/news/272827.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【原創】關于ASP.NET WebForm與ASP.NET MVC的比較

WebForm的理解1、 WebForm概念ASP.NETWebform提供了一個類似于Winform的事件響應GUI模型(event-drivenGUI),隱藏了HTTP、HTML、JavaScript等細節,將用戶界面構建成一個服務器端的樹結構控件(Control)&#…

對象的接口

Simula(模擬) 是一個很好的列子。正如這個名字鎖暗示的,它的作用是"模擬"像"銀行出納員"我們有一系列出納員,客戶,賬戶以及交易等 每類成員(元素)都有具有一些通用的特征,每個賬號都有一定的余額;每個出納都能接收客戶的存款,等等。…

java color類 藍色_java中Color類的簡單總結

標簽:java中Color類的簡單總結1.顏色的常識任何顏色都是由三原色組成(RGB),JAVA中支持224為彩色,即紅綠藍分量取值介于0-255之間(8位表示)2.Color類中的常量public final static Color black new Color(0,0,0);public final static Color bule new Col…

C#中幾種循環語法的比較

循環操作在程序開發當中使用非常的廣泛,當然循環也很容易成為整個程序運行的性能瓶頸,所以理解C#中幾種循環的用法,還是非常重要的。C#支持一下四種循環方式1、while循環2、do...while循環3、for 循環4、foreach循環前三種循環在C、Java中也是…

Eclipse基金會

昨天Eclipse基金會慶祝其成立十周年。2004年2月的新聞稿宣布該非盈利組織的正式成立,由包括開發者、消費者和插件提供商在內的各獨立團體組成的董事會,為Eclipse的長期發展負責。 基金會成立時,有19個項目和50個董事會成員,其開源…

.Net架構必備工具列表

原文N多年前微軟官網曾發了.Net下必備的十種工具,N多年過去了,世異時移,很多東西都已經變化了,那個列表也似乎陳舊了。而且,該文也只是對十種工具獨立的介紹,顯得有些羅列的感覺,是不是每個工具…

java scanner接收數組_java – 使用scanner將文件中的整數讀入數組

我正在為學校做一份復習工作.賦值是編寫一個類,它從標準輸入讀取一個包含幾個整數的文件,這些整數將被放入一個數組中.從這里開始,需要編寫方法來找出平均值,中位數,最大值,最小值和標準差.它讀起來像這樣:4556677889等等…所以,我假設我需要創建一個數組列表(因為長…

Asp.Net頁面傳值的方法簡單總結【原創】

1、QueryString當頁面上form按照get的方式向頁面發送請求數據的時候,web server會將請求數據放入一個QEURY_STRING的環境變量中,然后通過QeueryString方法從這個變量中獲取相應的參數。例如:發送參數頁面Test1.aspx 按鈕單擊代碼:…

關于archlinux下的ralink5370網卡

驅動此網卡要使用 rt2800usb,rt2800lib 這兩個模塊 順便說一下對模塊進行操作的命令: rmmod 模塊名 //為移除模塊 insmod 模塊所在路徑 //為添加模塊 查看網卡是否能被驅動,可以使用命令:ifconfig -a 轉載于:https://www.cnblogs.…

java xml 遞歸_Java遞歸遍歷XML所有元素

import org.dom4j.Document;import org.dom4j.DocumentHelper;import org.dom4j.DocumentException;import org.dom4j.Element;import java.util.*;/*** Created by IntelliJ IDEA.* User: leizhimin* Date: 2008-4-14 14:02:12* Note: Java遞歸遍歷XML所有元素*/public class …

【基礎】C#異常處理的總結

一、異常處理的理解?異常處理是指程序在運行過程中,發生錯誤會導致程序退出,這種錯誤,就叫做異常。因此處理這種錯誤,就稱為異常處理。二、異常處理如何操作?C# 異常處理時建立在四個關鍵詞之上的&#xff…

Java Web 路徑問題

可能在做文件上傳或者 圖片加載,資源加載 時候用到文件相對服務器地址 System.out.println(request.getRemoteUser()); //客戶端用戶System.out.println(request.getRemoteAddr()); //客戶端IPSystem.out.println(request.getRemoteHost()); //客戶端主機名Syst…

mysql 多字節編碼漏洞_phpmyadmin 4.8.1 遠程文件包含漏洞(CVE-2018-12613)

漏洞詳情范圍 phpMyAdmin 4.8.0和4.8.1原理 首先在index.php 50-63行代碼$target_blacklist array (import.php, export.php);// If we have a valid target, lets load that script insteadif (! empty($_REQUEST[target])&& is_string($_REQUEST[target])&&…

.Net開發的兩個小技巧

一、符號的妙用1、可以作為保留關鍵字的標識符C#規范當中,不允許使用保留關鍵字(class、bool等)當作普通的標識符來命名,這時候符號作用就體現出來了,可以通過符號前綴把這些保留關鍵字可以當作普通的字符使用。比如&a…

Codeforces Round #FF (Div. 1) A. DZY Loves Sequences

原題鏈接:http://codeforces.com/problemset/problem/446/A 題意:給一個長度為n的序列,最多可以修改一個位置的數,求最長連續上升子序列。 題解:當a[i1] > a[i-1]2的時候,可以通過改變a[i]的值來使前后兩…

25句張小嫻經典愛情語錄,句句穿心!

1、女人在床上流的眼淚,比在任何一個地方多。男人在床上說的謊話,也比在任何一個地方多。2、承諾本來就是男人與女人的一場角力,有時皆大歡喜,大部份的情況卻兩敗俱傷。3、愛情正是一個將一對陌生人變成情侶,又將一對情…

mysql 數據庫事務處理_Mysql事務處理問題 - mysql數據庫欄目 - 自學php

今天和同學討論起數據庫事務處理的問題,感覺討論中明白了一些,有些知識看過了,但是沒有實際使用還是不理解。事務處理就是將一系列操作當做一個原子操作,要么全部執行成功,如果執行失敗則保留執行期的狀態。通過提交和…

[LeetCode] Palindrome Linked List

Given a singly linked list, determine if it is a palindrome. 一開始想用棧,但是試來試去發現寫不出來遂放棄,后來想想再不濟可以轉換成數組然后分別兩頭掃,但是這樣就用了O(n) 的空間,再進一步,可不可以在鏈表里模…

【原創】Ajax的用法總結

一、什么是AjaxAjax英文全稱為“ Asynchr JavsScript and XML”(異步的JavaScript和XML),是一種創建交互式網頁的開發技術。二、Ajax技術的核心Ajax是一系列相關技術的融合,其核心包括XMLHttpRequest、JavsScript和DOM技術&#x…

gprs java_WISMO模塊GPRS上網設置的過程

WISMO模塊GPRS上網設置的過程一) AT指令設置部分(1) ATCGCLASS“B”置為“網絡WISMO模塊GPRS上網設置的過程一) AT指令設置部分(1) ATCGCLASS“B”置為“B”模式。(2) ATCGDCONT1,“IP”,“CMNET”設置APN。(3) ATCSQ 檢查信號 若返回10—31&#xff0c…