nginx

  • Post author:
  • Post category:其他




Nginx介绍

Nginx是一个http服务器,也是一个中间件


Nginx 相对于 Apache 优点

  1. 高并发响应性能非常好,官方 Nginx 处理静态文件并发 5w/s
  2. 反向代理性能非常强。(可用于负载均衡)
  3. 内存和 cpu 占用率低。(为 Apache 的 1/5-1/10)
  4. 对后端服务有健康检查功能。
  5. 配置代码简洁且容易上手。



基本环境搭建

  • 测试网络是否联通

    ping

    www.baidu.com
  • 禁用防火墙

    iptables -F:关闭

    iptables -L: 查看
  • 关闭安全系统SElinux

    1、临时关闭(不用重启机器)


setenforce 0


##setenforce 1 设置SELinux 成为enforcing模式

2、修改配置文件需要重启机器


getenforce

// ##设置 SELinux 成为 permissive 模式

修改/etc/selinux/config 文件 -> 将SELINUX=enforcing改为SELINUX=disabled

  • 安装一定的支持与工具

yum -y install gcc gcc-c++ autoconf pcre pcre-devel make automake //gcc :c语言库的编译工具

yum -y install wget httpd-tools vim //wget:网络下载工具


Nginx效率高的原因


  • IO多路复用


    一个线程得到IO请求就去处理,阻塞就抽出来去处理下一个IO请求,阻塞完毕继续回来处理。既减少了IO等待,也减少了频繁创建线程浪费的资源,这样的理论就叫IO多路复用,也就是多条IO操作都由一个线程来处理

  • 轻量级


    源代码只保留与http 及核心功能代码,出于性能考虑,不像httpd 有那么丰富的插件。

  • cpu亲和


    CPU核心和NGINX 工作进程绑定的方式,把每个worker进程固定在一个cpu 上执行,减少切换cpu的cache miss,获得更好的性能。

  • 内核空间零拷贝(nginx的sendfile)


    直接通过内核空间进行数据的拷贝,sendfile利用了linux在2.2 零拷贝传递模式

    nginx对静态文件的处理能力超强的原因就是因为sendfile使用了内核空间零拷贝数据传递模式。(例如静态数据不需要加工,那么可以去掉,内核空间到用户空间那一步)



nginx下载安装

cd /usr/local

mkdir nginx // 创建 nginx 文件

cd nginx


  1. 下载安装包和nginx相关依赖包


    下载nginx:wget

    http://nginx.org/download/nginx-1.8.0.tar.gz


    下载openssl:wget

    http://www.openssl.org/source/openssl-fips-2.0.9.tar.gz


    下载zlib:wget

    http://zlib.net/zlib-1.2.11.tar.gz


    下载pcre:wget

    ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.38.tar.gz


  2. 编译安装

编译 openssl :


tar zxvf openssl-fips-2.0.9.tar.gz



cd openssl-fips-2.0.9



./config && make && make install

cd …/ 返回

编译 pcre:


tar zxvf pcre-8.38.tar.gz



cd pcre-8.38



./configure && make && make install

cd …/ 返回

编译 zlib:


tar zxvf zlib-1.2.11.tar.gz



cd zlib-1.2.11



./configure && make && make install

cd …/ 返回

最后安装 nginx:


tar zxvf nginx-1.8.0.tar.gz



cd nginx-1.8.0



./configure && make && make install


  1. 启动nginx


cd /usr/local/nginx/sbin/



./nginx



ps -ef | grep nginx


  1. nginx反向代理


    具体见下



nginx入门实现反向代理


  1. nginx常用命令




    sbin

    目录下 通过

    ./

    启动命令


    ./nginx -s stop

    # 快速关闭Nginx,可能不保存相关信息,并迅速终止web服务。


    nginx -s quit

    #平稳关闭Nginx,保存相关信息,有安排的结束web服务。


    nginx -s reload

    #因改变了Nginx相关配置,需要重新加载配置而重载。


    nginx -s reopen

    #重新打开日志文件。


    nginx -c filename

    #为 Nginx 指定一个配置文件,来代替缺省的。


    nginx -t

    #不运行,而仅仅测试配置文件。nginx 将检查配置文件的语法的正确性,并尝试打开配置文件中所引用到的文件。


    nginx -v

    #显示 nginx 的版本。


    nginx -V

    #显示 nginx 的版本,编译器版本和配置参数。

  2. linux安装jdk与tomcat


    在这里插入图片描述

    首先安装传输命令


yum install lrzsz


安装 jdk


cd jdk



tar -xvf jdk-9.0.1_linux-x64_bin.tar.gz

