nginx

Posted xue_yun_xiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了nginx相关的知识,希望对你有一定的参考价值。

一、概述

1、反向代理

反向代理:就是nginx 可以代理我们的tomcat ,用户只需要访问nginx 不需要知道真正提供服务的Tomcat 的ip,通过nginx 访问就可以了

正向代理:客户端主动需要一台代理服务器 ,通过代理服务器去访问目标服务器

2、负载均衡

就是用户请求过来到达nginx ,nginx 将请求 转发个tomcat 处理 响应请求,如果每秒都有1000次请求,nginx 会根据tomcat 机器的性能 均衡分配(能者多劳)

假如 每秒中 1000ge 请求 (QPS)

3、动静分离

就是将我们以前工程中的 静态资源 放在nginx中,使用nginx 提供静态资源服务,使用tomcat 提供动态资源

二、安装

1、前提保证网络通常

ping www.baidu.com

2、安装环境依赖

yum -y install gcc zlib zlib-devel pcre-devel openssl openssl-devel

3、将 nginx-1.4.2.tar.gz上传linux

4、解压缩到指定目录

[root@mastera ~]# mkdir /usr/nginx
[root@mastera ~]# tar -xzvf nginx-1.4.2.tar.gz -C /usr/nginx/

5、执行配置文件 生成makefile

[root@mastera ~]# cd /usr/nginx/nginx-1.4.2/
[root@mastera nginx-1.4.2]# ls
auto     CHANGES.ru  configure  html     man     src
CHANGES  conf        contrib    LICENSE  README
[root@redis01 nginx-1.4.2]# ./configure 

6、编译安装

[root@mastera nginx-1.4.2]# make
[root@mastera nginx-1.4.2]# make install

7、切换到nginx 的安装目录

[root@mastera nginx-1.4.2]# pwd
/usr/nginx/nginx-1.4.2
[root@mastera nginx-1.4.2]# cd /usr/local/nginx/
[root@mastera nginx]# ls
conf  html  logs  sbin

8、启动nginx

[root@mastera nginx]# ./sbin/nginx 


让nginx 重现加载配置文件

[root@mastera nginx]# ./sbin/nginx -s reload 

停止nginx

[root@mastera nginx]# ./sbin/nginx -s stop

三、niginx配置


#一个 location 就是一个nginx 的请求映射
#当前映射 匹配 / 根路径,所有的请求都会去 配置root 对应目录下去找资源
# http://192.168.12.130/index.html
location /
root html;
# 配置默认访问页 首页 http://192.168.12.130 === http://192.168.12.130/index.html
index index.html index.htm;

1、nginx 配置静态资源

静态资源就是html 图片 css js 音频

 # 只能匹配image  
        location /image/ 
           root /usr/local/nginx;
        
        
        # 匹配所有以 gif jp jpeg png .. 结尾的文件
        location ~* \\.(gif|jpg|jpeg|png|css|js|ico)$ 
            root /usr/local/nginx/;
            expires 30d;
        

2、配置图片静态路径

1、在conf/nginx.conf 添加路径映射

# 只能匹配image  
        location /image/ 
           root /usr/local/nginx;
        

2、在 /usr/local/nginx 创建 image 文件夹,上传图片

3、nginx 重新加载配置文件

[root@mastera nginx]# ./sbin/nginx -s reload 

4、访问

3、路径映射优先级

路径映射优先级 从高到底,依次降低

1. 直接匹配

location = /
精准匹配,主机名后面不能带任何的字符串

2. 通用匹配

location /xxx
匹配所有以/xxx开头的路径

3. 正则匹配

location ~ /xxx
匹配所有以/xxx开头的路径

4. 匹配开头路径

location ^~ /images/
匹配所有以/images开头的路径

5. 匹配后缀

location ~* .(gif|jpg|png)$
匹配以gif或者jpg或者png为结尾的路径

6. 全部通配

location /
匹配全部路径

四、反向代理

1、创建springboot工程

 <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.3.RELEASE</version>
        <relativePath/>
    </parent>


    <dependencies>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.0.3.RELEASE</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>

            <!--  将spring boot 应用打为jar  -->
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

2、创建启动类

