nginx学习笔记二 location配置

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/

image.png

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.png

1、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

image.png

添加/结束配置

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

image.png

添加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
}


访问: http://txyun.api.com/target/a.html

image.png

image.png

你可能感兴趣的:(nginx学习笔记二 location配置)