Nginx从安装到使用快速入门

  • 安装Nginx
  • Nginx常用命令
  • 配置文件说明
  • Nginx作静态资源服务器
  • Nginx作负载均衡
  • 负载均衡策略
  • 轮询
  • 权重
  • ip_hash
  • 最少连接策略
  • 负载均衡的几个其他配置
  • Nginx作静态资源代理服务器
  • Nginx+Tomcat动静分离


安装Nginx

1、首先去Nginx官网下载Linux版本的Nginx:http://nginx.org/en/download.html,再通过远程工具上传到虚拟机;
2、解压安装包:tar -zxvf nginx-1.14.2.tar.gz;
3、切换至解压后的目录cd nginx-1.14.2,执行./configure --prefix=/usr/local/nginx命令指定安装路径;
4、执行make命令进行编译;
5、执行make install安装;
6、安装完毕。
注意:安装Nginx需要依赖几个相关库,分别是gcc、openssl、pcre、zlib,缺少哪个就使用yum命令安装哪个就行。

Nginx常用命令

普通启动
切换到Nginx的安装目录下的sbin目录,执行./nginx启动,启动后可以执行ps -ef | grep nginx查看进程

[root@localhost sbin]# pwd
/usr/local/nginx/sbin
[root@localhost sbin]# ./nginx 
[root@localhost sbin]# ps -ef | grep nginx
root      3417     1  0 19:41 ?        00:00:00 nginx: master process ./nginx
nobody    3418  3417  0 19:41 ?        00:00:00 nginx: worker process
root      3420  2036  0 19:41 pts/0    00:00:00 grep --color=auto nginx

指定配置文件启动
同样在sbin目录下,执行./nginx -c /usr/local/nginx/conf/nginx.conf,-c后为指定的配置文件,注意配置的路径必须是绝对路径

Nginx启动后,可以在浏览器地址栏输入自己虚拟机的ip地址,看到如下界面表示启动成功:

nginx如何安装health_check nginx安装与使用_nginx


优雅的关闭Nginx

首先执行ps -ef | grep nginx,应该能看到如下信息:

root      3417     1  0 19:41 ?        00:00:00 nginx: master process ./nginx
nobody    3418  3417  0 19:41 ?        00:00:00 nginx: worker process
root      3420  2036  0 19:41 pts/0    00:00:00 grep --color=auto nginx

你会看到两个进程——master进程和worker进程,master进程读取配置文件,并管理worker进程,而worker进程则对请求进行实际处理。但实际上,你只需要记住master进程的pid即可。

接下来执行kill -quit 3417(我的master进程pid是3417)即可关闭,这种关闭方式会处理完所有请求后再关闭,所以称之为优雅的关闭。

同在sbin目录下执行./nginx -s quit退出。

快速关闭Nginx
同样执行ps -ef | grep nginx找出Nginx的主进程号,执行kill -term 主pid即可关闭,这种关闭方式不管请求是否处理完成,直接关闭。

同在sbin目录下执行./nginx -s stop退出。

重启Nginx
在sbin目录下,执行./nginx -s reload重启Nginx。

检查配置文件
执行/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -t或者在sbin目录下执行./nginx -c /usr/local/nginx/conf/nginx.conf -t命令,检查配置文件语法是否有误。

配置文件说明

