【Nginx】一、了解Nginx

Nginx

  • 一、什么是nginx
  • 二、环境搭建
    • 1、下载地址
    • 2、安装
    • 3、常用命令
  • 三、配置
    • 1、运行中的Nginx进程间的关系
    • 2、配置文件
    • 3、静态网站
    • 4、虚拟主机
      • (1)基于端口的虚拟主机
      • (2)基于域名的虚拟主机
    • 5、负载均衡
      • 1、轮询(默认)
      • 2、权重策略
      • 3、ip hash负载均衡策略
      • 4、最少连接数
      • 5、另外几个配置参数

一、什么是nginx

Nginx 是一个高性能的web服务器;
Nginx的竞争对手:Apache、Lighttpd、Tomcat、 Jetty、IIS;
Tomcat和Jetty面向Java语言,属于重量级的Web服务器,它的性能与Nginx没有可比性;

Apache的发展时期很长,也是世界第一Web服务器;(httpd)
Apache稳定、开源、跨平台等,出现的时间比较早,它被设计成了一个重量级的、不支持高并发的 Web服务器,如果有数以万计的并发HTTP请求同时访问,就会导致服务器上消耗大量内存,操作系统内核对成千上万的Apache进程做进程间切换也会消耗大量CPU资源,并导致HTTP请求的平均响应速度降低;

Lighttpd和Nginx一样,都是轻量级、高性能的Web服务器,欧美业界开发者比较钟爱 Lighttpd,国内的公司更青睐Nginx, Lighttpd在国内使用比较少;

Nginx是俄罗斯人Igor Sysoev使用C 语言开发的
其作为Web服务器被广泛应用到大流量的网站上,包括腾讯、新浪、网易、 淘宝等访问量巨大的网站;

