主要是nginx的安装使用
1. 安装nginx(以及两个tomcat)
2. 使用nginx(测试负载均衡)
想要搭建的测试环境,
1.两个tomcat, 端口分别是80和8090(因为之前安装过一次端口为80的tomcat)
2.nginx端口为8088
-
nginx安装(linux为例)
安装目录都在
/usr/local
下.-
安装之前可以先装一下需要用到的指令
yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel
-
安装包获取, 选取
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
-
设置:
./configure
-
编译:
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中一致)
-
-
启动等相关指令
copy from 参考5
1、cd /usr/local/nginx/sbin/ //进入目录 2、./nginx //启动 3、./nginx -s stop //停止 4、./nginx -s quit //安全退出 5、./nginx -s reload //重载配置文件(修改了配置文件需要执行此命令 比较常用) 6、ps aux|grep nginx //查看ngnix进程
-
-
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