• Nginx


    Nginx简介

    Nginx是一款轻量级的Web服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。协议下发行。特点占用内存少,并发能力强,使用nginx的网站有腾讯、淘宝、百度、京东、新浪、网易等。


    nginx作用

    1、反向代理
    正向代理,用户A不能访问谷歌,浏览器配置代理服务器,然后通过访问代理服务器,让代理服务器获取内容并返回用户A。
    反向代理,用户A发送请求给反向代理服务器,反向代理转交请求,并将获得的内容返回给客户端。反向代理客户端不需要任何配置。
    2、负载均衡
    负载均衡,分摊到多个操作单元上进行执行。
    3、动静分离
    静态页面与动态页面部署到不同服务器上


    检查安装与启动停止

    进入/usr/local/nginx/sbin/目录

    ./nginx -v       // 查看版本
    ./nginx        // 启动
    ./nginx -s stop    // 停止
    ./nginx -s reload   // 重启


    配置systemctl后的管理方式

    systemctl start nginx
    systemctl stop nginx
    systemctl restart nginx
    systemctl status nginx


    配置systemctl

    1、创建一个nginx.service并添加执行权限
      vim /usr/lib/systemd/system/nginx.service
      chmod +x /usr/lib/systemd/system/nginx.service

    2、添加内容

    注释不能加,要去掉,否则报错
    [Unit] # 对服务的说明
    Description=nginx - high performance web server # 描述服务
    After=network.target remote-fs.target nss-lookup.target # 描述服务类别
    
    [Service] # 服务的一些具体运行参数的设置
    Type=forking # 后台运行的形式
    PIDFile=/usr/local/nginx/logs/nginx.pid # PID文件的路径
    ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf # 启动准备
    ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf # 启动命令
    ExecReload=/usr/local/nginx/sbin/nginx -s reload # 重启命令
    ExecStop=/usr/local/nginx/sbin/nginx -s stop # 停止命令
    PrivateTmp=true # 给服务分配临时空间
    
    [Install]
    WantedBy=multi-user.target

    3、重载systemctl命令

    systemctl daemon-reload
    systemctl start nginx.service


    nginx配置文件解释

    # 用户
    #user  nobody;
    
    # processes [ˈprəʊsesɪz] 进程
    worker_processes  1;    # 此项配置表示可以处理的并发数量;设置值和CPU核心数一致
    
    # 日志位置和日志级别
    #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; # 支持的最大连接数,客户端到nginx的连接可以有多少个
    }

    Nginx原理分析

    Nginx启动后有多进程,包括一个master进程,多个worker进程。
    worker进程个数是根据服务器CPU核数来决定的。如4核心配置为worker_processes 4。如果设置少了,cpu的性能不能得到发挥。设置多了,频繁切换上下文带来损耗。
    多个worker使用竞争机制从master获取任务。
    worker_connections 1024,表示每个worcker支持的最大连接数。
    因此,一个nginx能建立的最大连接数是 worker_processes * worker_connections,worker_connections默认是1024,当然,这是最大连接数。如果http请求本地资源,支持的最大并发量就是worker_processes * worker_connections;如果是http1.1,每次访问占用两个连接,支持的最大并发量就是worker_processes * worker_connections/2。如果使用反向代理,http1.1,每个请求过来,nginx服务器会与浏览器和后端服务器分别建立两个连接,支持的最大并发量就是worker_processes * worker_connections/4。

    master、worker机制优点
    1、可以使用 nginx -s reload热部署
    master进程在接到指令后,重新加载配置文件,再启动新的worker进程,新worker开接收新请求;同时master向所有老worker进程发送信号,告诉他们,不再接收新请求,如果有未处理完的请求处理完成后再退出。
    2、每个worker都是独立的进程,一个worker出现故障,其他worker继续工作,不会造成服务中断。


    location 规则说明

    location  /  {
      proxy_pass http://192.168.0.105:9003;
    }

    location用于匹配url,语法如下:

    location [ = | ~ | ~* | ^~ ]  url {

    }

    ~  正则匹配,区分大小写
    ~*  正则匹配,不区分大小写
    =  不使用正则匹配,字符中必须是严格的url


    反向代理 

    示例一,反向代理单机服务器:

    server {
          # listen和servr_name配置的是nginx对外暴露的ip和端口号
         # server_name的配置不可以加http://前缀,否则启动报错
            listen       80;
            server_name  192.168.0.105;
    
            # 下面是转发给tomcat的ip和端口号
            # proxy_pass的配置可以加http:前缀,末尾不要忘了冒号
            location / {
                proxy_pass http://192.168.0.105:9003;
            }
    }

    示例二,反向代理多台服务器:

    有两台tomcat,一台tomcat的webapps里有项目first,first目录下有WEB-INF、index.jsp等;另一台tomcat的webapps里有项目second,second目录下也有WEB-INF、index.jsp等;

    server {
            listen       80;
            server_name  192.168.0.105;
    
            location ~ /first/ {
                proxy_pass http://192.168.0.105:9000;
            }
    
            location ~ /second/ {
                proxy_pass http://192.168.0.105:9001;
            }
    }

    浏览器访问:192.168.0.105/first  192.168.0.105/second  


    负载均衡默认轮询

    upstream myserver {
        server 192.168.0.105:9000;
        server 192.168.0.105:9001;
        server 192.168.0.105:9003;
    }
    
    server {
        listen       80;
        server_name  192.168.0.105;
    
        location / {
            proxy_pass http://myserver;
            root   html;
            index  index.html index.htm;
        }
    } 

    负载均衡策略

    轮询,每个请求按照时间顺序分配到不同的服务器,如果后端服务器down掉,就自动剔除了。
    权重,用于性能不均,哪个服务器分配的多些,weight=3
    ip绑定,每个请求按照ip的hash结果分配,一个访客一个固定后端服务器,解决session缓存的问题


    动静分离

    通过设置 expires 参数,可以使浏览器在过期时间内缓存页面,浏览器发送请求,服务器对比该文件最后更新时间,文件没有更新,返回给浏览器304,浏览器从缓存里返回用户;有改变,服务器返回内容。

    经常更新的页面不建议使用;

       server {
            listen       80;
            server_name  192.168.0.105;
    
            location /images/ {
                autoindex on;
                root /data/;
            }
    
            location /www/ {
                root /data/;
            }
        }

    文件服务器目录:
    /data/images/1.jpg
    /data/www/1.txt

    浏览器访问:http://192.168.0.105/images/1.jpg  http://192.168.0.105/www/1.txt

  • 相关阅读:
    解决Shiro在Tomcat重启之后丢失登录信息
    代码安全审计大全
    解决Spring Boot打包war部署到Tomcat出现Could not open ServletContext resource
    weblogic12 重装记录
    【Spring】事物和锁及回滚异常类型
    【Spring】thymeleaf + SpringMVC局部刷新
    【Spring】@ModelAttribute三种使用场景
    Java Optional
    JAVA lambda
    最短时间(最短路+思维)
  • 原文地址:https://www.cnblogs.com/Mike_Chang/p/12985029.html
Copyright © 2020-2023  润新知