nginx笔记
# nginx笔记
# 下载与安装
官网下载nginx和pcre压缩包
安装pcre依赖
先解压
tar -xvf pcre2-10.34.tar.gz
进入解压的文件
cd pcre2-10.34
执行配置
./configure
编译并安装
make && make install
查看版本号
pcre-config --version
安装其他依赖
yum -y install make zlib zlib-devel gcc c++ libtool openssl openssl-devel
安装nginx
- 先解压
tar -xvf nginx-1.16.1.tar.gz
- 执行配置
./configure
- 编译并安装
make && make install
- 安装成功之后/usr/local/nginx/sbin文件夹
- 先解压
启动nginx,
cd /usr/local/nginx/sbin
,执行./nginx
,查看进程ps -ef | grep nginx
在
/usr.local/nginx/conf
目录下有nginx.conf
配置文件
# 防火墙相关
- 开启防火墙
systemctl start firewalld
- 查看防火墙状态
systemctl status firewalld
- 查看防火墙开放端口
firewall-cmd --list-all
- 永久开放http
firewall-cmd --add-service=http --permanent
- 开放某个端口
firewall-cmd --add-port=80/tcp --permanent
- 关闭某个端口号
firewall-cmd --remove-port=80/tcp --permanent
- 重启防火墙
firewall-cmd --reload
- 关闭防火墙
systemctl stop firewalld
# nginx常用命令
前提条件:进入/usr/local/nginx/sbin目录中
- 查看nginx版本号:
./nginx -v
- 启动nginx:
./nginx
- 关闭nginx:
./nginx -s stop
- 重新加载nginx(改了nginx.conf就重新加载):
./nginx -s reload
# nginx的配置文件
所在位置:
/usr/local/nginx/conf/nginx.conf
文件组成与说明:
### ----------------- start 全局块 -------------------------- ### 全局块从配置文件开始到events块之间的内容,主要设置一些影响nginx服务器整体运行的配置指令 #user nobody; worker_processes 1; ### worker_processes值越大,可以支持的并发处理量越大 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; ### ----------------------- end 全局块 --------------------------- ### ----------------------- start events块 -------------------- ### events块主要影响nginx服务器与用户的网络连接 events { worker_connections 1024; ### 支持的最大连接数 } ### -------------------- end events块 ---------------------------- ### ----------------------- start http块 -------------------- ### 服务器配置最频繁的一部分,代理、缓存和日志定义等绝大多数功能和第三方模块的配置都在这里 ### http块包含http全局块和server块 ### (1)http全局块: 文件引入、MIME-TYPE定义、日志自定义、连接超时时间、单链接请求数上限等 ### (2)server块:和虚拟主机有密切相关,里面包括了全局server和location http { 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 logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; #gzip on; server { listen 80; server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / { root html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } # another virtual host using mix of IP-, name-, and port-based configuration # #server { # listen 8000; # listen somename:8080; # server_name somename alias another.alias; # location / { # root html; # index index.html index.htm; # } #} # HTTPS server # #server { # listen 443 ssl; # server_name localhost; # ssl_certificate cert.pem; # ssl_certificate_key cert.key; # ssl_session_cache shared:SSL:1m; # ssl_session_timeout 5m; # ssl_ciphers HIGH:!aNULL:!MD5; # ssl_prefer_server_ciphers on; # location / { # root html; # index index.html index.htm; # } # } } ### ----------------------- end http块 --------------------
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
# nginx配置实例-反向代理
# 实例一
实现效果:
(1)打开浏览器,输入www.123.com,跳转到linux中的某个主页,这里以http://106.54.2.108:3000为例
访问过程分析:
配置windows的host文件,
C:\Windows\System32\drivers\etc\host
,打开host在最后一行添加106.54.2.108 www.123.com
在nginx配置反向代理
(1)server_name改成nginx接收的ip地址,端口是80
(2)location配置转发路径,即实现服务器ip
重启nginx
./nginx -s reload
# 实例二
实现效果: (1)访问http://106.54.2.108:9001/edu/,直接跳转到127.0.0.1:8080
(2)访问http://106.54.2.108:9001/vod/,直接跳转到127.0.0.1:8081
nginx的配置:
location说明:
location [= | ~ | ~* | ^~] uri { }
1
2- = : 用于不含正则表达式的uri前,要求请求字符串与uri严格匹配,如果匹配成功,就停止继续向下搜索并立即处理请求
- ~ : 用于uri前包含正则表达式,并且区分大小写
- ~* : 用于uri前包含正则表达式,并且不区分大小写
- ^~ : 用于不含正则表达式的uri前,要求nginx服务器找到标识uri和关键字符串匹配度最高的location后,立即使用此location处理请求,而不再使用location块中的正则uri和请求字符串做匹配
# nginx配置实例-负载均衡
实现效果:
(1)浏览器地址栏输入地址http://106.54.2.108:9001/fzjh/,负载均衡效果,平均到8080和8081端口中
先在配置文件中创建upstram,里面配置srever存放负载均衡的服务器
在nginx服务器server里的location配置proxy_pass为http://你的创建的upstream名称
负载均衡分配策略:
轮询(默认)
每个请求按时间顺序逐一分配到不同服务器,如果服务器down掉,能自动删除
权重weight
权重越高,被分配的几率越大
upstream myserver { server 127.0.0.1:8080 weight=5; server 127.0.0.1:8081 weight=10; }
1
2
3
4ip_hash
每个请求访问按ip的hash结果进行分配,这样每个访客固定访问一个后端服务器,可以解决session问题
upstream myserver { ip_hash; server 127.0.0.1:8080; server 127.0.0.1:8081; }
1
2
3
4
5fair方式
按照后端服务器的响应时间进行分配,响应时间越短的优先分配
upstream myserver { fair; server 127.0.0.1:8080; server 127.0.0.1:8081; }
1
2
3
4
5
# nginx的动静分离
# 什么是动静分离
简单来说就是不动态请求和静态请求分离开,而不是简单的把静态资源和动态资源物理分离,目前实现动静分离的方式分为两种:一是把静态文件放在一个独立的服务器,动态资源放在另一个服务器。二是动态和静态文件混合发布,使用nginx区分开。
- 通过location可以指定不同的后缀名实现不同的请求转发,通过expries参数设置,可以设置浏览器缓存时间,减少与服务器之间的请求和流量。具体expries定义:是给一个资源设置一个过期时间,无需服务器去验证,直接通过浏览器自身确认是否过期即可。
# 实例
实现效果:
通过http://106.54.2.108:9001/www/可以访问到服务器上的
/data/www
文件夹下文件,通过http://106.54.2.108:9001/image/可以访问到服务器上的/data/images
文件夹下文件分别创建文件夹/data/www和/data/images,分别往里面放置html文件和图片文件
配置nginx
注意:使用root配置的实际资源路径是root + location,但是使用别名alias配置的实际路径就是alias
# nginx的高可用
# 什么是高可用
- 需要两台服务器
- 需要keep-alive
- 需要虚拟ip
# nginx的原理
# master和worker
# worker如何工作
# 一个master和多个worker的好处
可以使用nginx -s reload热部署,利用nginx热部署操作
每个worker是一个独立的进程,不需要加锁,如果有其中的一个worker出现了问题,其他worker可以继续进行争抢,实现请求过程,不会中断
nginx同redis类型采用了io多路复用
每个worker数(worker_processes)和服务器cpu数量相等最为合适
连接数worker_connections
发送请求,占用几个连接数?
答案:2(普通静态访问的时候)或者4(有反向代理的时候)个
nginx有一个master,有四个worker,每个worker支持的最大连接数1024,那支持的最大并发数是多少?
答案:①普通的静态访问的时候,最大并发数为:worker_connections * worker_processes / 2 ②HTTP作为反向代理来说,最大并发数为:worker_connections * worker_processes / 4