**Nginx是一个跨平台的Web服务器,**可运行在Linux、FreeBSD、Solaris、AIX、Mac OS、Windows等操作系统上;
对于高效处理大规模并发连接,nginx支持Linux上的epoll(epoll是Linux上处理大并发网络连接的利器,Nginx以性能为王;

二、环境搭建

1、下载地址

免费开源版的官方网站:http://nginx.org
商业版本的Nginx:http://www.nginx.com

2、安装

Nginx的安装需要Linux安装相关的几个库,否则配置和编译会出现错误;

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

Nginx可以进行二次开发,你可以修改它里面的东西或者扩展一些东西;

安装步骤

  • 1、解压,执行命令:tar -zxvf nginx-1.16.1.tar.gz
  • 2、切换至解压后的nginx主目录:cd nginx-1.16.1
  • 3、在nginx主目录nginx-1.16.1下执行命令:
./configure --prefix=/usr/local/nginx  
(其中--prefix是指定nginx安装路径)
  • 4、执行命令进行编译:make
  • 5、执行命令进行安装:make install

3、常用命令

configure命令
使用help命令可以查看configure包含的参数: ./configure --help

默认方式启动
直接执行Nginx二进制程序,例如:

./nginx

或者

/usr/local/nginx/sbin/nginx 

默认读取的配置文件:/usr/local/nginx/conf/nginx.conf

指定配置文件启动
使用-c参数指定配置文件:

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

检查Nginx配置文件是否正确:

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t

测试配置选项时,使用-q参数不把error级别以下的信息输出到屏幕 :

/usr/local/nginx/sbin/nginx -t -q

显示版本信息
使用-v参数显示Nginx的版本信息:

/usr/local/nginx/sbin/nginx -v 

使用-V参数显示更多信息;

/usr/local/nginx/sbin/nginx -V 

快速地停止服务
使用-s stop可以强制停止Nginx服务,-s参数是向正在运行的Nginx服务发送信号量,Nginx程序通过nginx.pid文件中得到master进程的进程ID,再向运行中的master进程发送TERM信号来快速地关闭Nginx服务:

/usr/local/nginx/sbin/nginx -s stop 

实际上,也可以通过kill命令直接向nginx master进程发送TERM或者INT信号,效果是一样的;

kill -TERM 主pid
kill -INT 主pid

优雅地停止服务
如果希望Nginx服务可以正常地处理完当前所有请求再停止服务,那么可以使用-s quit参数来停止服务:

/usr/local/nginx/sbin/nginx -s quit 

或者 执行命令:kill -QUIT 主pid

使运行中的Nginx重读配置项并生效
使用-s reload参数可以使运行中的Nginx服务重新加载nginx.conf文件:

/usr/local/nginx/sbin/nginx -s reload

底层是优雅关闭nginx,然后重新加载配置文件并启动

日志文件回滚
使用 -s reopen参数可以重新打开日志文件,这样可以先把当前日志文件改名或转移到其他目录中进行备份,再重新打开时就会生成新的日志文件,这个功能使得日志文件不至于过大:

/usr/local/nginx/sbin/nginx -s reopen

三、配置

1、运行中的Nginx进程间的关系

部署Nginx时都是使用一个master进程来管理多个worker 进程,一般情况下,worker进程的数量与服务器上的CPU核心数相等,每一个worker进程用来提供互联网服务,master进程则只负责监控管理worker进程,当任意一个worker进程出现错误从而导致coredump时,master进程会立刻启动新的worker进程继续服务,另外master进程还为管理员提供命令行服务,包括诸如启动服务、停止服务、重载配置文件、平滑升级程序等操作;
master进程完全接管多个worker进程不但可以提高服务的健壮性(一个worker进程出错后,其他worker进程仍然可以正常提供服务),最重要的是,这样可以充分利用现在多核CPU并发处理,另外要把worker进程数量设置得与CPU核心数量一致,这是Nginx与Apache服务器的不同之处;
在Apache上每个进程在一个时刻只处理一个请求,因此如果希望apache服务器拥有并发处理的请求数更多,就要把Apache的进程或线程数设置得更多,通常会达到一台服务器拥有几百个上千个工作进程,这样大量的进程间切换将带来无谓的系统资源消耗;

而Nginx一个worker进程可以同时处理的请求数只受限于内存大小,而且在架构设计上,不同的worker进程之间处理并发请求时几乎没有同步锁的限制,worker进程通常不会进入睡眠状态,因此当Nginx上的进程数与CPU核心数相等时,进程间切换的代价最小,这些是nginx底层采用c语言调用Linux内核epoll事件模型来实现的,这是一种多路复用IO模型;

2、配置文件

配置文件注意包括:

  • 1、全局配置
  • 2、http配置(http内部的全局配置,http内部的多个server配置)
    块配置项一定会用大括号把一系列所属的配置项全包含进来,块配置项可以嵌套,内层块直接继承外层块,当内外层块中的配置发生冲突时,以内层块为准;
    具体配置项官方文档是以模块进行说明的;
    http://nginx.org/en/docs/http/ngx_http_upstream_module.html 就是负载均衡如何配置的文档,其他模块也有相对应的文档;

如果我们只是使用nginx,其实就是在对配置文件nginx.conf进行各种配置;

3、静态网站

Nginx是用来提供对http请求的处理,但nginx不支持java、jsp,不支持部署war、jar,nginx并不是一个java服务器,你可以用nginx作为前端代理服务器(比如负载均衡),让它转发到后端的tomcat上,然后在tomcat上部署java程序;

server {  
    listen 80; #端口号  
    location / {  
        root /opt/www/; #静态文件路径
    }  
}

配置主要是注意路径的问题,避免出现404找不到页面;
http://192.168.123.126:80/ --> index.html
http://192.168.123.126:80/power --> index.html
http://192.168.123.126:80 = root的路径
/opt/www/power/index.html

4、虚拟主机

一个nginx可以配置多个网站;

(1)基于端口的虚拟主机

server {
    listen 8080;
    server_name localhost;
    location /testweb{
           proxy_pass http://www.testweb.com;
    }
}
server {
    listen 9090;
    server_name localhost;
    location /myweb{
           proxy_pass http://www.myweb.com;
    }
}

(2)基于域名的虚拟主机

server {
        listen       80;
        server_name  www.shop.com;
        location /myweb {
           proxy_pass http://www.shop.com;
        }
}
server {
        listen       80;
        server_name  www.power.com;
        location /myweb {
           proxy_pass http://www.power.com;
        }
}

5、负载均衡

文档:http://nginx.org/en/docs/http/load_balancing.html
我们知道Nginx的各种应用就是对其进行配置即可完成,所以实现负载均衡也是对nginx.conf进行配置,配置负载均衡只需要两步:

  • 1、配置一个upstream
  • 2、配置location里面的 proxy_pass

1、轮询(默认)

每一台机器访问一次,轮流去访问每一台机器;

upstream abc { 
     server  127.0.0.1:9100; 
     server  127.0.0.1:9200;  
     server  127.0.0.1:9300;  
} 
location /myweb {
	proxy_pass http://abc;
}

2、权重策略

按比例访问,下面的配置就是5:2

upstream backserver { 
    server 192.168.0.13 weight=5; 
    server 192.168.0.14 weight=2; 
} 

3、ip hash负载均衡策略

相当于一个用户绑定到了后台的一个具体的tomcat机器上,只有ip不变那么该用户就永远是访问后台的某一个固定的tomcat机器,可以用来快速解决session共享的问题,但此方案存在一些不足;

upstream backserver { 
    ip_hash; 
    server 127.0.0.1:8080; 
    server 127.0.0.1:9090; 
}

4、最少连接数

使用最少连接的负载均衡,nginx将尝试不会把过多的请求负载到繁忙的应用程序服务器上,而是将新请求分发到较不繁忙的服务器上;

upstream backserver { 
    least_conn;
    server 127.0.0.1:8080; 
    server 127.0.0.1:9090; 
} 

5、另外几个配置参数

upstream backserver { 
     #max_fails 最大的失败次数,失败次数超过该值,就不会负载到该机器
    #fail_timeout 最大失败次数后,再等多久可以再让该机器参与负载
     server 127.0.0.1:9100 max_fails=3 fail_timeout=5;
     server 127.0.0.1:9200 backup; 
     (其它所有的非backup机器down的时候,才请求backup机器) 
} 
upstream backserver { 
      server 127.0.0.1:9100;
      server 127.0.0.1:9200 down; 
     (down表示当前的server是down状态,不参与负载均衡) 
} 

你可能感兴趣的:(04_分布式专题,nginx,服务器,linux)