【简介】
Nginx是一款轻量级的文本反向代理服务器及电子邮件代理服务器,其特点是内存少,并发高。
【工作原理】
Nginx由内核和模块组成,完成工作是通过查找配置文件将客户端请求映射到一个location block(location是用于URL匹配的命令),location配置的命令会启动不同模块完成工作。
Nginx模块分为核心模块,基础模块和第三方模块。
(1) 核心模块:HTTP模块、EVENT模块(事件)、MAIL模块。
(2)基础模块:HTTP Access模块、HTTP FastCGI模块、HTTP Proxy模块、HTTP Rewrite模块。
(3) 第三方模块:HTTP Upstream Request Hash模块、Notice模块、HTTP Access Key模块。
【用途】
反向代理,负载均衡,动静分离
【性能优化】
web服务器,处理静态文件、索引文件以及自动索引效率高。
(1):代理服务器,快速高效反向代理,提升网站性能。
(2):b负载均衡器,内部支持Rails和PHP,也可支持HTTP代理服务器,对外进行服务。同时支持简单容错和利用算法进行负载均衡。
(3):性能方面,Nginx专门为性能设计,实现注重效率。采用Poll模型,可以支持更多的并发连接,并在大并发时占用很低内存。
(4):稳定性方面,采用分阶段资源分配技术,使CPU资源占用率低。
(5):高可用性方面,支持热备,启动迅速。
【安装】
准备:nginx.tar.gz
环境:nginx需要依赖gcc,pcre和zlib环境
yum install gcc-c++
yum install pcre
yum install pcre-devel
yum install zlib
yum install zilb-devel
注意:如果在本机安装centos虚拟机无网络,请将网络模式调节为NET模式,并将System eth0 的IPV4 Settings模式调节为Automatic模式
开始安装nginx
解压安装
tar -xzvf nginx-1.6.2.tar.gz
cd nginx-1.6.2
./configure --prefix=/usr/local/nginx
make&&make install
启动
cd /usr/local/nginx/sbin
./nginx
./nginx -s stop
./nginx -s reload
访问:
本虚拟机访问:localhost/
win访问:ip/
【目录】
【配置】
nginx的配置在nginx的conf目录下(主要关注nginx.conf文件即可)
这里也模拟一个服务配置:
server {
listen 8888;
server_name hadoop;
location / {
root html;
index lvfang.html;
}
}
确保要有相应的资源,这里确保html下有lvfang.html文件
配置后访问8888端口的结果
【日志】
nginx的日志存放在logs文件下
access.log 成功日志
error.log 失败日志
nginx.pid nginx的id
日志配置也是在conf下的nginx.conf文件中
在nginx.conf中的server配置项中有一个access_log配置内容如下:
ccess_log logs/host.access.log main;
表示成功日志的输出位置为 logs/host.access.log,日志格式为main格式(全局的)
这里可以查看并放开nginx.conf上被注释的main格式内容
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
两个server的配置
![2017-05-17_230009.png](http://upload-images.jianshu.io/upload_images/2608446-f64136fe03ab0b88.png?
![Uploading 2017-05-17_230112_282253.png . . .]imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
两个server的日志输出
main格式配置:
【日志切分及定时备份】
第一步:如何实现日志切分,编写shell脚本
第二步:定时任务对脚本进行调度 crontab -e
shell脚本内容
#!/bin/sh
BASE_DIR=/usr/local/nginx
BASE_FILE_NAME=access_80.log
CURRENT_PATH=$BASE_DIR/logs
BAK_PATH=$BASE_DIR/datalogs
CURRENT_FILE=$CURRENT_PATH/$BASE_FILE_NAME
BAK_TIME=`/bin/date -d yesterday +%Y%m%d%H%M`
BAK_FILE=$BAK_PATH/$BAK_TIME-$BASE_FILE_NAME
echo $BAK_FILE
$BASE_DIR/sbin/nginx -s stop
mv $CURRENT_FILE $BAK_FILE
$BASE_DIR/sbin/nginx
以上shell脚本是每分钟备份一下日志
定时调度:
crontab -e
*/1 * * * * sh /usr/local/nginx/sbin/log.sh #*/表示一分钟定时执行一次log.sh脚本
crontab定时执行格式
基本格式 :
* * * * * command
分 时 日 月 周 命令
第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
具体的 crontab -e时间格式执行命令查看
http://www.jb51.net/LINUXjishu/19905.html
定时结果:
【反向代理配置】
server {
listen 9999;
server_name localhost;
access_log logs/access_9999.log main;
location / {
root html;
index index.html;
}
location ~ \.jsp$ {
proxy_pass http://192.168.22.128:8080;
}
}
反向代理案例:访问nginx,转向tomcat
修改nginx配置:
添加location
location ~ \.jsp$ {
proxy_pass http://192.168.22.128:8080;
}
tomcat/webapps/ROOR下添加测试页面 test.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test Page</title>
</head>
<body>
host:192.168.22.128<br/>
port:8080<br/>
Test1 Page!!!<br/>
remote ip : <%-- <%=request.getHeader("X-real-ip") %> --%> <br/>
nginx server ip : <%=request.getRemoteAddr()%>
</body>
</html>
重启nginx ./nginx -s reload
启动tomcat
正常访问tomcat
192.168.22.128:8080
正常访问测试页面192.168.22.128:8080/test.jsp
nginx反向代理访问192.168.22.128:9999/test.jsp
【负载均衡配置】
注意:这里upstream与server是平级
upstream myapp {
server 192.168.22.128:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.22.131:8080 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 8888;
server_name hadoop;
access_log logs/access_8888.log main;
location / {
proxy_set_header X-real-ip $remote_addr;
proxy_pass http://myapp;
root html;
index index.html;
}
}
【具体案例】
两台机器:192.168.22.128,192.168.22.131.实现访问nginx时第一次访问128,第二次访问131,相互间隔访问,负载均衡
准备:两个tomcat
给tomcat/webapps/ROOT下放测试页面test.jsp
test.jsp内容
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test Page</title>
</head>
<body>
host:192.168.22.131<br/>
port:8080<br/>
Test1 Page!!!<br/>
remote ip : <%-- <%=request.getHeader("X-real-ip") %> --%> <br/>
nginx server ip : <%=request.getRemoteAddr()%>
</body>
</html>
分别开启两个tomcat并访问:
修改nginx配置为以上负载均衡配置
upstream myapp {
server 192.168.22.128:8080 weight=1 max_fails=2 fail_timeout=30s;
server 192.168.22.131:8080 weight=1 max_fails=2 fail_timeout=30s;
}
server {
listen 8888;
server_name hadoop;
access_log logs/access_8888.log main;
location / {
proxy_set_header X-real-ip $remote_addr;
proxy_pass http://myapp;
root html;
index index.html;
}
}
重启nginx:./nginx -s reload
测试负载均衡:http://192.168.22.128:8888/test.jsp 重复访问
你会发现访问的地址完全一样,但是访问的tomcat在来回切换