kill命令格式:
kill 是向进程发送信号的命令。
Nginx的信号
1)、TERM、INT 快速关闭
2)、QUIT从容关闭
3)、HUP平滑重启,重新加载配置文件
4)、USR1 重新打开日志文件
5)、USR2 平滑升级可执行程序
KILL 9 强制终止,直接杀
二,nginx 指令
root 的处理结果是:root路径 + location路径
alias 的处理结果是:目录别名,使用alias 路径替换location 路径, alias 后面必须使用“/”结束,否则会找不到文件,而root可用可无.
Nginx管理虚拟主机
虚拟主机使用的是特殊的软硬件技术,它把一台运行在因特网上的服务器主机分成一台台“虚拟”的主机,每台虚拟主机都可以是一个独立的网站,可以具有独立的域名,具有完整的Intemet服务器功能(WWW、FTP、Email等),同一台主机上的虚拟主机之间是完全独立的。从网站访问者来看,每一台虚拟主机和一台独立的主机完全一样。
利用虚拟主机,不用为每个要运行的网站提供一台单独的Nginx服务器或单独运行一组Nginx进程。虚拟主机提供了在同一台服务器、同一组Nginx进程上运行多个网站的功能。
基于域名的虚拟主机
在nginx/conf/nginx.conf 配置文件中,有很多server 段配置。就是虚拟主机配置。
在项目一般单独拿出来配置。
server {
#监听端口 80
listen 80;
#监听域名xxx.com;
server_name xxx.com;
location / {
# 相对路径,相对nginx根目录。也可写成绝对路径
root xxx;
# 默认跳转到index.html页面
index index.html;
}
}
基于端口的虚拟主机配置
server {
#监听端口2022
listen 2022;
#监听域名 xxx
server_name xxx.com;
location / {
#/home 目录绝对路径
root /home;
index index.html;
}
}
基于IP地址虚拟主机配置
server {
#监听80端口
listen 80;
#监听ip地址 106.52.69.141
server_name 119.23.225.141 ;
location / {
root ip;
index index.html;
}
}
Location语法规则
通过指定模式来与客户端请求的URI相匹配,基本语法如下:location [=||*|^~|@] pattern{……}
以 = 开头,表示精确匹配;如只匹配根目录结尾的请求,后面不能带任何字符串。
以^~ 开头,表示uri以某个常规字符串开头,不是正则匹配
以~ 开头,表示区分大小写的正则匹配;
以~* 开头,表示不区分大小写的正则匹配
以/ 开头,通用匹配, 如果没有其它匹配,任何请求都会匹配到
1:无修饰符号
server {
listen 80;
server_name aliyun.loctest.com;
#支持中文
charset utf-8;
#1。无修饰符,直接返回字符串
location /abc{
default_type text/plain;
return 502 "测试无符号修饰的匹配";
}
}
配置windows域名
C:\Windows\System32\drivers\etc
的host 文件,添加
119.23.225.141 aliyun.loctest.com
支持访问的url:
aliyun.loctest.com/abc
aliyun.loctest.com/abc?p1
aliyun.loctest.com/abc/
aliyun.loctest.com/abcde
.... 只要匹配上abc
2:= 必须与指定的模式精确匹配
server {
listen 80;
server_name aliyun.loctest002.com;
charset utf-8;
#1。无修饰符,直接返回字符串
location /abc{
default_type text/plain;
return 502 "测试无符号修饰的匹配";
}
#2.=修饰符,精确匹配,返回html标签
location = /bcd{
default_type text/html;
return 502 "带=的精准匹配";
}
只支持
aliyun.loctest.com/bcd
截图路径忽略所有00x,没有备案被干掉,测试只能加域名
image.png
aliyun.loctest.com/bcd?xxx
image.png
其它基本就是404咯
image.png
/结束也不行:http://aliyun.loctest006.com/bcd/
3、~ 表示:指定的正则表达式要区分大小写
server {
listen 80;
server_name aliyun.loctest005.com;
charset utf-8;
#1。无修饰符,直接返回字符串
location /abc{
default_type text/plain;
return 502 "测试无符号修饰的匹配";
}
#2.=修饰符,精确匹配,返回html标签
location = /bcd{
default_type text/html;
return 502 "带=的精准匹配";
}
#3.~ 正则表达式匹配,区分大小写
location ~ /cde{
#返回json
default_type application/json;
return 502 '{"status":502,"msg":"测试正则表达式"}';
}
}
正常 http://aliyun.loctest005.com/cde
image.png大写 http://aliyun.loctest005.com/cDe
image.png小写 http://aliyun.loctest005.com/cdexxx
image.png用/结束可用http://aliyun.loctest006.com/cde/
image.png#~* 正则表达式,不区分大小写
server {
listen 80;
server_name aliyun.loctest007.com;
charset utf-8;
#1。无修饰符,直接返回字符串
location /abc{
default_type text/plain;
return 502 "测试无符号修饰的匹配";
}
#2.=修饰符,精确匹配,返回html标签
location = /bcd{
default_type text/html;
return 502 "带=的精准匹配";
}
#3.~ 正则表达式匹配,区分大小写
location ~ /cde{
default_type application/json;
return 502 '{"status":502,"msg":"测试正则表达式"}';
}
#~* 正则表达式,不区分大小写 ,配置了$只能匹配def
location ~* ^/def$ {
rewrite ^/ /a.html break;
root html/static/;
}
#~* 正则表达式,不区分大小写,dfg,以及efgxxxx都可用匹配
location ~* ^/efg {
rewrite ^/ /b.html break;
root html/static/;
}
}
image.png
image.png
image.png
image.png
root ,alias 配置
root与alias主要区别
在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上。
root的处理结果是:root路径 + location路径
alias的处理结果是:使用alias路径替换location路径
alias是一个目录别名的定义,root则是最上层目录的定义。
还有一个重要的区别是alias后面必须要用“/”结束,否则会找不到文件的,而root则可有可无。
使用root 一 location /abc 则在html 目录下一定要有abc 目录。否则404
server_name aliyun.roottest015.com;
charset utf-8;
#root 配置 /
location / {
root html;
#访问目录权限
autoindex on;
}
location /abc {
root html;
#访问目录权限
autoindex on;
}
location /static{
root html;
#访问目录权限
autoindex on;
}
location /alias{
alias html;
#访问目录权限
autoindex on;
}
location /bcd{
alias html/static;
#访问目录权限
autoindex on;
}
location /absolute {
alias /usr/local/nginx/html/static;
#访问目录权限
autoindex on;
}
}
image.png
image.png
image.png
image.png
image.png
8081虚拟主机
server{
listen 8081;
server_name 106.52.69.141;
charset utf-8;
location / {
default_type text/plain;
return 502 "腾讯云8081监听端口,测试";
}
}
8082虚拟主机
server{
listen 8082;
server_name 106.52.69.141;
charset utf-8;
location / {
default_type text/plain;
return 502 "腾讯云8082监听端口,测试";
}
}
反向代理
server {
listen 80;
server_name txunyun.proxypass.com;
location / {
proxy_pass http://106.52.69.141:8081;
}
}
image.png
负载均衡
1、轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除。
2、weight:指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况。down 暂时不参与负载
3、ip_hash:每个请求按访问ip的hash结果分配,这样同一客户端的请求总是发往同一个后端服务器,可以解决session的问题
3
#负载均衡器
upstream nginx_port {
#ip_hash; # 根据IP hash负载,
server 106.52.69.141:8081 weight=2; #轮询权重
server 106.52.69.141:8082 weight=1;
}
server {
listen 80;
server_name txunyun.upstream.com;
location /nginx_port {
#代理
proxy_pass http://nginx_port;
}
访问url
curl ,linux中请求路径的一个命令
小阶段回顾
一、nginx结构示意图
image.png1、nginx上面记录后台两台tomcat1和tomcat2的访问路径。
2、nginx监听系统port(如80端口),当有浏览器url请求到达时,nginx根据此url结构信息,将请求转发至后台两个tomcat
3、转发至后台tomcat的策略,是一个负载均衡里的配置策略。
4、以上三个步骤,均是在核心文件nginx.conf中配置(如下面这个配置信息)。
image.png
5、配置中的upstream里,记录了tomcat1和tomcat2的地址
6、配置中的server里,监听了80端口
7、配置中的location /dong,是分析url的结构(路径是/dong时),是这种结构的,就进入请求转发命令proxy_pass.
8、proxy_pass是代理转发命令,将请求传递到 upstream(名字为nginx)配置对应的模块。
9、upstream按负载策略(默认轮流两个地址),把请求发到配置的两后台tomcat地址
二、nginx.conf中的server
1、每一个server,对应一个监听port端口,一个ip/域名
2、nginx里面可配置多个server,多个upstream
3、每个server配置多个location
4、一般配置方式:
在/etc/nginx/con.d/目录下,放置多个server配置文件,每个配置文件里仅含一个server配置。
然后在主配置nginx.conf中 : include 文件夹下所以server配置 .
三、upstream/location/rewrite功用
upstream --- 用以配置负载的策略,nginx自带的有:轮询/权重/ip_hash。特殊需求可用第三方策略(使用较少)。
location:----用以匹配url信息结构,配足即进入对应逻辑块。是一套匹配逻辑的小型语法,核心是做url匹配。
rewrite:----用以修改url信息(ip+port部分无法改)的path部分,做重定向。与servlet类似,有页面重定向和内部重定向两类。
proxy_pass----用以转发命令。是实际的转发执行者。它可将流程转给upstream模块。
四,nginx执行location流程示例
一:springBoot项目,集成swagger,用maven 打成jar 包,使用WinSCP 上传到腾讯云服务器
@RestController
@RequestMapping("/api/home")
@Api(value = "HomeController|一个用来测试swagger注解的控制器")
public class HomeController {
@GetMapping("/hello")
public String hello() {
return "hello";
}
@ApiOperation(value = "首页信息", notes = "invokePost说明", httpMethod = "GET")
@GetMapping("/getPage")
public String getPage() {
return "我是订单子系统,您共完成10笔订单,金额5000元";
}
@ApiOperation(value = "模块信息", notes = "模块信息说明", httpMethod = "GET")
@GetMapping(value = "/getInfo")
public String getInfo() {
return "你的商品订单iphoneX,正在运送途中,请注意收货";
}
}
二打成jar包
把target目录下的jar包
image.png
上传到服务器
image.png
执行启动项目
java -jar xxxx.jar
image.png
访问:swagger
image.png
访问api接口
image.png
添加nginx 虚拟服务主机配置文件 txyunapi.conf
server{
listen 80;
server_name txyun.api.com;
#后台服务原始路径;http://106.52.69.141:8082/api/home/hello
#无/ 结束,访问路径 http://txyun.api.com/api/home/hello
location /api/home { #匹配路径/api/home ,剩余路径/hello
proxy_pass http://106.52.69.141:8082; #此处未关闭,传递路径/api/home/hello 到目标ip:port
}
}
配置windows host 文件
添加ip 域名
106.52.69.141 txyun.api.com
访问 http://txyun.api.com/api/home/hello
添加/结束配置
listen 80;
server_name txyun.api.com;
#后台服务原始路径;http://106.52.69.141:8082/api/home/hello
#无/ 结束,访问路径 http://txyun.api.com/api/home/hello
location /api/home { #匹配路径/api/home ,剩余路径/hello
proxy_pass http://106.52.69.141:8082; #此处未关闭,传递路径/api/home/hello 到目标ip:port
}
# 有/结束,访问路径;http://txyun.api.com/dynamic/api/home/getPage
location /dynamic { #匹配路径/dynamic ,剩余路径/api/home/getPage
proxy_pass http://106.52.69.141:8082/; #此处/关闭,只传递/剩余路径 /api/home/getPage 到目标ip:port
}
}
访问http://txyun.api.com/dynamic/api/home/getPage
image.png添加静态配置:
server{
listen 80;
server_name txyun.api.com;
#后台服务原始路径;http://106.52.69.141:8082/api/home/hello
#无/ 结束,访问路径 http://txyun.api.com/api/home/hello
location /api/home { #匹配路径/api/home ,剩余路径/hello
proxy_pass http://106.52.69.141:8082; #此处未关闭,传递路径/api/home/hello 到目标ip:port
}
# 有/结束,访问路径;http://txyun.api.com/dynamic/api/home/getPage
location /dynamic { #匹配路径/dynamic ,剩余路径/api/home/getPage
proxy_pass http://106.52.69.141:8082/; #此处/关闭,只传递/剩余路径 /api/home/getPage 到目标ip:port
}
#访问静态路径:http://txyun.api.com/static/a.html
location /static { #匹配路径/static ,剩余路径/a.thml
root html/;#root 声明,在html文件夹,查找 /static/a.html文件
}
}
在nginx服务器上,html 目录下有static 目录,并且有对应的文件
image.png image.png
访问:http://txyun.api.com/static/a.html
添加alias配置
server{
listen 80;
server_name txyun.api.com;
#后台服务原始路径;http://106.52.69.141:8082/api/home/hello
#无/ 结束,访问路径 http://txyun.api.com/api/home/hello
location /api/home { #匹配路径/api/home ,剩余路径/hello
proxy_pass http://106.52.69.141:8082; #此处未关闭,传递路径/api/home/hello 到目标ip:port
}
# 有/结束,访问路径;http://txyun.api.com/dynamic/api/home/getPage
location /dynamic { #匹配路径/dynamic ,剩余路径/api/home/getPage
proxy_pass http://106.52.69.141:8082/; #此处/关闭,只传递/剩余路径 /api/home/getPage 到目标ip:port
}
#访问静态路径:http://txyun.api.com/static/a.html
location /static { #匹配路径/static ,剩余路径/a.thml
root html/;#root 声明,在html文件夹,查找 /static/a.html文件
}
#访问路径:http://txyun.api.com/target/a.html
location /target { #匹配路径target ,剩余路径/a.html
alias html/static/; # alias 声明在html/static/文件夹,查找a.html
}
image.png
image.png
网友评论