Nginx

介绍:

  Nginx (engine x) 是一个高性能的http和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Nginx是由伊戈尔·赛索耶夫为俄罗斯访问量第二的Rambler.ru站点(俄文:Рамблер)开发的,第一个公开版本0.1.0发布于2004年10月4日。其将源代码以类BSD许可证的形式发布,因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。2011年6月1日,nginx 1.0.4发布。
Nginx是一款轻量级的web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
 
安装Nginx:
  Nginx还需要依赖pure,zlib,openssl,
  解压文件后进入目录启动 ./configure  , 然后安装 : make && make install
  nginx会在 usr/local/下生成一个nginx文件夹,进入后有一个sbin,里面就是nginx的启动文件 , 通过./nginx就能启动
 

nginx操作的常用命令

        1.需要进入/usr/local/sbin下

        查看版本号:./nginx -v

         启动nginx:   ./nginx     查看端口情况 ps -ef | grep nginx

         关闭nginx:      ./nginx -s stop

         修改配置文件后重加载:./nginx -s reload

 

配置文件

   位置:usr/local/nginx/conf/nginx.conf

   组成部分:1>全局块:设置一些影响nginx服务整体运行的配置指令 , 如worker_process,值越大,

处理并发量越多

                       2>events块:配置服务器与有湖网络连接部分,如worker_connections 1024 , 支持最大连接数

                       3>http块:配置最频繁的部分,反向代理,负载哦,动静又分为两部分:

              1,server块 : listen 80 :监听端口,

                                                2,location块:

配置反向代理

  使用nginx反向代理,根据访问的路径跳转到不同端口的服务中,设置nginx的监听端口为9001

  实现效果:

      访问http://127.0.0.1:9001/edu/  , 跳到127.0.0.1:8080中 

      访问http://127.0.0.1:9001/vod/ , 跳转到127.0.0.1:8081中

  准备工作:

      两个tomcat服务器,一个端口为8080 , 一个为8081 , 

      在webapps 下创建两个文件夹edu(8080.html),vod(8081.html),

      在nginx.conf中配置

        1,监听端口:listen:9001

        2,    server_name: ip地址(我这里用本地127.0.0.1)

        3 , 配置转发路径:     

server {
        listen       9001;
        server_name  127.0.0.1;

        location ~/edu/ {
            proxy_pass http://127.0.0.1:8080
        }

    location ~/vod/ {
            proxy_pass http://127.0.0.1:8081
        }
    }

= : 用于不含正则表达式的url,要求请求字符串与url严格匹配,
~ :用于表示url包含正则表达式,区分大小写
~* :不区分大小写

windows系统访问linux系统中的Nginx,默认不能访问,因为防火墙问题

  解决办法:1.关闭防火墙,2.开放访问的端口

  命令:

    查看开放的端口:firewall-cmd --list-all

    设置开放端口:firewall-cmd --add-service=http --permanent

            firewall-cmd --add-port=端口号/tcp --permanent

    重启防火墙:firewall-cmd --reload

    结果:

配置负载均衡      

  通过增加服务器的数量,然后将请求分发到各个服务器上

   实现效果:浏览器输入 http://127.0.0.1/edu/edu.html ,nginx将请求均衡到8080和8081

   准备工作:两台tomcat服务器,一台8080,一台8081

           在两个tomcat的webapps目录中创建edu文件,在edu下创建edu.html文件

  nginx.conf配置 

 upstream myserver { //myserver为服务名,自己指定
    server 127.0.0.1:8080; 需要负载到的服务器列表
    server 127.0.0.1:8081;
    }
    server {
        listen       80; //nginx监听端口
        server_name  127.0.0.1; 
        location / {
          proxy_pass http://myserver;   //加上自己定义的服务名
            root   html;
            index  index.html index.htm;
        }

      测试结果:80,81交替服务,实现了负载均衡

 

   负载均衡策略:

    一:轮询(默认):每个请求按时间顺序逐一分配到不同的后端服务器,如果后段服务器挂掉,能自动剔除

    二:weight(权重策略):默认为1,权重越高被分配的客户端就越多,

upstream myserver {
    server 127.0.0.1:8080 weight=10;
    server 127.0.0.1:8081 weight=5;
    }

    三:ip_hash:每个请求按访问ip的hash结果分配,这样每个访客固定访问一个服务器,可以解决session共享问题,如第一次访问的是8080,以后用同一ip访问,也都是走8080端口

upstream myserver {
    ip_hash;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    }

    四:fair分配:根据后端响应时间来分配,时间越短的优先分配

upstream myserver {
    fair;
    server 127.0.0.1:8080;
    server 127.0.0.1:8081;
    }

Nginx动静分离

  将动态资源(servlet.jsp.访问数据库等)和静态资源(html,css,image等)分离,提高访问效率

   两种方案:

      1:将静态文件独立成单独的域名,放在独立的服务器,也是目前主流方案

      2:动态和静态文件混合一起发布,通过nginx来分开,

  准备工作:

      1.在linux系统中准备一些静态资源,在根目录下建一个data文件夹,里面方图片和html

                    

      配置nginx.conf     

server {
        listen       80;
        server_name  127.0.0.1;
        location /www/ {  //html文件路径
            root   /data/;
            index  index.html index.htm;
        }
        location /image/ {  //图片路径
            root   /data/;
            autoindex on; //列出目录
        }
}

      结果:

  

Nginx高可用

   简单来说就是当主服务器宕机时能够服务转移到从服务器

  准备工作:

    1.两台服务器

    2.两台服务器都安装nginx

    3.两台服务器都安装keepalived(切换作用),安装位置在 /etc/keepalived/keepalived.conf

  高可用的配置(修改keeepalived.conf):

    1keeepalived.conf主要三个部分:

      (1):global_defs:全局配置  

         里面最重要的是:router_id   主机名   //作用是访问到主机

      (2):vrrp_script chk_http_port:脚本配置

         script  脚本文件地址       //脚本文件的地址,具体内容在底下

         interval  2   //检测脚本执行的时间,这里是每2秒执行一次

         weight  20  //权重

      (3): vrrp_instance VI_1 : 虚拟主机配置

         state MASTER  //设置是主服务器还是从服务器,这里是主

         interface    ens33     //网卡,这里网卡是ens33,可通过ifconfig命令查看

         virtual_router_id   88 //主从服务器的id标识,两个必须相同

         priority  100  //主从服务器的优先级,一般主机较大,从机较小

         advert_int    1  //检测心跳,就是多久检测以下这台主机是否还活着,这里设置为1秒

         authentication{         //权限验证

             auth_type PASS

             auth_pass  111

         }

         virtual_ipaddress {       

            虚拟ip地址    //绑定虚拟ip,可以绑定多个

          }

  脚本文件内容: 

#!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
  /usr/local/nginx/sbin/nginx    //启动nginx的位置
  sleep 2 
  if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
    killall keepalived 
  fi
fi
生命不止,折腾不息
原文地址:https://www.cnblogs.com/steakliu/p/11563289.html