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
首先执行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这个目录中的。
3、启动或重启Nginx,在浏览器中访问 虚拟机IP/ace,如下:
Nginx作负载均衡
演示Nginx作负载均衡需要准备几个Tomcat和一个web项目,我在自己的虚拟机上已经安装配置了多个Tomcat并上传war包到webapps目录下。
接下来修改配置文件,主要做如下配置:
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,验证成果。
负载均衡策略
轮询
轮询策略是默认策略,每个服务器轮流接受请求,上述配置就是使用轮询策略。
权重
后端服务器性能不均的情况下,可以考虑使用权重策略,使能者多劳,只需要在上面的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专心处理动态资源。
在上一步负载均衡的配置文件中额外添加一个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的conf目录下执行cp nginx.conf 新文件名.conf
命令,将配置文件复制两份。
其中,新复制的两份配置文件是用来做静态资源代理的,原配置文件用来做负载均衡,对应上图。先修改新复制的配置文件,它只是一个静态资源服务器,不做负载均衡,所以要删掉upstream{……}以及访问动态资源的location{……},最后别忘了修改端口号,如下:
接下来修改原配置文件,由于现在它要负责对静态资源访问做负载均衡,所以首先原静态资源location{……}中的内容改为proxy_pass ……
,再配置一个静态资源的upstream{……},指定目标端口和ip,如下:
通过指定配置文件的方式启动三个Nginx./nginx -c /usr/local/nginx/conf/nginx81.conf
和两个tomcat,到浏览器中访问 虚拟机ip/myweb,验证成果。