主要是nginx的安装使用, 至于原理
1. 安装nginx(以及两个tomcat)
2. 使用nginx(测试负载均衡)
想要搭建的测试环境,
1.两个tomcat, 端口分别是80和8090(因为之前安装过一次端口为80的tomcat)
2.nginx端口为8088
-
nginx安装(linux为例)
安装目录都在
/usr/local下.-
安装包获取, 选取
Stable version下载-
直接下载, (传入虚拟机或服务器) nginx: download
-
参考上面地址中的版本通过指令
wget http://nginx.org/download/nginx-1.22.1.tar.gz下载
-
-
解压安装
-
解压:
tar zxvf nginx-1.22.1.tar.gz -
重命名:
mv nginx-1.22.1 nginx -
进入目录:
cd ./ngingx -
编译:
make -
安装:
make install -
修改配置文件:
vim ./conf/nginx.conf#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include 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 logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; # 改动1 # 新增一个指令块(请求转发都会转发到这里面), 指向两个tomcat的端口 # weight是权重 upstream myservers { server 127.0.0.1:80 weight=1; server 127.0.0.1:8090 weight=1; } server { # 改动2 # 端口修改为nginx的端口 # server_name修改为当前机器的ip或域名 listen 8088; server_name 127.0.0.1; #charset koi8-r; #access_log logs/host.access.log main; # 改动3 将指令块添加到转发规则中 location / { proxy_pass http://myservers; proxy_redirect default; # root html; # index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # ... 省略改动1: 添加指令块(名字和改动3中的一致即可)
改动2: 修改间挺端口, 默认80
改动3: 添加请求转发规则(http://后面的名字和改动1中一致)
-
-
-
tomcat安装
-
下载tomcat安装包, 建议安装8版本的 Apache Tomcat 8 Software Downloads
-
解压重命名指令同nginx
-
第一个端口为80的tomcat目录为
tomcat -
修改端口:
vim ./tomcat/conf/server.conf<!-- 将8080改成80 --> <Connector port="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -
启动80的tomcat,
./tomcat/bin/start.sh -
第二个端口为8090的tomcat目录为
tomcat8090(再次解压一个新的) -
修改端口:
vim ./tomcat8090/conf/server.conf主要修改 Server中的port 和 Connector中的port (如果启动失败可百度启动两个不同端口tomcat自行查找问题或者更改更多参数令其完全不同)
<!-- 指定关机时候的端口 8005改成8006 --> <Server port="8005" shutdown="SHUTDOWN"> <!-- AJP协议端口: 将8080改成8089 --> <Connector port="8089" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> -
启动8090的tomcat:
./tomcat8090/bin/start.sh
-
-
创建一个测试项目
创建一个只有一个接口的demo项目(maven构件为例)
-
pom: 因为使用tomcat运行, 我们打包方式改成war, 添加上打包插件<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.example</groupId> <artifactId>demo</artifactId> <version>1.0-SNAPSHOT</version> <packaging>war</packaging> <properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> </properties> <dependencies> <!-- web必要依赖 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> <version>2.7.5</version> </dependency> <!-- hutool工具类库 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.9</version> </dependency> </dependencies> <build> <!-- 指定打包出来的文件名 --> <finalName>test-api</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.5.0</version> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.1</version> <configuration> <!--如果想在没有web.xml文件的情况下构建WAR,请设置为false。--> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project> -
yml: 建两个配置文件test和prod, 配置不同的参数, 测试负载均衡# 其实一个配置文件打包时候改参数内容就行, 意思都一样, # 只是模仿, 分文件还可以通过日志查看哪个配置文件生效了 # application.yml spring: profiles: active: test # application-test.yml name: test # application-prod.yml name: prod -
Application: 启动类, 配置自动启动package org.example; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.builder.SpringApplicationBuilder; import org.springframework.boot.web.servlet.support.SpringBootServletInitializer; /** * @author codor * @date 2023/03/13 14:22 */ @SpringBootApplication public class TestApplication extends SpringBootServletInitializer { public static void main(String[] args) { SpringApplication.run(TestApplication.class, args); } @Override protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) { return builder.sources(TestApplication.class); } } -
controller: 写一个接口读配置文件信息package org.example.controller; import cn.hutool.core.date.DatePattern; import cn.hutool.core.date.DateUtil; import cn.hutool.extra.spring.SpringUtil; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.Date; /** * @author codor * @date 2023/03/13 14:24 */ @RestController @RequestMapping("/test") public class TestController { @RequestMapping("/time") public String time() { return SpringUtil.getProperty("name") + ": " + DateUtil.format(new Date(), DatePattern.NORM_DATETIME_MS_PATTERN); } } -
修改
application.yml中激活文件打test和prod的两个包修改两个tomcat中的webapps下, 会自动解压部署. -
访问各自端口下返回的内容中分别对应着
test和prod即为正常
-
-
测试nginx
-
访问
http://127.0.0.1:8088/test-api/test/time -
反复刷新得到结果中有
test和prod即为正常, 默认的负载均衡机制应该是轮播. -
关闭8090的tomcat:
./tomcat8090/bin/shutdown.sh -
再次刷新, 结果只有
test的结果为正常. -
再次启动8090的tomcat
-
刷新结果中则恢复之前的情况
如果tomcat8090中的包关闭后, 刷新会导致一次
test一次404
-
此次记录只是nginx入门简单使用, 作为笔记记录.
原理, 安装, 整合
-
参考1: 基本原理
-
参考2: 代理
-
参考3: 实现原理
-
参考4: upstream模块
-
参考5: Nginx安装
-
参考6: SpringBoot整合Nginx