@SpringBootApplication
public class MyApplication 
    public static void main(String[] args) 
        SpringApplication.run(MyApplication.class,args);
    

3、创建配置文件

server.port=8080

4、创建controller

@RestController
public class HelloController 

    @Value("$server.port")
    private int port;
    
    @RequestMapping("/test1")
    public String test1()
        return "myport:"+port;
    

5、创建html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<h1>  hi  nginx  !!!!</h1>

<img src="image/1.png">

</body>
</html>


6、测试

五、配置动静分离

1、将工程中static 目录 拷贝到nginx 目录中

2、修改配置文件

  #access_log  logs/host.access.log  main;
        #一个 location 就是一个nginx 的请求映射 
        location / 
            #root   html;
            #index  index.html index.htm;
            proxy_pass  http://192.168.12.1:8080;
        
       # 就是所有 以 html jpb 结尾的文件 都去 root(映射根节点) 对应linux目录  
        location ~ .*\\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ 
            expires 24h;
            root  /usr/local/nginx/static;
        

3、重新加载配置文件

[root@mastera nginx]# ./sbin/nginx -s reload

4、测试

为什么要做动静分离
1.tomcat 加载静态资源性能差
2.让tomcat专注于 响应用户动态请求,降低Tomcat压力
3.修改静态代码,不需要重置tomcat ,只需要将nginx 对应静态目录文件 替换就可以

六、负载均衡

负载均衡:就是nginx 根据配置 让多台tomcat 可以均衡的分配前端请求

1、创建工程


2、修改配置文件

    upstream springbootserver
        server  192.168.12.1:8080;
        server  192.168.12.1:8088;
    
    
     server 
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;
        #一个 location 就是一个nginx 的请求映射 
        location / 
            #root   html;
            #index  index.html index.htm;
            proxy_pass  http://springbootserver;
        
       # 就是所有 以 html jpb 结尾的文件 都去 root(映射根节点) 对应linux目录  
        location ~ .*\\.(html|htm|gif|jpg|jpeg|bmp|png|ico|js|css)$ 
            expires 24h;
            root  /usr/local/nginx/static;
        
        

3、重新加载配置文件

[root@mastera nginx]# ./sbin/nginx -s reload

4、测试


七、负载均衡

1、轮询 ( 默认算法)

2、weight (能者多劳,物尽其用)

 upstream springbootserver
        server  192.168.12.1:8080 weight=4;
        server  192.168.12.1:8088 weight=1;
    

3、ip_hash

nginx 会根据用户的 ip 对应的hash 对tomcat 数量进行取余,来决定用户访问那一台tomcat;
解决问题 就是:登录时 如果轮询就会在多个tomcat ,产生多个会话,此时使用 ip_hash

 upstream springbootserver
        ip_hash;
        server  192.168.12.1:8080 ;
        server  192.168.12.1:8088 ;
    

用户登录,多台tomcat 提供服务(session 不共享)解决办法
1.使用nginx ip_hash
2.让tomcat 共享session (存储redis 中)
3.抛弃session 使用token 实现

4、backup

备胎策略 ,所有能用的tomcat 都挂了,备胎上位

 upstream springbootserver
        server  192.168.12.1:8080 backup;
        server  192.168.12.1:8088 ;
    

5、down

让当前对应的tomcat 下线 ,便于升级tomcat

upstream springserver
		server	192.168.13.1:8080 down;
		server	192.168.13.1:8088;
	

6、max_fails

允许请求的失败次数,默认为1,配合fail_timeout一起使用

fail_timeout
经历max_fails次失败后,暂停服务的时间,默认为10s(某个server连接失败了max_fails次,则nginx会认为该server不工作了。同时,在接下来的 fail_timeout时间内,nginx不再将请求分发给失效的server。)

upstream springserver
		server	192.168.13.1:8080;
		server	192.168.13.1:8088 max_fails=3 fail_timeout=20s;

以上是关于nginx的主要内容,如果未能解决你的问题,请参考以下文章

上位机与MES对接的几种方式

nginx 位置包含字符串 + 以结尾

新阁上位机开发——这四个错误,90%的人都有遇到过

nginx的域名访问和路径结尾斜杠问题

nginx 重写URL尾部斜杠

关于nginx的proxy_pass 有无/(根)结尾的区别