Nginx高可用、Redis Session共享笔记

参考资料:

1
2
3
4
5
6
7
8
9
10
11
12
13
视频资料:
nginx的keepalived高可用基础教程
https://www.bilibili.com/video/av78800330

文章资料:
Nginx基础篇
https://segmentfault.com/a/1190000015590667

Nginx高并发下的优化
https://segmentfault.com/a/1190000011405320

基于Nginx的中间件架构(Nginx从头到尾讲解)
https://segmentfault.com/a/1190000013523163

1. Nginx功能介绍

  • web服务器

  • 反响代理服务器

  • 邮件服务器


2. Nginx负载均衡策略

  • 轮训(默认)

    1
    2
    3
    4
    upstream www.test.com{
    server 192.168.1.101;
    server 192.168.1.102;
    }
  • weight权重

    1
    2
    3
    4
    5
    #根据权重比例来分发请求,权重越高分配的比例越大,一般是根据服务器硬件配置来确定权重
    upstream www.test.com{
    server 192.168.1.101 weight=10;
    server 192.168.1.102 weight=5;
    }
  • ip_hash

    1
    2
    3
    4
    5
    6
    #ip_hash策略是根据用户客户端ip的hash值来分配具体服务器,这样每个访问的客户端都会固定访问某一个服务器,这样子就可以解决session丢失的问题,很多网站都采用这种策略来做负载均衡,解决session不同步的问题
    upstream www.test.com{
    ip_hash;
    server 192.168.1.101;
    server 192.168.1.102;
    }
  • Least_conn最少连接

    1
    2
    3
    4
    5
    6
    #web请求后被分发到连接数量最少的服务器上
    upstream www.test.com{
    least_conn;
    server 192.168.1.101;
    server 192.168.1.102;
    }

    负载均衡备份和宕机

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #备份backup配置,其他非backup机器挂掉之后,才会请求backup机器
    upstream www.test.com{
    server 192.168.1.101;
    server 192.168.1.102 backup;
    }

    #宕机down配置
    #配置down的服务器不参与负载均衡,一般在维护某台服务器的时候使用
    upstream www.test.com{
    server 192.168.1.101;
    server 192.168.1.102 down;
    }

3.Nginx配置说明

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
user nginx;		#配置worker进程运行用户
worker_processes auto; #配置worker进程数量,一般推荐为cpu核心数量,如果为了追求极限性能的话,可以核心数*2

error_log /var/log/nginx/error.log warn; #配置全局错误日志文件以及配置级别(debug | info | notice | warn | error | crit)
pid /var/run/nginx/nginx.pid; #配置进程pid文件

#加载动态模块的配置,具体的使用可以参见搜索引擎
# Load dynamic modules. See /usr/share/doc/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

#events是配置工作模式和连接数
events {
use epoll;
worker_connections 1024; #配置每个worker进程连接数上限
}
#说明: nginx支持的总连接数 = worker_processes * worker_connections


http {
include /etc/nginx/mime.types; #配置nginx支持哪些多媒体类型
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 /var/log/nginx/access.log main;

sendfile on; #开启高效文件传输模式
tcp_nopush on; #开启防止网络组赛模式
tcp_nodelay on; #网络小包的延时设置,具体可以参考搜索引擎
keepalive_timeout 65; #长连接超时时间,单位秒
gzip on; #开启gzip压缩输出


#默认http配置文件路径
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;



server{
listen 80;
server_name file1.waigua.la;
charset utf-8;
client_max_body_size 12048M;
location / {
root /;
try_files /date1/ftproot/data/waigua1$uri /date1/ftproot/data/xixisoft1$uri /date1/ftproot/ftp/$uri =404;
}
}

server{
listen 80;
server_name file1.waig8.com;
charset utf-8;
client_max_body_size 12048M;
location / {
root /;
try_files /date1/ftproot/data/xixisoft1$uri /date1/ftproot/data/waigua1$uri /date1/ftproot/ftp/$uri =404;
}
}

}

关于日志级别:

1
2
3
4
5
6
>在配置nginx.conf的时候,有一项是指定错误日志的,默认情况下不指定也没有关系,因为nginx很少有错误日志记录,但是为了防止出现问题能够方便排查,我们还是非常有必要记录一下日志

