下载Nginx并解压

进入conf目录,并打开nginx.conf文件

在nginx.conf中加上自定义的配置文件,第一次使用建议创建一个空白的自定义配置

Java相关代码,重新生成配置后自动重载Nginx服务
java
public class CommonService implements ICommonService {
/* Nginx路径 */
private final String NGINX_DIR = "F:\\nginx-1.22.1";
/* Nginx配置文件路径 */
private final String NGINX_FILE_NAME = "\\conf\\custom-nginx.conf";
@Autowired
private IProjectInfoDao projectInfoDao;
/**
* 刷新 Nginx 配置
*
* @Auther: czw
* @Description:
* @Date: 2025/06/16 11:40
* @Version: 1.0
*/
@Override
public RetType refreshNginxConfig() {
RetType retType = new RetType();
String nginxConfig = generateNginxConfig();
// 将配置写入文件
if (writeConfigToFile(NGINX_DIR + NGINX_FILE_NAME, nginxConfig)) {
// 重启 Nginx
restartNginx();
}
retType.doSuccess();
return retType;
}
/**
* 动态生成 Nginx 的配置内容
*
* @Auther: czw
* @Description:
* @Date: 2025/06/16 11:48
* @Version: 1.0
*/
private String generateNginxConfig() {
StringBuilder config = new StringBuilder();
config.append("server {\n");
config.append(" listen 8084;\n");
config.append(" server_name 192.168.2.17;\n\n");
config.append(" #charset koi8-r;\n\n");
config.append(" #access_log logs/host.access.log main;\n\n");
config.append(" #这块是自动测试地址(平台地址)\n");
config.append(" location /test {\n");
config.append(" proxy_pass http://192.168.2.12:5173;\n");
config.append(" }\n\n");
List<ProjectInfo> list = projectInfoDao.getNginxProjectList();
if (ObjectUtil.isNotEmpty(list)) {
StringBuilder configBuilder = new StringBuilder();
List<String> targetList = new ArrayList<>();
int count = 1;
for (ProjectInfo projectInfo : list) {
configBuilder.append(" #被测试的" + projectInfo.getProjectName() + "服务地址\n");
configBuilder.append(" location /" + projectInfo.getUri() +"/ {\n");
configBuilder.append(" proxy_pass " + projectInfo.getHost() + projectInfo.getUri() +"/;\n");
configBuilder.append(" }\n\n");
String targetName = "@targetTestFile" + count;
targetList.add(targetName);
configBuilder.append(" #被测试的静态文件地址\n");
configBuilder.append(" location "+ targetName +" {\n");
configBuilder.append(" proxy_pass "+ projectInfo.getHost() +";\n");
configBuilder.append(" }\n\n");
}
configBuilder.append(" #要转发被测试的静态文件地址\n");
configBuilder.append(" location / {\n");
configBuilder.append(" try_files $uri $uri/ "+ targetList.stream().collect(Collectors.joining(" ")) +";\n");
configBuilder.append(" }\n\n");
config.append(configBuilder);
}
config.append(" error_page 500 502 503 504 /50x.html;\n");
config.append(" location = /50x.html {\n");
config.append(" root html;\n");
config.append(" }\n");
config.append("}");
return config.toString();
}
/**
* 将生成的配置写入文件
*
* @Auther: czw
* @Description:
* @Date: 2025/06/16 11:49
* @Version: 1.0
*/
private boolean writeConfigToFile(String filePath, String configContent) {
try {
File configFile = new File(filePath);
if (!configFile.exists()) {
configFile.createNewFile(); // 如果文件不存在则创建文件
}
BufferedWriter writer = new BufferedWriter(new FileWriter(configFile));
writer.write(configContent); // 写入内容
writer.close();
System.out.println("Nginx 配置文件已成功生成: " + filePath);
return true;
} catch (IOException e) {
System.err.println("写入文件时发生错误: " + e.getMessage());
return false;
}
}
/**
* 重启 Nginx 服务
*
* @Auther: czw
* @Description:
* @Date: 2025/06/16 11:50
* @Version: 1.0
*/
private void restartNginx() {
try {
// 执行 Nginx 重启命令
String command = NGINX_DIR + File.separator + "nginx.exe -s reload"; // 重载配置
Process process = Runtime.getRuntime().exec(command, null, new java.io.File(NGINX_DIR));
int exitCode = process.waitFor();
if (exitCode == 0) {
ALogFactory.getLog().info("----------------Nginx 已成功重启----------------");
} else {
ALogFactory.getLog().error("----------------重启 Nginx 失败,退出代码: " + exitCode + "----------------");
}
} catch (IOException | InterruptedException e) {
e.printStackTrace();
ALogFactory.getLog().error("----------------重启 Nginx 时发生错误: " + e.getMessage() + "----------------");
}
}
}
生成的配置文件