配置环境变量


vim /etc/profile

G进入最后添加


JAVA_HOME=/usr/local/jdk/jdk-9.0.1



CLASSPATH=$JAVA_HOME/lib/


PATH=$PATH:$JAVA_HOME/bin



export PATH JAVA_HOME CLASSPATH

保存退出

从新加载配置文件


source /etc/profile



java -version

// 查看 JDK 是否安装成功


安装tomcat


cd /usr/local/tomcat/

进入tomcat rz文件:apache-tomcat-9.0.4.tar.gz


tar -zxvf apache-tomcat-9.0.4.tar.gz

启动:进入bin目录 执行 ./startup.sh


cd bin



./startup.sh

最后在外面直接访问,结果如下

在这里插入图片描述


配置单台tomcat服务器反向代理

  • 进入nginx的配置文件目录


cd /usr/local/nginx/conf



vim nginx.conf

#运行用户
#user  nobody;
#启动进程 通常设置与cpu数量相同
worker_processes  1;
#错误日志路径配置
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#记录当前nginx启动的历史进程PID
#pid        logs/nginx.pid;

#工作模式及连接数上限,单个后台worker 进程的最大并发连接数
events {
    worker_connections  1024;
}

#设定http服务器,利用它的反向代理功能提供负载均衡支持
http {
    include       mime.types;
    default_type  application/octet-stream;
        #日志格式
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;
   #上面已经有描述了
    sendfile        on;
    #tcp_nopush     on;
        #链接超时时间
    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;
    
    
    #设置代理的服务器列表 这儿暂时一台 指向虚拟机本机的8080tomcat
    upstream hellonginx{
     #需要被代理的服务器
     server 127.0.0.1:8080;
   }



#http服务器
        server {
        #监听端口80  也就是输入该虚拟机ip就直接访问的端口
        listen       80;
        #定义域名访问 与windows中配置的虚拟域名对应
        server_name  nginx.test.com;
        #编码格式
        charset utf-8;
        #代理配置超时、头信息等参数 可以不配置
                proxy_connect_timeout 180;
                proxy_send_timeout 180;
                proxy_read_timeout 180;
                proxy_set_header Host $host;
                proxy_set_header X-Forwarder-For $remote_addr;
        #access_log  logs/host.access.log  main;
        #
        #绑定反向代理的路径(和upstream绑定)
        location / {
            proxy_pass http://hellonginx;
        }

        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        #错误页面配置 可以不配置
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
}

其中 http 中的

upstream



server 中的

server_name, charset utf-8 和 location

都是需要更改配置的

重启 nginx


cd /usr/local/nginx/sbin/



./nginx -s reload

  • 配置windows的虚拟路径

    进入 :C:\Windows\System32\drivers\etc

    编辑 host,在其中 配置虚拟路径 与 nginx 中的 server_name 配置一致


配置多台tomcat实现负载均衡


将之前的 Tomcat 文件进行 复制并改名


cp -r tomcat1 tomcat2

修改三个端口号:

进入 tomcat2 配置文件 conf 中,修改 server.xml

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

保存退出 分别进入两个 tomcat 的 bin 目录


./startup.sh

启动


nginx负载均衡策略

  1. weight(权重)

    指定轮询几率,weight和访问比率成正比,用于后端服务器性能不均的情况

    如下所示,10.0.0.88的访问比率要比10.0.0.77的访问比率高一倍。
upstream linuxidc{ 
      server 10.0.0.77 weight=5; 
      server 10.0.0.88 weight=10; 
}
  1. ip_hash(访问ip)

    每个请求按访问ip的hash结果分配,这样每个访客固定访问一个后端服务器,可以解决session的问题。
   upstream favresin{ 
       ip_hash; 
       server 10.0.0.10:8080; 
       server 10.0.0.11:8080;
    }
  1. fair(第三方)

    按后端服务器的响应时间来分配请求,响应时间短的优先分配。与weight分配策略类似。
 upstream favresin{      
      server 10.0.0.10:8080; 
      server 10.0.0.11:8080; 
      fair; 
}
  1. url_hash(第三方)

    按访问url的hash结果来分配请求,使每个url定向到同一个后端服务器,后端服务器为缓存时比较有效。

    注意:在upstream中加入hash语句,server语句中不能写入weight等其他的参数,hash_method是使用的hash算法。
 upstream resinserver{ 
      server 10.0.0.10:7777; 
      server 10.0.0.11:8888; 
      hash $request_uri; 
      hash_method crc32; 
}



版权声明:本文为wang_zi_h原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。