>error_log 级别分为 debug,info,notice,warn,error,crit 默认为crit,该级别在日志名后面定义格式如下:
>error_log /your/path/error.log crit;

>crit记录的日志最少,而debug记录的日志最多,如果你的nginx遇到一些问题,比如502比较频繁出现,但是看默认的error_log并不能看到有意义的信息,那么就可以调整一下错误日志的级别,比如调整到error级别的时候,错误日志记录的内容就会更加丰富

4.Nginx服务器资源常见配置

4.1 动静分离配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#匹配所有图片,包括ico,还有一些其他字体资源(打开上面的注释,注释掉下面的代理,就会默认到root对应的目录下去找资源文件,找不到就会触发404)
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|ico|ttf|woff|swf)$
{
#root /usr/share/nginx/html;
proxy_pass http://static.test.com
}

#匹配所有css,js文件
location ~ .*\.(css|js)?$
{
#root /usr/share/nginx/html;
proxy_pass http://static.test.com
}

#匹配所有html文件
location ~ .*\.(html)?$
{
#root /usr/share/nginx/html;
proxy_pass http://static.test.com
}

4.2 301重定向配置

1
2
3
4
5
6
7
#把主域名,不带www的域名重定向到www开头的服务器
server {
listen 80;
server_name test.com;
rewrite ^/(.*) http://www.test.com/$1 permanent;
access_log off;
}

4.3 Nginx实现PC和手机域名URL重定向(需要双端有完全相同的url页面)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
server {
# 监听 80 端口
listen 80;
server_name www.test.com;
client_max_body_size 2048M;
access_log /usr/local/nginx/logs/access.log combined;
location / {
#判断如果是mobile的请求头,就把/pc后面的参数,全部拼接到http://m.test.com/m/后面
if ( $http_user_agent ~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|
(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)
|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|
(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|
(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|
(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
{
rewrite ^/pc/(.*)$ http://m.test.com/m/$1;
}

# 反向代理到 8080 端口
proxy_pass http://www.test.com:28001;
add_header Access-Control-Allow-Origin *;
}

}

server {
# 监听 80 端口
listen 80;
server_name m.test.com;
client_max_body_size 2048M;
access_log /usr/local/nginx/logs/access.log combined;
location / {
#判断如果是pc的请求头,就把/m后面的参数,全部拼接到http://www.test.com/pc/后面
if ( $http_user_agent !~ "(MIDP)|(WAP)|(UP.Browser)|(Smartphone)|(Obigo)|(Mobile)|(AU.Browser)|(wxd.Mms)|(WxdB.Browser)|(CLDC)|
(UP.Link)|(KM.Browser)|(UCWEB)|(SEMC-Browser)|(Mini)|(Symbian)|(Palm)|(Nokia)|(Panasonic)|(MOT-)|(SonyEricsson)|(NEC-)|(Alcatel)
|(Ericsson)|(BENQ)|(BenQ)|(Amoisonic)|(Amoi-)|(Capitel)|(PHILIPS)|(SAMSUNG)|(Lenovo)|(Mitsu)|(Motorola)|(SHARP)|(WAPPER)|(LG-)|
(LG/)|(EG900)|(CECT)|(Compal)|(kejian)|(Bird)|(BIRD)|(G900/V1.0)|(Arima)|(CTL)|(TDG)|(Daxian)|(DAXIAN)|(DBTEL)|(Eastcom)|(EASTCOM)|
(PANTECH)|(Dopod)|(Haier)|(HAIER)|(KONKA)|(KEJIAN)|(LENOVO)|(Soutec)|(SOUTEC)|(SAGEM)|(SEC-)|(SED-)|(EMOL-)|(INNO55)|(ZTE)|
(iPhone)|(Android)|(Windows CE)|(Wget)|(Java)|(curl)|(Opera)" )
{
rewrite ^/m/(.*)$ http://www.test.com/pc/$1 last;
}

# 反向代理到 8080 端口
proxy_pass http://www.test.com:28001;
add_header Access-Control-Allow-Origin *;
}

}