#配置worker进程运行用户 nobody也是一个linux用户,一般用于启动程序,没有密码
user  nobody;  
#配置工作进程数目,根据硬件调整,通常等于CPU数量或者2倍于CPU数量
worker_processes  1;  
#配置全局错误日志及类型,[debug | info | notice | warn | error | crit],默认是error
error_log  logs/error.log;  
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
pid        logs/nginx.pid;  #配置进程pid文件 
###====================================================
#配置工作模式和连接数
events {
    #配置每个worker进程连接数上限,nginx支持的总连接数就等于worker_processes * worker_connections
    worker_connections  1024;  
}
###===================================================
#配置http服务器,利用它的反向代理功能提供负载均衡支持
http {
    #配置nginx支持哪些多媒体类型,可以在conf/mime.types查看支持哪些多媒体类型
    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日志及存放路径,并使用上面定义的main日志格式
    #access_log  logs/access.log  main;
    sendfile        on;  #开启高效文件传输模式
    #tcp_nopush     on;  #防止网络阻塞
    #keepalive_timeout  0;
    keepalive_timeout  65;  #长连接超时时间,单位是秒
    #gzip  on;  #开启gzip压缩输出
	###-----------------------------------------------
    #配置虚拟主机,可以有多个
    server {
        listen       80;  #配置监听端口
        server_name  localhost;  #配置服务名
        #charset koi8-r;  #配置字符集
        #access_log  logs/host.access.log  main;  #配置本虚拟主机的访问日志
	#默认的匹配斜杠/的请求,当访问路径中有斜杠/,会被该location匹配到并进行处理
        location / {
	    #root是配置服务器的默认网站根目录位置,默认为nginx安装主目录下的html目录
            root   html;  
	    #配置首页文件的名称
            index  index.html index.htm;  
        }		
        #error_page  404              /404.html;  #配置404页面
        # redirect server error pages to the static page /50x.html
        #error_page   500 502 503 504  /50x.html;  #配置50x错误页面       
	#精确匹配
	location = /50x.html {
            root   html;
        }

Nginx作静态资源服务器

1、上传静态资源到虚拟机;
2、修改配置文件,在server{……}中添加如下内容;

# 自定义路径名,这里拦截的是根路径下ace请求
location /ace {
			#自定义目录名
            root   /opt/www;
            index  login.html;
        }

注意: root为根路径,也就是说我们要访问的静态资源是放在/opt/www/ace这个目录中的。

nginx如何安装health_check nginx安装与使用_Nginx_02


3、启动或重启Nginx,在浏览器中访问 虚拟机IP/ace,如下:

nginx如何安装health_check nginx安装与使用_静态资源_03

Nginx作负载均衡

演示Nginx作负载均衡需要准备几个Tomcat和一个web项目,我在自己的虚拟机上已经安装配置了多个Tomcat并上传war包到webapps目录下。

nginx如何安装health_check nginx安装与使用_nginx_04


接下来修改配置文件,主要做如下配置:

upstream www.myweb.com{
	# 服务清单列表,配置目标服务的ip以及端口号
	server 192.168.43.129:8081;
	server 192.168.43.129:8082;
    }
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
	# 配置一个地址路径拦截 /表示根路径,这个规则是要拦截根路径下的myweb请求
	location /myweb {
	    # 配置代理,其中www.myweb.com 为自定义内容
	    proxy_pass http://www.myweb.com;
        }
    }

upstream位置在server之前,http{……}内,其作用是配置服务清单列表,其中www.myweb.com为任意自定义内容,但必须与下方某个location中的proxy_pass的值对应,在upstream{……}中去配置服务的ip和端口。接下来启动Tomcat和Nginx,再到浏览器中访问:192.168.43.129/myweb,验证成果。

nginx如何安装health_check nginx安装与使用_nginx_05

负载均衡策略

轮询

轮询策略是默认策略,每个服务器轮流接受请求,上述配置就是使用轮询策略。

权重

后端服务器性能不均的情况下,可以考虑使用权重策略,使能者多劳,只需要在上面的upstream块中加入weight配置项,如下:

upstream www.myweb.com{
	server 192.168.43.129:8081 weight=3;
	server 192.168.43.129:8082 weight=1;
    }

这样配置后每个请求按一定比例分发到不同的后端服务器,weight值越大被访问的比重越大。

ip_hash

ip_hash也叫ip绑定,每一个ip都会经由一个hash函数计算hash值,再由这个hash值模上后端服务器数量,得到的值可以理解为处理请求的服务器“索引”,ip绑定策略能够解决绝大多数情况下的session丢失问题,但并不常用,配置如下:

upstream www.myweb.com{
	ip_hash;
	server 192.168.43.129:8081; #hash(ip) % 2 = 0
	server 192.168.43.129:8082; #hash(ip) % 2 = 1
    }

最少连接策略

最少连接策略会将请求发送给客户端连接数最少的后端服务器,配置如下:

upstream www.myweb.com{
	least_conn;
	server 192.168.43.129:8081;
	server 192.168.43.129:8082;
    }

负载均衡的几个其他配置

backup

upstream www.myweb.com{
	server 192.168.43.129:8081;
	#其它所有的非backup机器都宕机的时候,才请求backup机器
	server 192.168.43.129:8082 backup;
    }

注意:在上述任何一种策略中,Nginx都会对后端服务器的状态进行检查,只要配置的任何一台服务器宕机,便不会有请求去往这台服务器。

down

upstream www.myweb.com{
	server 192.168.43.129:8081;
	#down表示当前的server是down状态,不参与负载均衡
	server 192.168.43.129:8082 down;
    }

Nginx作静态资源代理服务器

Nginx对于静态资源的处理性能更好,我们可以把静态资源的访问交给Nginx,tomcat专心处理动态资源。

nginx如何安装health_check nginx安装与使用_nginx_06


在上一步负载均衡的配置文件中额外添加一个location,如下:

#拦截请求路径中包含js或css或image的所有请求
	location ~ .*/(js|css|image) {
            root   opt/www/static;
        }

这个location拦截的是请求路径中包含js或css或image的所有请求,是一个正则表达式:

  • ~: 波浪线表示表示正则匹配,也就是说后面的内容可以是正则表达式
  • .:点表示任意字符
  • *:星号表示一个或多个字符
  • |:竖线表示或者

这样配置后,诸如${pageContext.request.contextPath}/image/001.jpg这种请求就会有Nginx处理并返回。

也可以通过正则表达式配置静态资源后缀实现代理静态资源,如下:

location ~ .*\.(js|css|htm|html|gif|jpg|jpeg|png|bmp|swf|ioc|rar|zip|txt|flv|mid|doc|ppt|pdf|xls|mp3|wma)$ {
    	root /opt/www/static;
}

使用上述两种方法其一完成配置后,需要将静态资源放到指定目录下,上例中我们的静态资源存放的目录应该是/opt/www/static/myweb

Nginx+Tomcat动静分离

将静态资源代理和负载均衡结合起来就是动静分离,如下:

nginx如何安装health_check nginx安装与使用_静态资源_07


首先,在Nginx的conf目录下执行cp nginx.conf 新文件名.conf命令,将配置文件复制两份。

nginx如何安装health_check nginx安装与使用_Nginx_08


其中,新复制的两份配置文件是用来做静态资源代理的,原配置文件用来做负载均衡,对应上图。先修改新复制的配置文件,它只是一个静态资源服务器,不做负载均衡,所以要删掉upstream{……}以及访问动态资源的location{……},最后别忘了修改端口号,如下:

nginx如何安装health_check nginx安装与使用_静态资源_09


接下来修改原配置文件,由于现在它要负责对静态资源访问做负载均衡,所以首先原静态资源location{……}中的内容改为proxy_pass ……,再配置一个静态资源的upstream{……},指定目标端口和ip,如下:

nginx如何安装health_check nginx安装与使用_nginx_10


通过指定配置文件的方式启动三个Nginx./nginx -c /usr/local/nginx/conf/nginx81.conf和两个tomcat,到浏览器中访问 虚拟机ip/myweb,验证成果。